มุมมองทางประวัติศาสตร์
มันเป็นไปไม่ได้จริงๆที่จะพูดในสิ่งที่กระบวนทัศน์ใหม่จะเป็นอย่างไรในอนาคตตัวอย่างเช่นมุมมองทางประวัติศาสตร์ที่ดีผมขอแนะนำให้อ่านเคนเคนเนดีขึ้นและตกของ HPF Kennedy ให้ข้อมูลเกี่ยวกับรูปแบบที่เกิดขึ้นใหม่สองรูปแบบ MPI เทียบกับคอมไพเลอร์อัจฉริยะและรายละเอียดว่า MPI มีจำนวนผู้ใช้ในช่วงแรกที่เหมาะสมและมีความยืดหยุ่นในการครอง HPF แก้ไขปัญหาได้ในที่สุด แต่ก็สายเกินไป
ในหลายวิธีกระบวนทัศน์หลายอย่างเช่น PGAS และ OpenMP กำลังติดตามแนวโน้ม HPF เดียวกัน รหัสแรก ๆ นั้นมีความยืดหยุ่นไม่เพียงพอที่จะใช้งานได้ดีและทิ้งประสิทธิภาพไว้มากมายบนโต๊ะ แต่คำมั่นสัญญาที่จะไม่ต้องเขียนทุก ๆ ส่วนของอัลกอริทึมแบบขนานนั้นเป็นเป้าหมายที่น่าสนใจ ดังนั้นการแสวงหารุ่นใหม่จึงถูกติดตามอยู่เสมอ
ล้างแนวโน้มในฮาร์ดแวร์
ตอนนี้ความสำเร็จของ MPI มักถูกอ้างถึงอย่างใกล้ชิดว่ามันเป็นแบบจำลองฮาร์ดแวร์ที่ทำงานอยู่ ประมาณแต่ละโหนดมีกระบวนการจำนวนน้อยและส่งข้อความไปยังจุดต่อจุดแบบโลคัลหรือผ่านการดำเนินการแบบรวมที่ประสานงานได้ง่ายในพื้นที่คลัสเตอร์ ด้วยเหตุนี้ผมไม่ทุกคนที่ไว้วางใจที่จะช่วยให้กระบวนทัศน์ที่ไม่ปฏิบัติตามอย่างใกล้ชิดกับแนวโน้มฮาร์ดแวร์ใหม่ที่จริงผมเชื่อว่าความเห็นนี้มาจากการทำงานจากVivak Sarakar
เพื่อให้สอดคล้องกับที่นี่มีแนวโน้มสามประการที่ทำให้ความคืบหน้าชัดเจนในสถาปัตยกรรมใหม่ และให้ฉันชัดเจนตอนนี้มีสิบสองสถาปัตยกรรมที่แตกต่างกันออกวางตลาดใน HPC สิ่งนี้เพิ่มขึ้นจากน้อยกว่า 5 ปีที่ผ่านมาซึ่งมีเฉพาะ x86 ดังนั้นวันที่จะมาถึงจะเห็นโอกาสมากมายสำหรับการใช้ฮาร์ดแวร์ในรูปแบบที่แตกต่างและน่าสนใจ
- ชิปที่มีวัตถุประสงค์พิเศษ: คิดว่าหน่วยเวกเตอร์ขนาดใหญ่เช่นตัวเร่งความเร็ว (เรียกดูโดย Bill Dally ของ Nvidia)
- ชิปพลังงานต่ำ: กลุ่ม ARM ที่ใช้ (เพื่อรองรับงบประมาณพลังงาน)
- Tiling of Chips: คิดถึงการเรียงของชิปที่มีคุณสมบัติแตกต่างกัน (งานของAvant Argwal )
รุ่นปัจจุบัน
รุ่นปัจจุบันมีความลึก 3 ระดับ ในขณะที่มีรหัสมากมายที่ใช้สองระดับเหล่านี้ได้ดี แต่มีไม่มากที่เกิดขึ้นโดยใช้ทั้งสาม ฉันเชื่อว่าก่อนอื่นคุณต้องลงทุนเพื่อพิจารณาว่ารหัสของคุณสามารถทำงานได้ทั้งสามระดับหรือไม่ นี่อาจเป็นเส้นทางที่ปลอดภัยที่สุดสำหรับการวนซ้ำได้ดีกับแนวโน้มปัจจุบัน
ให้ฉันทำซ้ำโมเดลและวิธีที่พวกเขาจะต้องเปลี่ยนตามมุมมองฮาร์ดแวร์ใหม่ที่คาดการณ์ไว้
กระจาย
ผู้เล่นในระดับกระจายส่วนใหญ่ตกอยู่ใน MPI และภาษา PGAS MPI เป็นผู้ชนะที่ชัดเจนในขณะนี้ แต่ภาษาของ PGAS เช่น UPC และ Chapel กำลังก้าวเข้าสู่อวกาศ สิ่งบ่งชี้ที่ดีอย่างหนึ่งคือการท้าทายเกณฑ์มาตรฐาน HPC ภาษา PGAS ให้การใช้งานที่ยอดเยี่ยมสำหรับการวัดประสิทธิภาพ
จุดที่น่าสนใจที่สุดคือในขณะที่รุ่นนี้ใช้งานได้เฉพาะที่ระดับโหนด แต่จะเป็นโมเดลที่สำคัญภายในโหนดสำหรับสถาปัตยกรรมแบบเรียงต่อกัน สิ่งบ่งชี้ข้อหนึ่งคือชิป Intel SCC ซึ่งทำหน้าที่เหมือนระบบกระจาย ทีม SCC สร้างการใช้งาน MPI ของตัวเองและหลายทีมประสบความสำเร็จในการย้ายไลบรารีชุมชนไปยังสถาปัตยกรรมนี้
แต่ความจริงแล้ว PGAS มีเรื่องราวที่ดีในการก้าวเข้ามาในพื้นที่นี้ คุณต้องการโปรแกรม MPI internode หรือไม่และต้องทำ intranode แบบเดียวกันหรือไม่? ข้อตกลงสำคัญอย่างหนึ่งของสถาปัตยกรรมแบบเรียงต่อกันคือพวกเขาจะมีความเร็วสัญญาณนาฬิกาที่แตกต่างกันในชิปและความแตกต่างที่สำคัญในแบนด์วิดท์ไปยังหน่วยความจำดังนั้นรหัสนักแสดงต้องคำนึงถึงเรื่องนี้
หน่วยความจำที่ใช้ร่วมกันบนโหนด
ที่นี่เราเห็น MPI มักจะ "ดีพอ" แต่ PThreads (และไลบรารีที่มาจาก PThreads เช่น Intel Parallel Building Blocks) และ OpenMP ยังคงใช้บ่อย มุมมองทั่วไปคือจะมีเวลาเมื่อมีเธรดหน่วยความจำแบบแบ่งใช้เพียงพอที่โมเดลซ็อกเก็ตของ MPI จะแยกย่อยสำหรับ RPC หรือคุณต้องการกระบวนการน้ำหนักเบาที่ทำงานบนแกน คุณสามารถเห็นตัวบ่งชี้ของระบบ IBM Bluegene ที่มีปัญหากับ MPI หน่วยความจำที่ใช้ร่วมกัน
ในฐานะที่เป็นความคิดเห็นของ Matt การเพิ่มประสิทธิภาพที่ใหญ่ที่สุดสำหรับการประมวลผลแบบเร่งรัดรหัสคือ vectorization ของรหัสซีเรียล ในขณะที่หลายคนคิดว่าสิ่งนี้เป็นจริงในส่วนช่วยดำเนินการ แต่ก็สำคัญสำหรับเครื่องที่อยู่ในโหนดเช่นกัน ฉันเชื่อว่า Westmere มี FPU 4 วงกว้างดังนั้นหนึ่งสามารถรับหนึ่งในสี่ของ flops โดยไม่มี vectorization
ในขณะที่ฉันไม่เห็น OpenMP ปัจจุบันก้าวเข้ามาในพื้นที่นี้ได้ดีมีสถานที่สำหรับชิปที่ใช้พลังงานต่ำหรือไทล์ชิปเพื่อใช้เธรดแบบเบาเพิ่มเติม OpenMP มีความยากลำบากในการอธิบายวิธีการทำงานของการไหลของข้อมูลและเมื่อมีการใช้เธรดมากขึ้นฉันเห็นว่าแนวโน้มนี้ยิ่งเกินความเป็นจริงเพียงดูตัวอย่างของสิ่งที่เราต้องทำเพื่อให้ได้การดึงข้อมูลล่วงหน้าที่เหมาะสมด้วย OpenMP
ทั้ง OpenMP และ PThreads ในระดับที่เพียงพอสามารถใช้ประโยชน์จาก vectorization ที่จำเป็นเพื่อให้ได้เปอร์เซ็นต์สูงสุด แต่การทำเช่นนี้จำเป็นต้องทำลายอัลกอริทึมของคุณในแบบที่ vectorization เป็นธรรมชาติ
ร่วมประมวลผล
ในที่สุดการเกิดขึ้นของโปรเซสเซอร์ร่วม (GPU, MIC, ตัวเร่งเซลล์) ได้ถูกจับ เป็นที่ชัดเจนว่าไม่มีเส้นทางไปสู่ exascale ที่จะสมบูรณ์หากไม่มีพวกเขา ที่ SC11 ผู้เข้าแข่งขันที่ได้รับรางวัล Bell ทุกคนใช้พวกเขาอย่างมีประสิทธิภาพมากเพื่อไปยัง petaflops ที่ต่ำ ในขณะที่ CUDA และ OpenCL ได้ครองตลาดปัจจุบันฉันหวังว่าจะมีคอมไพเลอร์ OpenACC และ PGAS เข้าสู่พื้นที่
ข้อเสนอหนึ่งคือการจับคู่ชิปที่ใช้พลังงานต่ำกับโปรเซสเซอร์ร่วมจำนวนมาก สิ่งนี้จะช่วยกำจัดเลเยอร์กลางของสแต็กปัจจุบันและใช้รหัสที่จัดการปัญหาการตัดสินใจในชิปหลักและสลับการทำงานกับโปรเซสเซอร์ร่วม ซึ่งหมายความว่าสำหรับรหัสในการทำงานอย่างมีประสิทธิภาพค่อนข้างคนจะต้องคิดใหม่อัลกอริทึมในแง่ของเมล็ด (หรือ codelets) นั่นคือคำสั่งแบบขนานระดับสาขาย่อย เท่าที่ฉันรู้ทางออกของการวิวัฒนาการนี้ค่อนข้างเปิดกว้าง
สิ่งนี้มีผลต่อผู้พัฒนาแอพอย่างไร
ตอนนี้เพื่อไปที่คำถามของคุณ หากคุณต้องการปกป้องตนเองจากความซับซ้อนที่กำลังจะมาถึงของเครื่อง exascale คุณควรทำบางสิ่ง:
- พัฒนาอัลกอริทึมของคุณให้เหมาะสมกับลำดับชั้นแบบขนานอย่างน้อยสามระดับ
- ออกแบบอัลกอริธึมของคุณในแง่ของเมล็ดที่สามารถเคลื่อนย้ายระหว่างการสืบทอด
- ผ่อนคลายความต้องการของคุณสำหรับกระบวนการตามลำดับใด ๆ เอฟเฟกต์เหล่านี้ทั้งหมดจะเกิดขึ้นแบบอะซิงโครนัสเนื่องจากการดำเนินการแบบซิงโครนัสนั้นเป็นไปไม่ได้
หากคุณต้องการเป็นนักแสดงวันนี้ MPI + CUDA / OpenCL ก็ดีพอ แต่ UPC ก็ไปถึงที่นั่นดังนั้นจึงไม่ควรใช้เวลาสองสามวันในการเรียนรู้ OpenMP ช่วยให้คุณเริ่มต้น แต่นำไปสู่ปัญหาเมื่อรหัสต้องถูก refactored PThreads ต้องการการเขียนโค้ดของคุณใหม่ตามสไตล์อย่างสมบูรณ์ ซึ่งทำให้ MPI + CUDA / OpenCL เป็นรุ่นที่ดีที่สุดในปัจจุบัน
สิ่งที่ไม่ได้กล่าวถึงที่นี่
ในขณะที่การพูดคุยเกี่ยวกับ exascale ทั้งหมดนี้เป็นสิ่งที่ดีสิ่งที่ไม่ได้กล่าวถึงในที่นี้คือการนำข้อมูลเข้าและออกจากเครื่อง ในขณะที่มีความก้าวหน้ามากมายในระบบหน่วยความจำเราไม่เห็นพวกเขาในกลุ่มสินค้า (ราคาแพงเกินไป) ขณะนี้การประมวลผลข้อมูลแบบเข้มข้นกำลังกลายเป็นจุดสนใจที่ยิ่งใหญ่ของการประชุมซูเปอร์คอมพิวเตอร์ทั้งหมดมีความต้องการที่จะมีการเคลื่อนไหวที่ใหญ่ขึ้นในพื้นที่แบนด์วิธหน่วยความจำสูง
สิ่งนี้นำไปสู่แนวโน้มอื่น ๆ ที่อาจเกิดขึ้น (หากหน่วยงานระดมทุนที่เหมาะสมมีส่วนร่วม) เครื่องจักรจะมีความเชี่ยวชาญมากขึ้นสำหรับประเภทของการคำนวณที่ต้องการ เราเห็นแล้วว่าเครื่องจักร "ใช้ข้อมูลจำนวนมาก" ซึ่งได้รับทุนจาก NSF แต่เครื่องเหล่านี้อยู่ในเส้นทางที่แตกต่างจาก 2019 Exascale Grand Challenge
สิ่งนี้ยาวเกินกว่าที่คาดหมายไว้สำหรับการอ้างอิงที่คุณต้องการในความคิดเห็น