วิธีการปรับการประมวลผลแบบมัลติคอร์ให้เหมาะสมใน ArcGIS


12

ฉันสนใจที่จะเรียนรู้วิธีการใช้ประโยชน์จากพลังการประมวลผลแบบมัลติคอร์ที่มีอยู่ในคอมพิวเตอร์เดสก์ท็อป อาร์คระบุว่าพื้นหลังการประมวลผลทางภูมิศาสตร์ช่วยให้ผู้ใช้สามารถใช้หลายคอร์อย่างไรก็ตามงานจำเป็นต้องรอให้งานก่อนหน้าเสร็จสิ้น

มีใครพัฒนาวิธีการประมวลผลทางภูมิศาสตร์แบบขนานหรือแบบมัลติเธรดใน Arc / Python หรือไม่? มีปัญหาคอขวดของฮาร์ดแวร์ที่ป้องกันการประมวลผลแบบมัลติคอร์ในแต่ละงานหรือไม่?

ฉันพบตัวอย่างที่น่าสนใจใน Stackoverflow ที่ดึงดูดความสนใจของฉันแม้ว่าจะไม่ใช่ตัวอย่างของกระบวนการทางภูมิศาสตร์:

from multiprocessing import Pool
import numpy

numToFactor = 976

def isFactor(x):
    result = None
    div = (numToFactor / x)
    if div*x == numToFactor:
        result = (x,div)
    return result

if __name__ == '__main__':
    pool = Pool(processes=4)
    possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1)
    print 'Checking ', possibleFactors
    result = pool.map(isFactor, possibleFactors)
    cleaned = [x for x in result if not x is None]
    print 'Factors are', cleaned

1
จากประสบการณ์การใช้งานอาร์คของฉันมันมักจะลงไปที่ 1) แยกข้อมูลของคุณออกเป็นจำนวน {จำนวนคอร์} ประมวลผลและประกอบซ้ำหรือ 2) อ่านทุกอย่างในหน่วยความจำและให้ x API จัดการเธรด this is not meant to discourageทราบว่า
valveLondon

ขอบคุณ valveLondon บางทีเทคโนโลยี Ivy Bridge ที่ใหม่กว่าและ Kepler GPU จะช่วยให้มีวิธีการประมวลผลที่ซับซ้อนยิ่งขึ้น
แอรอน

นี่คือลิงก์ไปยังบล็อกที่มีประโยชน์เกี่ยวกับการประมวลผลแบบหลามจากวิศวกรผลิตภัณฑ์เกี่ยวกับการวิเคราะห์ ESRIs และทีมงานการประมวลผลทางภูมิศาสตร์ blogs.esri.com/esri/arcgis/2011/08/29/multiprocessing
Aaron

คำตอบ:


11

นี่คือตัวอย่างของสคริปต์ arcpy แบบมัลติคอร์ กระบวนการนี้ใช้ CPU มากดังนั้นจึงปรับขนาดได้ดีมาก: รหัส Porting Avenue สำหรับการสร้าง Building Shadows ไปยัง ArcPy / Python สำหรับ ArcGIS Desktop?

ข้อมูลทั่วไปเพิ่มเติมบางส่วนในคำตอบนี้: สามารถเรียกใช้กระบวนการพร้อมกันในรูปแบบเดียวได้หรือไม่?


11

จากประสบการณ์ของฉันปัญหาที่ใหญ่ที่สุดคือการจัดการความมั่นคง หากคุณทำการประมวลผลหกสัปดาห์ในคืนเดียวคุณจะมีข้อผิดพลาดและข้อบกพร่องที่อธิบายไม่ได้หกสัปดาห์

อีกทางเลือกหนึ่งคือการพัฒนาสคริปต์แบบสแตนด์อโลนที่สามารถทำงานได้อย่างอิสระและล้มเหลวโดยไม่ทำให้เกิดปัญหา:

  • แยกข้อมูลออกเป็นส่วน ๆ ซึ่งแกนเดียวสามารถประมวลผลใน <20 นาที (ภารกิจ)
  • สร้างสคริปต์ Arcpy แบบสแตนด์อโลนที่สามารถประมวลผลงานเดียวและทำได้ง่ายที่สุด (ผู้ปฏิบัติงาน)
  • พัฒนากลไกในการทำงาน มีโซลูชันของไพ ธ อนที่มีอยู่มากมาย หรือคุณสามารถสร้างคิวของคุณเองได้
  • เขียนรหัสเพื่อยืนยันว่างานเสร็จสมบูรณ์ นี่อาจเป็นเรื่องง่ายเหมือนการตรวจสอบว่าไฟล์เอาต์พุตถูกเขียนขึ้น
  • ผสานข้อมูลเข้าด้วยกัน

1
ฉันพบว่าวิธีการนี้ซึ่งอาจรวมถึงการใช้โมดูลมัลติโปรเซสเซอร์เป็นส่วนขยายที่ดี - ส่วนขยายบางอย่างเช่นนักวิเคราะห์เชิงพื้นที่ทำงานได้ไม่ดีนักหากคุณมีฟังก์ชั่นเดียวกันหลายชุดทำงานพร้อมกัน สิ่งที่คุณอธิบายที่อนุญาตให้ผู้ใช้ควบคุมรูปแบบของการเข้าคิว (เช่นหลีกเลี่ยงการกำหนดเวลางานเหล่านั้นในเวลาเดียวกันหรือหลีกเลี่ยงการใช้ฐานข้อมูลเดียวกันในครั้งเดียวเพื่อเหตุผลในการล็อคไฟล์) จะดีที่สุด
นิ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.