[นี่เป็นโพสต์แรกของฉันและฉันหวังว่าฉันจะไม่เข้าใจการใช้ SE อย่างสมบูรณ์ - ถ้าฉันขอโทษล่วงหน้า]
ฉันเห็นด้วยกับ "bgschaid" ว่าคำถามนั้นยากมากที่จะตอบตามข้อมูลที่ให้ไว้ มันสร้างความแตกต่างอย่างมากถ้าคุณต้องการรูทีนระดับต่ำเพื่อใช้ประโยชน์จากสถาปัตยกรรมแบบมัลติคอร์หรือหากคุณต้องการใช้ประโยชน์จากความขนานในการแก้ปัญหาแบบขนานที่น่าอับอาย - หรือสิ่งที่อยู่ในระหว่าง ภาพรวมของความเป็นไปได้การคำนวณแบบขนานที่แตกต่างกันในหลามสามารถพบได้ที่นี่
ในกรณีก่อนหน้านี้ฉันขอแนะนำให้ใช้เครื่องมือเช่นNumPy / SciPyซึ่งอย่างน้อยในรุ่นที่คอมไพล์ MKL จาก Enthought สนับสนุนสถาปัตยกรรมแบบมัลติคอร์ ที่นี่คุณสามารถควบคุมจำนวนคอร์ที่จะใช้ผ่านตัวแปรสภาพแวดล้อม "MKL_NUM_THREADS" สิ่งนี้ขึ้นอยู่กับห้องสมุดที่ได้รับการปรับปรุงให้ดีที่สุดซึ่งเราคาดหวังได้ยากที่จะเอาชนะประสิทธิภาพ ฉันเชื่อว่าขอแนะนำให้ใช้ไลบรารีที่มีคุณภาพสูงและปรับให้เหมาะสมสูงสุดเมื่อใดก็ตามที่เป็นไปได้
หากคุณต้องการใช้ประโยชน์จากความขนานในระดับหยาบเครื่องมือมัลติโพรเซสซิงของ Python นั้นใช้งานง่าย - และยังรองรับวัตถุข้อมูลที่ใช้ร่วมกัน มีเครื่องมือต่าง ๆ ที่ใช้เป็นส่วนหนึ่งของแพ็คเกจการประมวลผลหลายตัว ฉันใช้map_async (ชอบ SIMD) และApply_async (MIMD like) สำหรับปัญหาหลายอย่างที่ให้ผลลัพธ์ที่ดี multiprocessingแพคเกจค่อนข้างง่ายต่อการใช้งานและการเป็นส่วนหนึ่งของมาตรฐานของงูใหญ่หมายความว่าคุณสามารถคาดหวังว่าผู้ที่มีศักยภาพอื่น ๆ ของรหัสของคุณได้อย่างง่ายดายสามารถที่จะใช้มัน การประมวลผลหลายตัวยังเชื่อมโยงไปยังวัตถุข้อมูล NumPy โดยตรง เมื่อใช้การประมวลผลหลายตัวฉันอยากจะแนะนำให้คุณตั้งค่าตัวแปรสภาพแวดล้อม "MKL_NUM_THREADS" เป็น 1 เพื่อให้NumPyอนุญาตให้หนึ่งคอร์สำหรับแต่ละกระบวนการ / ผู้ปฏิบัติงาน - มิฉะนั้นคุณสามารถจบลงในการช่วงชิงทรัพยากรระหว่าง NumPy แบบขนานและมัลติโปรเซสเซอร์ซึ่งนำไปสู่การเสื่อมประสิทธิภาพ การประมวลผลหลายตัวทำงานได้ดีสำหรับสถาปัตยกรรม multi-CPU / multi-core ภายใต้ระบบปฏิบัติการเดียวกัน ฉันใช้มัลติโปรเซสเซอร์บนคอมพิวเตอร์หน่วยความจำที่ใช้ร่วมกันซึ่งมี 4 x Xeon E7-4850 CPU (แต่ละ 10 คอร์) และหน่วยความจำ 512 GB และทำงานได้ดีมาก อาร์เรย์ที่ใช้ร่วมกันสามารถจัดการโดยmultiprocessing.Arrayหรือsharedctypes คุณสามารถค้นหาเอกสาร Python ได้ที่นี่ - ตรวจสอบไฟล์library.pdf ฉันมีสไลด์อธิบายบางส่วนพื้นฐานของเรื่องนี้ - PM ฉันถ้าคุณต้องการเหล่านั้น
หากคุณมีการกำหนดค่าคลัสเตอร์ที่มีหน่วยความจำแบบกระจายฉันเชื่อว่าmpi4pyเป็นเครื่องมือที่ต้องการ ฉันไม่ได้ใช้สิ่งนี้ด้วยตัวเอง แต่ฉันรู้ว่ามันถูกใช้อย่างมากในการเขียนโปรแกรม Python แบบขนาน