SYCL และ OpenCL สำหรับ AMD gpu

Oct 03 2020

ฉันมี AMD 5700XT gpu และฉันกำลังพยายามเรียนรู้ SYCL แต่ฉันมีข้อสงสัยมากมายเกี่ยวกับสถานะปัจจุบันของสแต็กไดรเวอร์ AMD gpu ตามสิ่งที่ฉันอ่านมีไดรเวอร์หลายตัวสำหรับ AMD gpus: mesa, amdgpu และ amdgpu-pro ถ้าฉันเข้าใจถูกต้อง mesa มีการใช้งาน opencl เป็นของตัวเองและมีการใช้งานอื่นสำหรับไดรเวอร์ amdgpu

นอกจากนี้ amd ยังมี ROCm ซึ่งเป็นการใช้งาน OpenCL อีกตัวหนึ่ง HIP ซึ่งบางอย่างเช่น CUDA และเครื่องมือบางอย่างใช่ไหม

มีการใช้งานอย่างน้อย 2 รายการคือ ComputeCpp และ hipSYCL ซึ่งอาจเรียกใช้ SYCL บน AMD gpus การติดตั้ง clang ไม่ควรสามารถรันบน AMD gpus ได้หรือไม่ตามภาพที่รันด้วยอุปกรณ์ OpenCL และ SPIR-V

ในฉันเข้าใจถูกต้องนอกจากนี้ยังมี oneAPI ซึ่งเป็นการใช้งาน SYCL (DPC ++) ที่มีส่วนขยาย (SYCL 2020) และไลบรารีบางส่วนที่อยู่เหนือการใช้งาน SYCL นั้น (ประเภทของ cuBLAS หรือ cuSPARSE สำหรับ CUDA) เป็นไปได้ไหมที่จะเรียกใช้ไลบรารี oneAPI กับการใช้งาน SYCL อื่น

ตามหลักการแล้วถ้าฉันใช้ mesa สำหรับกราฟิก (OpenGL และ Vulkan) จะสามารถเรียกใช้ ROCm ได้หรือไม่? การใช้งาน ROCm และ OpenCL mesa โต้ตอบกับไดรเวอร์กราฟิก mesa อย่างไร

อย่างที่คุณเห็นฉันมีความสับสนอย่างมากเกี่ยวกับระบบนิเวศทั้งหมด ใครช่วยให้แสงสว่างได้บ้าง?

คำตอบ

2 illuhad Oct 06 2020 at 00:40

ความเข้าใจของฉันคือมีไดรเวอร์เคอร์เนลตัวเดียวคือ amdgpu Mesa อาศัยอยู่ใน userland และเป็นการใช้งาน OpenGL amdgpu-pro มีไลบรารียูสเซอร์แลนด์แบบปิดทางเลือก (OpenGL, OpenCL และอื่น ๆ )

clover คือการใช้งาน OpenCL ที่ด้านบนของ Mesa ฉันไม่แน่ใจว่ามันอยู่ในสถานะใด (ความประทับใจของฉันคือมันไม่ได้รับการดูแลอย่างดีในช่วงเวลาหนึ่งและการพัฒนาหยุดชะงัก) แต่ฉันสงสัยว่ามันจะสามารถเรียกใช้โปรแกรม SYCL ได้

ROCm เป็นมากกว่าการใช้งาน OpenCL เป็นแพลตฟอร์ม GPGPU ของ AMD ซึ่งให้บริการแพลตฟอร์ม AI ไลบรารีแบบเร่งเครื่องมือและคอมไพเลอร์ นอกจากนี้ยังมีการใช้งาน OpenCL HIP ไม่ใช่การใช้งาน OpenCL แต่เป็นการใช้รูปแบบการเขียนโปรแกรม CUDA ของ AMD อย่างมีประสิทธิภาพ

จากความรู้ของฉันน่าเสียดายที่การใช้งาน AMD OpenCL ล่าสุดไม่สามารถเรียกใช้โปรแกรม SYCL ได้เนื่องจาก AMD ไม่สนับสนุน SPIR หรือ SPIR-V AMD OpenCL ไม่เคยรองรับ SPIR-V ดังนั้น DPC ++ / clang จะไม่ทำงาน ComputeCpp ยังสามารถทำงานร่วมกับ SPIR ได้ แต่การสนับสนุนที่ถูกลบออกไปเมื่อไม่นานมานี้จากการใช้งาน OpenCL ของ AMD

เท่าที่เกี่ยวข้องกับการสนับสนุน SYCL สำหรับ AMD hipSYCL มักจะเป็นหนทางไป น่าเสียดายที่ AMD ไม่รองรับ GPU เฉพาะของคุณบน ROCm (ซึ่ง hipSYCL สร้างขึ้น) เนื่องจากพวกเขาเน้นการสนับสนุน ROCm บนชิปที่ใช้ในการ์ดศูนย์ข้อมูลด้วย ดูรายละเอียดเพิ่มเติมได้ที่นี่:https://github.com/RadeonOpenCompute/ROCm#supported-gpus

oneAPI เป็นคำที่ครอบคลุมของ Intel สำหรับแพลตฟอร์มการประมวลผลของพวกเขาโดยมีไลบรารีเครื่องมือและคอมไพเลอร์ (เช่นเดียวกับ ROCm) DPC ++ / LLVM SYCL / Intel SYCL เป็นส่วนหนึ่งของ oneAPI คำศัพท์เหล่านั้นอ้างถึงสิ่งเดียวกันกล่าวคือการใช้มาตรฐาน Khronos SYCL 2020 ของ Intel ส่วนขยายของ Intel เกือบทั้งหมดถูกรวมเข้ากับข้อมูลจำเพาะ SYCL 2020 ดังนั้นอย่าคิดว่า DPC ++ เป็นภาษาแยกต่างหาก

เป็นไปได้ที่จะเพิ่มแบ็กเอนด์เพิ่มเติมให้กับไลบรารี oneAPI ตัวอย่างเช่น Codeplay ได้ทำสำหรับ NVIDIA โดยหลักการแล้วยังเป็นไปได้ที่จะพอร์ตไปยังการใช้งาน SYCL อื่น เรากำลังทำงานบนพื้นฐานบางอย่างเพื่อที่จะก้าวไปในทิศทางนั้นด้วย hipSYCL โดยการปรับปรุงความเข้ากันได้ระหว่าง hipSYCL และ DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz

ไม่สามารถเรียกใช้ ROCm บน mesa ได้ เป็นสแต็กที่เป็นอิสระอย่างเต็มที่สำหรับการประมวลผล GPU เท่าที่ฉันรู้ไม่มีปฏิสัมพันธ์ระหว่าง ROCm และ mesa