เธรด OGR / GDAL ส่งผลให้มีการใช้งาน core ต่ำ


13

ฉันพยายามประมวลผลข้อมูลแรสเตอร์โดยใช้ ogr / gdal และฉันไม่สามารถใช้ประโยชน์จากคอร์ทั้งหมดในเครื่องได้ เมื่อฉันเรียกใช้กระบวนการบนแกนเดียวฉันได้รับประโยชน์ 100% ของแกนนั้น เมื่อฉันพยายามที่จะแบ่งออกเป็นมัลติคอร์ (ในตัวอย่างด้านล่างโดย chunking x ชดเชยและวางไว้ในคิว) ฉันได้รับการใช้ประโยชน์ที่น่าสงสารในแต่ละ 8 แกนของฉัน ดูเหมือนว่าจะเพิ่มการใช้ประโยชน์ได้สูงสุด 100% ในแต่ละคอร์ (เช่น 12.5% ​​สำหรับแต่ละคอร์)

ฉันกังวลว่าการใช้แหล่งข้อมูลเดียวกันคือคอขวด แต่ฉันก็ทำซ้ำไฟล์แรสเตอร์ต้นแบบสำหรับแต่ละคอร์ ... และการใช้งานคอร์ยังคงอึอยู่ สิ่งนี้ทำให้ฉันเชื่อว่า ogr หรือ gdal ทำตัวเหมือนทรัพยากรที่ใช้ร่วมกันในคอขวด แต่ฉันไม่พบสิ่งใดทางออนไลน์เกี่ยวกับเรื่องนั้น ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก!

นี่คือฟังก์ชัน "ผู้ช่วยเหลือ" ที่ทำงานภายในแต่ละเธรดผู้ทำงาน:

def find_pixels_intersect_helper(datasource, bounds_wkt, x_min, x_max):
    bounds = ogr.CreateGeometryFromWkt(bounds_wkt)
    rows_to_write = []
    for x_offset in range(x_min, x_max):
        for y_offset in range(datasource.RasterYSize):
            pxl_bounds_wkt = pix_to_wkt(datasource, x_offset, y_offset)
            pxl_bounds = ogr.CreateGeometryFromWkt(pxl_bounds_wkt)
            if pxl_bounds.Intersect(bounds):
                rows_to_write.append(['%s_%s' % (x_offset, y_offset), pxl_bounds.Centroid().ExportToWkt()])

ไม่แน่นอน แต่คุณตรวจสอบว่าหน่วยความจำเป็นคอขวดหรือไม่
lynxlynxlynx

@lynxlynxlynx - อ๋อ หน่วยความจำไม่ใช่คอขวดแน่นอน เคยพยายามติดตามสิ่งนี้ตลอดทั้งวัน ... มันแปลกดี
Max

อาจเป็นได้ว่าโปรแกรมควบคุมแรสเตอร์ที่คุณใช้นั้นไม่ได้ถูกออกแบบมาให้เรียกใช้จากเธรดมากกว่าหนึ่งเธรดในแต่ละครั้ง การอ้างอิง: mail-archive.com/gdal-dev@lists.osgeo.org/msg07283.html
blah238

คำตอบ:


10

ตกลง. นั่นเป็นวันในชีวิตของฉันที่ฉันจะไม่กลับมาอีก ปรากฎว่าปัญหาไม่ได้อยู่ในรหัสที่ฉันโพสต์ด้านบน ไม่เป็นไร ปรากฎว่านี่เป็นกรณีของเธรดเธรดกับการประมวลผลหลายรายการกระบวนการ

ตามที่ระบุไว้ในเอกสารหลาม :

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

ดังนั้นเธรดเธรดสำหรับการดำเนินการแบบ IO มากการประมวลผลหลายตัวประมวลผลมีไว้สำหรับการดำเนินการที่เข้มข้นของ CPU ฉันเปลี่ยนเป็นระบบประมวลผลหลายอย่างกระบวนการและทุกอย่างใช้งานได้ดี

ลองดูบทช่วยสอนนี้เพื่อเรียนรู้วิธีใช้การประมวลผลหลายขั้นตอน


ฉันเพิ่งจะแนะนำว่าฉันไม่แน่ใจว่าการใช้งานแบบไหน (ยังมีการใช้งานของบุคคลที่สาม ) ที่คุณใช้อยู่ :) ฉันได้ใช้เมื่อเร็ว ๆ นี้เพื่อเร่งเครื่องมือเงาอาคารเรียบร้อยที่นี่: พอร์ต "การสร้างเงาอาคาร" ถนน โค้ดถึง ArcGIS 10
blah238

+1 ฉันกำลังจะโพสต์ว่าคุณควรมีคำในรายชื่อผู้รับจดหมาย GDAL-dev; แต่ตอนนี้ฉันดีใจที่คุณไม่ได้! สิ่งนี้ถูกกระรอกไปเพื่ออ้างอิงในอนาคต
MerseyViking

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