คำถามติดแท็ก shared-memory

4
วัตถุหน่วยความจำที่ใช้ร่วมกันในการประมวลผลหลายขั้นตอน
สมมติว่าฉันมีอาร์เรย์จำนวนมากในหน่วยความจำฉันมีฟังก์ชันfuncที่รับอาร์เรย์ยักษ์นี้เป็นอินพุต (พร้อมกับพารามิเตอร์อื่น ๆ ) funcด้วยพารามิเตอร์ที่แตกต่างกันสามารถทำงานแบบขนานได้ ตัวอย่างเช่น: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] ถ้าฉันใช้ไลบรารีการประมวลผลหลายขั้นตอนอาร์เรย์ขนาดยักษ์นั้นจะถูกคัดลอกหลายครั้งในกระบวนการต่างๆ มีวิธีที่จะให้กระบวนการต่างๆใช้อาร์เรย์เดียวกันได้หรือไม่? วัตถุอาร์เรย์นี้เป็นแบบอ่านอย่างเดียวและจะไม่มีการแก้ไข จะมีอะไรซับซ้อนไปกว่านั้นถ้า arr ไม่ใช่อาร์เรย์ แต่เป็นวัตถุ python โดยพลการมีวิธีแบ่งปันหรือไม่? [แก้ไข] …

5
วิธีใช้หน่วยความจำร่วมกับ Linux ในภาษา C
ฉันมีปัญหาเล็กน้อยกับหนึ่งในโครงการของฉัน ฉันพยายามค้นหาตัวอย่างที่มีการบันทึกไว้เป็นอย่างดีเกี่ยวกับการใช้หน่วยความจำที่ใช้ร่วมกันfork()แต่ไม่ประสบความสำเร็จ โดยทั่วไปสถานการณ์คือเมื่อผู้ใช้เริ่มโปรแกรมฉันจำเป็นต้องเก็บค่าสองค่าในหน่วยความจำที่ใช้ร่วมกัน: current_pathซึ่งเป็นถ่าน *และfile_nameซึ่งเป็นchar *ด้วย ขึ้นอยู่กับอาร์กิวเมนต์ของคำสั่งกระบวนการใหม่จะเริ่มต้นด้วยfork()และกระบวนการนั้นจำเป็นต้องอ่านและแก้ไขตัวแปรcurrent_path ที่จัดเก็บในหน่วยความจำแบบแบ่งใช้ในขณะที่ตัวแปรfile_nameอ่านได้อย่างเดียว มีคำแนะนำที่ดีเกี่ยวกับหน่วยความจำที่ใช้ร่วมกันพร้อมรหัสตัวอย่าง (ถ้าเป็นไปได้) ที่คุณสามารถแนะนำฉันได้ไหม
117 c  linux  fork  shared-memory 

6
แชร์อาร์เรย์ Numpy ขนาดใหญ่ที่อ่านอย่างเดียวระหว่างกระบวนการหลายกระบวนการ
ฉันมี SciPy Array (เมทริกซ์) 60GB ฉันต้องแชร์ระหว่างmultiprocessing Processวัตถุมากกว่า5 ชิ้น ฉันเคยเห็น numpy-sharedmem และอ่านการสนทนานี้ในรายการ SciPy ดูเหมือนจะมีสองวิธีคือnumpy-sharedmemใช้ a multiprocessing.RawArray()และแมป NumPy dtypes ถึงctypes ตอนนี้numpy-sharedmemดูเหมือนจะเป็นทางไป แต่ฉันยังไม่เห็นตัวอย่างอ้างอิงที่ดี ฉันไม่ต้องการการล็อกใด ๆ เนื่องจากอาร์เรย์ (จริงๆแล้วคือเมทริกซ์) จะเป็นแบบอ่านอย่างเดียว ตอนนี้เนื่องจากขนาดของมันฉันต้องการหลีกเลี่ยงการทำสำเนา มันเสียงเหมือนวิธีที่ถูกต้องคือการสร้างเพียงสำเนาของอาร์เรย์เป็นsharedmemอาร์เรย์แล้วส่งผ่านไปยังProcessวัตถุ? คำถามเฉพาะสองสามข้อ: อะไรคือวิธีที่ดีที่สุดในการส่งแฮนเดิลแชร์ไปยังProcess()รายการย่อย ฉันต้องการคิวเพื่อส่งอาร์เรย์หนึ่งรอบหรือไม่? ท่อจะดีกว่าไหม? ฉันสามารถส่งเป็นอาร์กิวเมนต์ไปยังProcess()init ของคลาสย่อยได้หรือไม่ (โดยที่ฉันสมมติว่ามันถูกดอง) ในการสนทนาที่ฉันเชื่อมโยงไว้ข้างต้นมีการระบุว่าnumpy-sharedmemไม่ปลอดภัย 64 บิต? ฉันกำลังใช้โครงสร้างบางอย่างที่ไม่สามารถระบุแอดเดรสแบบ 32 บิตได้ มีข้อแลกเปลี่ยนกับRawArray()แนวทางนี้หรือไม่? ช้ากว่า buggier? ฉันต้องการการแมป ctype-to-dtype สำหรับเมธอด numpy-sharedmem หรือไม่? ใครมีตัวอย่างโค้ด OpenSource …

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