OpenCL 3.0 で大々的(?)に C++ for OpenCL(カーネル言語で C++ サポート)がうたわれていますが... 現状(2021/04)対応している GPU はないことがわかりました.
C++
OpenCL で C++ するには以下の条件のどちらかがいります.
-
cl_ext_cxx_for_opencl
拡張が定義されており, OpenCL ドライバのコンパイラが C++ サポートしている. - SPIR-V を中間言語にしており, 外部コンパイラ(clang)が C++ を SPIR-V バイナリにする
- SPIR-V IL 対応は OpenCL 2.1 or 2.2(3.0 では必須ではない)
NVIDIA
OpenCL 3.0 対応ドライバが出ました. しかし実体は 1.2 + alpha くらいです. cl_ext_cxx_for_opencl
は定義されていません. SPIR-V IL 対応拡張もありません. したがって C++ は扱えません
AMD
amdgpu-pro ドライバでのお話をします. バージョンは 2.0 止まりでした. SPIR-V IL 対応拡張もありませんでした
おまけ: Intel
ワンチャンあるかもだが, 現状 Xe GPU(dGPU)が販売されていないため不明.
まとめ
OpenCL で C++ がまともにサポートされるのは 4~5 年後くらいですかね...
C++ 使いたかったらおとなしく NVIDIA GPU + CUDA にしましょう.
clspv で C++ OpenCL カーネルを Vulkan で動かすという手もありますが, Vulkan で実行はメモリモデルの制約とかあった気がするので GPGPU 用には向かない気がします. あとは Colab みたいなサーバ環境でも使えないですし.
clspv(OpenCL カーネル記述 -> SPIR-V -> Vulkan 実行) で C++17 言語機能を使う
https://qiita.com/syoyo/items/8eab8d3f80bd78a29d56