AMD GPU 용 SYCL 및 OpenCL
저는 AMD 5700XT GPU를 가지고 있고 SYCL을 배우려고하지만 AMD GPU 드라이버 스택의 현재 상태에 대해 많은 의구심을 가지고 있습니다. 내가 읽은 내용에 따르면 AMD GPU에는 mesa, amdgpu 및 amdgpu-pro와 같은 여러 드라이버 스택이 있습니다. 내가 올바르게 이해한다면 mesa에는 자체 opencl 구현이 있으며 amdgpu 드라이버에 대한 또 다른 구현이 있습니다.
또한 amd에는 또 다른 OpenCL 구현 인 HIP 인 ROCm이 있는데 CUDA 및 일부 도구와 같은 것입니다.
AMD GPU에서 SYCL을 실행할 수있는 ComputeCpp 및 hipSYCL의 최소 2 개 구현이 있습니다. OpenCL 및 SPIR-V 장치에서 실행되는 이미지에 따라 clang 구현이 AMD gpus에서도 실행될 수 있어야합니까?
정확히 이해하면 일부 확장 (SYCL 2020)이 포함 된 SYCL (DPC ++)의 구현 인 oneAPI와 해당 SYCL 구현 (CUDA에 대한 cuBLAS 또는 cuSPARSE의 종류) 위에있는 일부 라이브러리도 있습니다. 다른 SYCL 구현 위에 oneAPI 라이브러리를 실행할 수 있어야합니까?
결국 그래픽 (OpenGL 및 Vulkan)에 메사를 사용하면 그 위에 ROCm을 실행할 수 있습니까? ROCm 및 OpenCL 메사 구현은 메사 그래픽 드라이버와 어떻게 상호 작용합니까?
보시다시피 모든 생태계에 대해 큰 혼란이 있습니다. 누군가가 그것에 약간의 빛을 제공 할 수 있습니까?
답변
내 이해는 amdgpu라는 단일 커널 드라이버가 있다는 것입니다. Mesa는 사용자 영역에 거주하며 OpenGL 구현입니다. amdgpu-pro는 대체 폐쇄 소스 사용자 영역 라이브러리 (OpenGL, OpenCL 등)를 제공합니다.
clover는 Mesa 위에 OpenCL 구현입니다. 나는 그것이 어떤 상태인지 확실하지 않지만 (내 인상은 한동안 잘 유지되지 않았고 개발이 중단되었다는 것입니다) SYCL 프로그램을 실행할 수 있을지 의문입니다.
ROCm은 OpenCL 구현 그 이상입니다. AI 플랫폼, 가속화 된 라이브러리, 도구 및 컴파일러를 제공하는 AMD의 GPGPU 플랫폼입니다. 또한 OpenCL 구현도 포함되어 있습니다. HIP는 OpenCL 구현이 아니라 사실상 AMD가 CUDA 프로그래밍 모델을 구현 한 것입니다.
내가 아는 한, 불행히도 AMD는 SPIR이나 SPIR-V를 지원하지 않기 때문에 최근 AMD OpenCL 구현은 SYCL 프로그램을 실행할 수 없습니다. AMD OpenCL은 SPIR-V를 지원하지 않았으므로 DPC ++ / clang이 작동하지 않습니다. ComputeCpp는 SPIR에서도 작동 할 수 있지만 이에 대한 지원은 이미 AMD의 OpenCL 구현에서 제거되었습니다.
AMD에 대한 SYCL 지원에 관한 한 hipSYCL은 일반적으로 갈 길입니다. 안타깝게도 AMD는 데이터 센터 카드에도 사용되는 칩에 ROCm 지원을 집중하기 때문에 ROCm (hipSYCL이 빌드하는)에서 특정 GPU를 지원하지 않습니다. 자세한 내용은 여기를 참조하십시오.https://github.com/RadeonOpenCompute/ROCm#supported-gpus
oneAPI는 컴퓨팅 플랫폼에 대한 인텔의 포괄적 인 용어로 라이브러리, 도구 및 컴파일러 (ROCm과 유사)를 제공합니다. DPC ++ / LLVM SYCL / 인텔 SYCL은 oneAPI의 일부입니다. 이 모든 용어는 Intel의 Khronos SYCL 2020 표준 구현이라는 동일한 것을 나타냅니다. 거의 모든 인텔 확장 기능이 SYCL 2020 사양에 병합되었으므로 DPC ++를 별도의 언어로 생각하지 마십시오.
하나의 API 라이브러리에 추가 백엔드를 추가 할 수 있습니다. 예를 들어 Codeplay는 NVIDIA에 대해 수행했습니다. 원칙적으로 다른 SYCL 구현으로 이식하는 것도 가능합니다. hipSYCL과 DPC ++ 간의 호환성을 개선하여 hipSYCL로 잠재적으로 해당 방향으로 이동할 수있는 몇 가지 기초 작업을 진행하고 있습니다.https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz
메사 위에서 ROCm을 실행할 수 없습니다. GPU 컴퓨팅을위한 완전히 독립적 인 스택입니다. 내가 아는 한 ROCm과 메사 사이에는 상호 작용이 없습니다.