โครงการ LLVM ประกาศการเปิดตัว HPVM 2.0 (Heterogeneous Parallel Virtual Machine) ซึ่งเป็นคอมไพเลอร์ที่มีจุดมุ่งหมายเพื่อทำให้การเขียนโปรแกรมง่ายขึ้นสำหรับระบบที่ต่างกัน และจัดหาเครื่องมือสร้างโค้ดสำหรับ CPU, GPU, FPGA และเครื่องเร่งฮาร์ดแวร์เฉพาะโดเมน รหัสโครงการเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0
การเขียนโปรแกรมสำหรับระบบคู่ขนานที่ต่างกันมีความซับซ้อนเนื่องจากมีส่วนประกอบในระบบเดียวกันที่ใช้โมเดลที่แตกต่างกันเพื่อให้เกิดการขนาน (แกน CPU, คำสั่งเวกเตอร์, GPU ฯลฯ) ชุดคำสั่งที่แตกต่างกัน และลำดับชั้นหน่วยความจำที่แตกต่างกัน แต่ละระบบใช้ส่วนประกอบเหล่านี้รวมกัน แนวคิดหลักของโครงการ HPVM คือการใช้การแสดงแบบรวมของโปรแกรมที่ดำเนินการแบบขนานเมื่อทำการคอมไพล์ ซึ่งสามารถใช้กับฮาร์ดแวร์ประเภทต่าง ๆ ที่รองรับการประมวลผลแบบขนาน รวมถึง GPU, คำแนะนำแบบเวกเตอร์, โปรเซสเซอร์แบบมัลติคอร์, FPGA และ ชิปเร่งความเร็วพิเศษต่างๆ
ต่างจากระบบอื่นๆ HPVM พยายามรวมความสามารถสามประการในการจัดระเบียบการประมวลผลแบบต่างกัน - ภาษาการเขียนโปรแกรมและการเป็นตัวแทนระดับกลางที่ไม่ขึ้นกับฮาร์ดแวร์ (IR) สถาปัตยกรรมชุดคำสั่งเสมือน (V-ISA) และกำหนดเวลารันไทม์:
- การแสดงระดับกลางของ HPVM จะขยายการแสดงคำแนะนำระดับกลางของ LLVM โดยใช้กราฟการไหลของข้อมูลแบบลำดับชั้นเพื่อบันทึกความขนานที่ระดับงาน ข้อมูล และไปป์ไลน์ การแสดงระดับกลางของ HPVM ยังรวมถึงคำสั่งเวกเตอร์และหน่วยความจำแบบแบ่งใช้ วัตถุประสงค์หลักของการใช้การแสดงระดับกลางคือการสร้างโค้ดที่มีประสิทธิภาพและการเพิ่มประสิทธิภาพสำหรับระบบที่ต่างกัน
- สถาปัตยกรรมชุดคำสั่งเสมือน (V-ISA) สรุปคุณลักษณะฮาร์ดแวร์ระดับต่ำและรวมรูปแบบต่างๆ ของความขนานและสถาปัตยกรรมหน่วยความจำเข้าด้วยกัน โดยใช้เพียงแบบจำลองความขนานพื้นฐานเท่านั้น นั่นคือกราฟการไหลของข้อมูล V-ISA ช่วยให้คุณสามารถพกพาระหว่างอุปกรณ์ประเภทต่างๆ สำหรับการประมวลผลแบบขนาน และทำให้ไม่สูญเสียประสิทธิภาพเมื่อใช้องค์ประกอบที่แตกต่างกันของระบบที่ต่างกัน ISA เสมือนยังสามารถใช้เพื่อส่งมอบโค้ดโปรแกรมปฏิบัติการสากลที่สามารถรันโดยใช้ CPU, GPU, FPGA และตัวเร่งความเร็วต่างๆ
- นโยบายการกำหนดตารางเวลาที่ยืดหยุ่นสำหรับกระบวนการคำนวณจะถูกนำไปใช้ในขณะรันไทม์และนำไปใช้ทั้งโดยอิงตามข้อมูลเกี่ยวกับโปรแกรม (โครงสร้างกราฟ) และผ่านการรวบรวมโหนดโปรแกรมแต่ละโหนดเพื่อดำเนินการบนอุปกรณ์ประมวลผลเป้าหมายใดๆ ที่มีอยู่ในระบบ
ตัวสร้างโค้ดที่พัฒนาโดยโปรเจ็กต์มีความสามารถในการแปลโหนดแอปพลิเคชันที่กำหนดโดยใช้ ISA เสมือนสำหรับการดำเนินการโดยใช้ NVIDIA GPU (cuDNN และ OpenCL), คำแนะนำเวกเตอร์ Intel AVX, FPGA และซีพียู x86 แบบมัลติคอร์ มีข้อสังเกตว่าประสิทธิภาพของนักแปล HPVM นั้นเทียบได้กับโค้ด OpenCL ที่เขียนด้วยมือสำหรับ GPU และอุปกรณ์ประมวลผลแบบเวกเตอร์
นวัตกรรมที่สำคัญของ HPVM 2.0:
- มีการเสนอส่วนหน้าของภาษา Hetero-C++ ซึ่งช่วยให้การขนานของโค้ดแอปพลิเคชันใน C/C++ สำหรับการคอมไพล์ใน HPVM ง่ายขึ้น Hetero-C++ กำหนดส่วนขยายสำหรับงานความเท่าเทียมระดับข้อมูลและงานตามลำดับชั้นที่แมปกับกราฟเธรด HPVM
- มีการเพิ่มแบ็กเอนด์ FPGA เพื่อให้รองรับการเรียกใช้โค้ดบน Intel FPGA เพื่อจัดระเบียบการดำเนินการ จะใช้ Intel FPGA SDK สำหรับ OpenCL
- มีการเพิ่มเฟรมเวิร์ก DSE (Design Space Exploration) ซึ่งรวมถึงการปรับแต่งคอมไพเลอร์ให้เหมาะสมและกลไกในการระบุปัญหาคอขวดสำหรับการปรับแต่งแอปพลิเคชันโดยอัตโนมัติสำหรับแพลตฟอร์มฮาร์ดแวร์ที่กำหนด เฟรมเวิร์กประกอบด้วยโมเดลประสิทธิภาพสำเร็จรูปสำหรับ FPGA จาก Intel และทำให้สามารถเชื่อมต่อโปรเซสเซอร์ของคุณเองเพื่อเพิ่มประสิทธิภาพให้กับอุปกรณ์ใดๆ ที่รองรับโดย HPVM การเพิ่มประสิทธิภาพสามารถใช้ได้ทั้งในระดับกราฟโฟลว์ข้อมูล HPVM และ LLVM
- ส่วนประกอบ LLVM ได้รับการอัพเดตเป็นเวอร์ชัน 13.0
- โค้ดได้รับการจัดระเบียบใหม่เพื่อให้ง่ายต่อการใช้งานฐานโค้ด ไลบรารี และยูทิลิตี้ต่างๆ
- โครงสร้างพื้นฐานการทดสอบได้รับการปรับปรุง มีการเพิ่มการทดสอบใหม่สำหรับส่วนประกอบ HPVM ต่างๆ
ที่มา: opennet.ru