ภาษา Python ถือกำเนิดซีพียูแบบมัลติคอร์มาก่อนจึงไม่แปลกที่มันจะไม่ใช้มัน
นอกจากนี้โปรแกรมบางโปรแกรมอาจไม่ได้กำไรจากหลายคอร์ การคำนวณที่ทำในขั้นตอนที่ขั้นตอนต่อไปขึ้นอยู่กับผลลัพธ์ของขั้นตอนก่อนหน้าจะไม่เร็วขึ้นโดยใช้แกนเพิ่มเติม ปัญหาที่สามารถทำให้เป็นเวกเตอร์ได้ (การใช้การคำนวณแบบเดียวกันกับอาร์เรย์ขนาดใหญ่ของข้อมูล) สามารถทำได้ค่อนข้างง่ายในการใช้หลายคอร์เนื่องจากการคำนวณแต่ละรายการมีความเป็นอิสระ
เมื่อคุณได้ทำมากของการคำนวณที่ฉันสมมติว่าคุณกำลังใช้numpy ? ถ้าไม่ตรวจสอบมันออก มันเป็นส่วนขยายที่เขียนใน C ที่สามารถใช้ไลบรารีพีชคณิตเชิงเส้นที่ปรับให้เหมาะสมเช่น ATLAS สามารถเพิ่มความเร็วในการคำนวณเชิงตัวเลขอย่างมีนัยสำคัญเมื่อเทียบกับ Python มาตรฐาน
ต้องบอกว่ามีหลายวิธีในการใช้หลายแกนกับหลาม
- ในตัวเป็น
multiprocessing
โมดูล multiprocessing.Pool
ระดับให้ vectorization ข้าม CPU หลายตัวด้วยmap()
วิธีการและที่เกี่ยวข้อง แม้ว่าจะมีการแลกเปลี่ยนในที่นี่ หากคุณต้องสื่อสารข้อมูลจำนวนมากระหว่างกระบวนการดังนั้นค่าใช้จ่ายนั้นอาจลบล้างข้อดีของหลายคอร์
- ใช้งานโครงสร้างที่เหมาะสม หากมีการสร้าง numpy ด้วยไลบรารีมัลติเธรด ATLAS มันจะเร็วขึ้นสำหรับปัญหาใหญ่
- โมดูลใช้ส่วนขยายเช่นnumexpr , หลามขนาน , corepyหรือโคเปนเฮเกนเวกเตอร์ Byte รหัส
โปรดทราบว่าthreading
โมดูลไม่ได้มีประโยชน์สำหรับการนี้ เพื่อให้การจัดการหน่วยความจำง่ายขึ้นตัวล็อคการแปลสากล ("GIL") บังคับให้มีเพียงหนึ่งเธรดในแต่ละครั้งเท่านั้นที่สามารถประมวลผล python bytecode ได้ โมดูลภายนอกเช่น numpy สามารถใช้หลายเธรดภายในได้