SYCL và OpenCL cho AMD gpu
Tôi có một gpu AMD 5700XT và tôi đang cố gắng tìm hiểu SYCL nhưng tôi có rất nhiều nghi ngờ về tình trạng hiện tại của các ngăn xếp trình điều khiển AMD gpu. Theo những gì tôi đọc, có một số ngăn xếp trình điều khiển cho AMD gpus: mesa, amdgpu và amdgpu-pro. Nếu tôi hiểu đúng, mesa có triển khai opencl của riêng nó và có một triển khai khác cho các trình điều khiển amdgpu.
Ngoài ra, amd có ROCm, một triển khai OpenCL khác của nó, HIP, cái gì đó giống như CUDA và một số công cụ, phải không?
Có ít nhất 2 triển khai, ComputeCpp và hipSYCL, có thể chạy SYCL trên AMD gpus. Liệu triển khai clang có thể chạy trên AMD gpus hay không, như theo hình ảnh nó chạy với các thiết bị OpenCL và SPIR-V?
Theo tôi hiểu một cách chính xác, còn có oneAPI, là một triển khai của SYCL (DPC ++) với một số phần mở rộng (SYCL 2020) và một số thư viện ở trên cùng của việc triển khai SYCL đó (loại cuBLAS hoặc cuSPARSE đối với CUDA). Liệu có thể chạy các thư viện oneAPI trên một triển khai SYCL khác không?
Theo cá nhân, nếu tôi sử dụng mesa cho đồ họa (OpenGL và Vulkan), liệu có thể chạy ROCm trên đó không? Việc triển khai mesa ROCm và OpenCL tương tác với trình điều khiển đồ họa mesa như thế nào?
Như bạn có thể thấy, tôi có một sự nhầm lẫn lớn về tất cả các hệ sinh thái. Ai đó có thể cung cấp một số ánh sáng về nó?
Trả lời
Sự hiểu biết của tôi là có một trình điều khiển hạt nhân duy nhất, amdgpu. Mesa sống trong vùng người dùng và là một triển khai OpenGL. amdgpu-pro cung cấp các thư viện userland nguồn đóng thay thế (OpenGL, OpenCL, v.v.).
cỏ ba lá là một triển khai OpenCL trên Mesa. Tôi không chắc nó đang ở trạng thái nào (ấn tượng của tôi là nó không được bảo trì tốt trong một thời gian và sự phát triển đã bị đình trệ), nhưng tôi nghi ngờ nó sẽ có thể chạy các chương trình SYCL.
ROCm không chỉ là một triển khai OpenCL. Đó là nền tảng GPGPU của AMD, cung cấp nền tảng AI, thư viện, công cụ và trình biên dịch được tăng tốc. Nó cũng chứa một triển khai OpenCL. HIP không phải là một triển khai OpenCL, nó được AMD triển khai hiệu quả mô hình lập trình CUDA.
Theo hiểu biết của tôi, rất tiếc là không có triển khai AMD OpenCL nào gần đây có thể chạy các chương trình SYCL vì AMD không hỗ trợ SPIR cũng như SPIR-V. AMD OpenCL chưa bao giờ hỗ trợ SPIR-V, vì vậy DPC ++ / clang sẽ không hoạt động. ComputeCpp cũng có thể hoạt động với SPIR, nhưng hỗ trợ cho điều đó đã bị loại bỏ một thời gian trước khi triển khai OpenCL của AMD.
Liên quan đến việc hỗ trợ SYCL cho AMD, hipSYCL thường là cách để đi. Thật không may, AMD không hỗ trợ GPU cụ thể của bạn trên ROCm (mà hipSYCL xây dựng) vì họ tập trung hỗ trợ ROCm trên các chip cũng được sử dụng trong thẻ trung tâm dữ liệu. Xem tại đây để biết thêm chi tiết:https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI là thuật ngữ bao trùm của Intel cho nền tảng máy tính của họ, cung cấp thư viện, công cụ và trình biên dịch (tương tự như ROCm). DPC ++ / LLVM SYCL / Intel SYCL là một phần của oneAPI. Tất cả các thuật ngữ đó đều đề cập đến cùng một điều, đó là việc Intel triển khai tiêu chuẩn Khronos SYCL 2020. Khá nhiều phần mở rộng của Intel đã được hợp nhất vào đặc tả SYCL 2020, vì vậy đừng nghĩ về DPC ++ như một ngôn ngữ riêng biệt.
Có thể thêm các phụ trợ bổ sung vào các thư viện oneAPI, ví dụ Codeplay đã làm như vậy cho NVIDIA. Về nguyên tắc, cũng có thể chuyển chúng sang một triển khai SYCL khác. Chúng tôi đang nghiên cứu một số cơ sở để có khả năng di chuyển theo hướng đó với hipSYCL bằng cách cải thiện khả năng tương thích giữa hipSYCL và DPC ++:https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
Không thể chạy ROCm trên mesa. Đó là một ngăn xếp hoàn toàn độc lập để tính toán GPU. Theo như tôi biết không có sự tương tác giữa ROCm và mesa.