3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NVIDIA/AMD GPU で OpenCL で C++ でカーネル記述はまだ無理だった(2021/04 時点)

Last updated at Posted at 2021-04-22

OpenCL 3.0 で大々的(?)に C++ for OpenCL(カーネル言語で C++ サポート)がうたわれていますが... 現状(2021/04)対応している GPU はないことがわかりました. :cry:

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++ は扱えません :cry:

AMD

amdgpu-pro ドライバでのお話をします. バージョンは 2.0 止まりでした. SPIR-V IL 対応拡張もありませんでした :cry:

おまけ: 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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?