ในช่วงไม่กี่ปีที่ผ่านมาห้องสมุด / โครงการซอฟต์แวร์หลายแห่งปรากฏว่ามีรูปแบบหรือรูปแบบอื่น ๆ ของการใช้งานร่วมกันของหน่วยความจำที่ใช้ข้อมูลร่วมกันแบบขนาน
แนวคิดหลักคือแทนที่จะเขียนโค้ดแบบเธรดอย่างชัดเจนโปรแกรมเมอร์ใช้อัลกอริธึมของพวกเขาเป็นงานที่ต้องพึ่งพาระหว่างกันซึ่งจะถูกกำหนดเวลาแบบไดนามิกโดยมิดเดิลแวร์จุดประสงค์ทั่วไปบนเครื่องหน่วยความจำที่ใช้ร่วมกัน
ตัวอย่างของห้องสมุดดังกล่าวคือ:
QUARK : เริ่มแรกออกแบบมาสำหรับไลบรารีพีชคณิตเชิงเส้นแบบขนานของMAGMAดูเหมือนว่าจะถูกใช้สำหรับวิธีการ Multipole แบบขนานแบบขนานเช่นกัน
Cilkเดิมโครงการ MIT-based สนับสนุนในขณะนี้โดย Intel นำมาใช้เป็นภาษา / นามสกุลคอมไพเลอร์ที่ C ใช้ในCilkchessซอฟต์แวร์คอมพิวเตอร์หมากรุกและทดลองใน FFTW
SMP superscalar : พัฒนาที่ Barcelona Supercomputing Center ซึ่งคล้ายกับ Cilk ในหลาย ๆ ด้านตาม
#pragma
ส่วนขยายStarPU : "codelets" ซึ่งคล้ายกับห้องสมุดซึ่งสามารถรวบรวมและกำหนดเวลาสำหรับสถาปัตยกรรมที่แตกต่างกันหลายแห่งรวมถึง GPU
งาน OpenMP: ตั้งแต่เวอร์ชัน 3.0, OpenMP แนะนำ "งาน" ที่สามารถกำหนดเวลาแบบอะซิงโครนัส (ดูส่วนที่ 2.7 ของข้อกำหนด)
การสร้างบล็อก Threading ของ Intel : ใช้คลาส C ++ เพื่อสร้างและเปิดใช้งานแบบอะซิงโครนัสดูหัวข้อที่ 11 ของบทช่วยสอน
OpenCL : รองรับการทำงานแบบขนานบนฐานหลายคอร์
ในขณะที่มีวรรณกรรมจำนวนมากที่อธิบายถึงการทำงานภายในของส่วนขยายของไลบรารี / ภาษาเหล่านี้และการประยุกต์ใช้กับปัญหาที่เฉพาะเจาะจง แต่ฉันได้เห็นเพียงไม่กี่ตัวอย่างของการใช้งานจริงในการใช้งานในการคำนวณทางวิทยาศาสตร์
ดังนั้นนี่คือคำถาม:ไม่มีใครรู้รหัสการคำนวณทางวิทยาศาสตร์โดยใช้ส่วนขยายไลบรารี / ภาษาใด ๆ เหล่านี้หรือคล้ายกันสำหรับการขนานหน่วยความจำที่ใช้ร่วมกัน?