ไลบรารีแบบขนานหน่วยความจำที่แบ่งใช้ตามภารกิจใน Scientific Computing


10

ในช่วงไม่กี่ปีที่ผ่านมาห้องสมุด / โครงการซอฟต์แวร์หลายแห่งปรากฏว่ามีรูปแบบหรือรูปแบบอื่น ๆ ของการใช้งานร่วมกันของหน่วยความจำที่ใช้ข้อมูลร่วมกันแบบขนาน

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

ตัวอย่างของห้องสมุดดังกล่าวคือ:

  • 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 : รองรับการทำงานแบบขนานบนฐานหลายคอร์

ในขณะที่มีวรรณกรรมจำนวนมากที่อธิบายถึงการทำงานภายในของส่วนขยายของไลบรารี / ภาษาเหล่านี้และการประยุกต์ใช้กับปัญหาที่เฉพาะเจาะจง แต่ฉันได้เห็นเพียงไม่กี่ตัวอย่างของการใช้งานจริงในการใช้งานในการคำนวณทางวิทยาศาสตร์

ดังนั้นนี่คือคำถาม:ไม่มีใครรู้รหัสการคำนวณทางวิทยาศาสตร์โดยใช้ส่วนขยายไลบรารี / ภาษาใด ๆ เหล่านี้หรือคล้ายกันสำหรับการขนานหน่วยความจำที่ใช้ร่วมกัน?


คุณกำลังมองหาการทำงานแบบคู่ขนานตามงานหรือไม่? มีเหตุผลที่คุณข้าม OpenCL และ Intel TBB หรือไม่ ฉันต้องยอมรับว่าฉันไม่สามารถบอกได้อย่างชัดเจนว่าคุณกำลังมองหาอะไรที่นี่
Aron Ahmadia

1
@AronAhmadia: ไม่รู้ส่วนใหญ่ ... :) ฉันได้เพิ่ม TBB และ OpenCL ในรายการ แต่คำถามยังคงเหมือนเดิม: มีสิ่งเหล่านี้คือส่วนประกอบที่อิงกับงานของพวกเขาถูกนำมาใช้ในซอฟต์แวร์ชิ้นสำคัญสำหรับวิทยาศาสตร์ คอมพิวเตอร์?
เปโดร

เรารู้สึกอย่างไรเกี่ยวกับการเปลี่ยนคำถามนี้และคำตอบให้เป็นชุมชน -wiki เทียบกับพยายามขอบเขตมันต่อไป?
Aron Ahmadia

@AronAhmadia: ฉันกังวลเล็กน้อยว่าถ้าฉันออกจากรูปแบบคำถามสิ่งนี้จะลดความสำคัญลงอย่างรวดเร็วในการพูดคุยกันนานเกี่ยวกับข้อดี / ข้อเสียของการเขียนโปรแกรมตามหน่วยความจำและ / หรือการแชร์หน่วยความจำโดยทั่วไป อย่างไรก็ตามฉันยินดีที่จะเปลี่ยนมันหลังจากที่ได้รับคำตอบอีกสองสามข้อ
เปโดร

ชื่อไม่เหมาะสม คำถามนี้เกี่ยวกับการทำงานแบบขนานไม่ใช่หน่วยความจำที่แชร์
Jeff

คำตอบ:


8

deal.IIใช้ Threading Building Blocks ทั่วทั้งห้องสมุดและอีกมากมายเรามีความสุขกับมันมากพอสมควร เราได้ดูทางเลือกเล็กน้อยโดยเฉพาะ OpenMP เนื่องจากทุกคนดูเหมือนจะใช้รหัสดังกล่าวง่ายกว่า แต่ก็พบว่าพวกเขาไม่มีตัวเลือก โดยเฉพาะอย่างยิ่ง OpenMP มีข้อเสียอย่างมากที่รูปแบบงานของมันไม่อนุญาตให้คุณได้รับการจัดการสำหรับงานที่คุณเริ่มต้นและดังนั้นจึงเป็นการยากที่จะเข้าถึงสถานะของงาน (เช่นรอให้เสร็จ) หรือคืนค่า ฟังก์ชั่นที่คุณทำงานแยกงาน OpenMP เป็นหลักที่ดีสำหรับ parallelizing สุดลูป แต่คุณได้รับประสิทธิภาพแบบคู่ขนานโดย parallelizing สุดห่วงซับซ้อนและ OpenMP ไม่ได้เป็นเครื่องมือสำหรับการว่าในขณะที่ TBB มีเหตุผลที่ดีที่


ขอบคุณที่ชี้ให้เห็นว่าฉันไม่ได้ดูดีลครั้งที่สอง! มีการตีพิมพ์หรือชิ้นส่วนของเอกสารใดบ้างในข้อตกลงการใช้ TBB อย่างละเอียดอธิบายโดยละเอียดหรือไม่?
เปโดร

ไม่มีการตีพิมพ์ แต่สิ่งนี้อาจช่วยได้: dealii.org/developer/doxygen/deal.II/group__threads.html
Wolfgang Bangerth

4

ในความคิดของฉันระบบเหล่านี้ค่อนข้างประสบความสำเร็จเนื่องจากเหตุผลดังต่อไปนี้

  • มุมมองไร้เดียงสาที่การคำนวณแบบขนานนั้นเกี่ยวกับการคำนวณแบบขนาน (เช่น flops) มากกว่าการเปิดเผยตำแหน่งของหน่วยความจำและการลบจุดการซิงโครไนซ์ แม้ว่าปัญหาบางอย่างเช่นอัลกอรึทึมเมทริกซ์หนาแน่นยังคงมี FP- จำกัด เท่านั้นที่เกิดขึ้นหลังจากการพิจารณาอย่างรอบคอบของระบบย่อยหน่วยความจำและเมล็ดคำนวณส่วนใหญ่ (โดยเฉพาะในโลก PDE) มีความไวต่อหน่วยความจำมากขึ้น คิวงานมักจะแลกเปลี่ยนตำแหน่งหน่วยความจำเพื่อความสมดุลที่ไร้เดียงสาของ flops และการดำเนินการหน่วยความจำอะตอมเพิ่มเติม (เนื่องจากการซิงโครไนซ์ผ่านคิว)
  • การพึ่งพาการย่อยสลายมากเกินไปสำหรับโหลดบาลานซ์แบบไดนามิกโดยมีค่าใช้จ่ายในการปรับขยายที่แข็งแกร่ง โดยทั่วไปงานจะมีการพึ่งพาข้อมูลที่ทับซ้อนกัน (ค่าผี) เมื่อขนาดภายในลดลงอัตราส่วนผี / การตกแต่งภายในจะเพิ่มขึ้น แม้ว่าสิ่งนี้ไม่ได้หมายถึงการทำงานที่ซ้ำซ้อน แต่ก็หมายถึงการเคลื่อนไหวของหน่วยความจำที่เพิ่มขึ้น การลดความต้องการแบนด์วิดท์หน่วยความจำที่สำคัญสามารถทำได้โดยวิธีการเช่นการดึงข้อมูลล่วงหน้าแบบมีส่วนร่วมซึ่งหลายเธรดแชร์แคช L1 หรือ L2 โดยการดึงซอฟต์แวร์ล่วงหน้าสำหรับเพื่อนบ้านของพวกเขา ตรงข้ามกับการสลายตัวมากเกินไป
  • ประสิทธิภาพที่ไม่สามารถคาดการณ์ได้ส่วนใหญ่เกิดจากปัญหาที่เกี่ยวข้องกับหน่วยความจำด้านบน
  • ขาดองค์ประกอบที่เป็นมิตรกับห้องสมุด เกือบจะสามารถสรุปได้ว่าไม่มีอะนาล็อกMPI_Commซึ่งอนุญาตให้ไลบรารีต่าง ๆ ดำเนินการที่หลากหลายโดยไม่มีการชนกันรวมถึงส่งผ่านบริบทระหว่างไลบรารีและกู้คืนแอตทริบิวต์ที่จำเป็น สิ่งที่เป็นนามธรรมที่จัดทำโดย "communicator" มีความสำคัญสำหรับการจัดองค์ประกอบของไลบรารีโดยไม่คำนึงว่าหน่วยความจำที่ใช้ร่วมกันหรือแบบกระจาย

ฉันอาจจะเข้าใจผิดคำตอบของคุณ แต่จุดแรกตรงข้ามกับสิ่งที่ Buttari, Kurzak, Dongarra และคนอื่น ๆ ได้แสดงด้วย MAGMA ซึ่งเป็นไลบรารีหน่วยความจำที่ใช้งานร่วมกันสำหรับพีชคณิตเชิงเส้นหนาแน่น ... นอกจากนี้ในจุดที่สองของคุณ คุณอ้างถึงข้อมูลที่ทับซ้อนกันเช่นค่าผีและอัตราส่วนพื้นผิวต่อปริมาตร แต่สิ่งเหล่านี้เป็นการพักไว้จากแผนการแยกส่วนโดเมนหน่วยความจำแบบกระจาย ฉันทำงานกับวิธีการดังกล่าวสำหรับรหัสที่เป็นอนุภาคและฉันได้รับประสิทธิภาพที่ดีกว่าการใช้งานแบบขนานที่ใช้ MPI
Pedro

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

1. มีโปรเจ็กต์จำนวนหนึ่งที่ใช้ระบบเหล่านี้ แต่ฉันไม่คิดว่าวิธีการนั้นจะถือว่า "ประสบความสำเร็จ" 2. การพึ่งพายังคงซ้อนกันในหน่วยความจำที่ใช้ร่วมกัน ดูวิธีที่ tcmalloc หรือเคอร์เนล Linux ทำให้เธรดมีความเป็นอิสระมากขึ้นเพื่อหลีกเลี่ยงปัญหาคอขวดเช่นการซิงโครไนซ์ผ่านอะตอมมิก พื้นที่ที่อยู่ที่ใช้ร่วมกันไม่ได้หมายความว่าคุณควรดำเนินการราวกับว่าคุณมีหน่วยความจำแบบเดียวกันหรือคุณควรพิจารณาว่าอะตอมมิกนั้นมีราคาไม่แพง
Jed Brown

3. ฉันไม่รู้ว่า "การเปรียบเทียบที่เป็นธรรม" ที่คุณตั้งใจจะอ้างถึงคืออะไร แต่ PLASMA ได้รับ FPU สูงสุดเพียง 25% (เช่นสไลด์ 5 ของhpcgarage.org/cscads2012/Luszczek-UTK-PowerTools.pdf ) ซึ่งจะเป็น เลวร้ายมากสำหรับการดำเนินการเดียวกันในหน่วยความจำแบบกระจายซึ่งคาดว่าจะมีอย่างน้อย 70% ของจุดสูงสุด พีชคณิตเชิงเส้นหนาแน่นเป็นกรณีที่ถูก จำกัด ด้วย FPU ที่ฉันอ้างถึงโดยเฉพาะว่าเป็นข้อยกเว้นที่เป็นไปได้ แต่แม้จะมีขนาดเมทริกซ์มหาศาล PLASMA ก็ยังห่างไกลจากการถูก จำกัด ด้วย FPU
Jed Brown

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