SYCL dan OpenCL untuk AMD gpu

Oct 03 2020

Saya memiliki gpu AMD 5700XT dan saya mencoba untuk belajar SYCL tetapi saya memiliki banyak keraguan tentang keadaan tumpukan driver gpu AMD saat ini. Menurut yang saya baca, ada beberapa tumpukan driver untuk AMD gpus: mesa, amdgpu dan amdgpu-pro. Jika saya mengerti dengan benar, mesa memiliki implementasi opencl sendiri dan ada implementasi lain untuk driver amdgpu.

Juga, amd memiliki ROCm, yang mana implementasi OpenCL lainnya, HIP, yang seperti CUDA dan beberapa perkakas, bukan?

Setidaknya ada 2 implementasi, ComputeCpp dan hipSYCL, yang mungkin dapat menjalankan SYCL pada AMD gpus. Bukankah seharusnya implementasi clang dapat dijalankan juga di AMD gpus, seperti yang terlihat pada gambar yang dijalankan dengan perangkat OpenCL dan SPIR-V?

Di saya mengerti benar, ada juga oneAPI, yang merupakan implementasi SYCL (DPC ++) dengan beberapa ekstensi (SYCL 2020) dan beberapa perpustakaan di atas implementasi SYCL itu (jenis cuBLAS atau cuSPARSE untuk CUDA). Apakah mungkin untuk menjalankan pustaka satuAPI di atas implementasi SYCL yang lain?

Akhirnya, jika saya menggunakan mesa untuk grafik (OpenGL dan Vulkan), apakah mungkin untuk menjalankan ROCm di atasnya? Bagaimana implementasi mesa ROCm dan OpenCL berinteraksi dengan driver grafis mesa?

Seperti yang Anda lihat, saya memiliki kebingungan besar tentang semua ekosistem. Bisakah seseorang menjelaskannya?

Jawaban

2 illuhad Oct 06 2020 at 00:40

Pemahaman saya adalah bahwa ada driver kernel tunggal, amdgpu. Mesa tinggal di userland dan merupakan implementasi OpenGL. amdgpu-pro menyediakan pustaka userland sumber tertutup alternatif (OpenGL, OpenCL, dll).

semanggi adalah implementasi OpenCL di atas Mesa. Saya tidak yakin apa statusnya (kesan saya adalah bahwa itu tidak dirawat dengan baik selama beberapa waktu dan pengembangan terhenti), tetapi saya ragu itu akan dapat menjalankan program SYCL.

ROCm lebih dari sekedar implementasi OpenCL. Ini adalah platform GPGPU AMD, menyediakan platform AI, pustaka, alat, dan kompiler yang dipercepat. Ini juga berisi implementasi OpenCL. HIP bukanlah implementasi OpenCL, ini adalah implementasi AMD dari model pemrograman CUDA.

Sepengetahuan saya, sayangnya tidak ada implementasi AMD OpenCL baru-baru ini yang dapat menjalankan program SYCL karena AMD tidak mendukung SPIR atau SPIR-V. AMD OpenCL tidak pernah mendukung SPIR-V, jadi DPC ++ / clang tidak akan berfungsi. ComputeCpp juga dapat bekerja dengan SPIR, tetapi dukungan untuk itu telah dihapus beberapa waktu lalu dari implementasi OpenCL AMD.

Sejauh menyangkut dukungan SYCL untuk AMD, hipSYCL biasanya adalah cara yang tepat. Sayangnya, AMD tidak mendukung GPU spesifik Anda pada ROCm (tempat hipSYCL dibangun) karena mereka memfokuskan dukungan ROCm pada chip yang juga digunakan dalam kartu pusat data. Lihat di sini untuk lebih jelasnya:https://github.com/RadeonOpenCompute/ROCm#supported-gpus

oneAPI adalah istilah umum Intel untuk platform komputasi mereka, menyediakan pustaka, alat, dan kompiler (mirip dengan ROCm). DPC ++ / LLVM SYCL / Intel SYCL adalah bagian dari oneAPI. Semua istilah tersebut merujuk pada hal yang sama, yaitu implementasi Intel terhadap standar Khronos SYCL 2020. Hampir semua ekstensi Intel telah digabungkan ke dalam spesifikasi SYCL 2020, jadi jangan pikirkan DPC ++ sebagai bahasa terpisah.

Dimungkinkan untuk menambahkan backend tambahan ke pustaka oneAPI, misalnya Codeplay telah melakukannya untuk NVIDIA. Pada prinsipnya juga mungkin untuk mem-portingnya ke implementasi SYCL lain. Kami sedang mengerjakan beberapa dasar untuk berpotensi bergerak ke arah itu dengan hipSYCL dengan meningkatkan kompatibilitas antara hipSYCL dan DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz

Tidak mungkin menjalankan ROCm di atas mesa. Ini adalah tumpukan yang sepenuhnya independen untuk komputasi GPU. Sejauh yang saya tahu tidak ada interaksi antara ROCm dan mesa.