漢なら, C++17 で Vulkan compute kernel 書いて機械学習やらレイトレーシングやりたいですよね!
clspv https://github.com/google/clspv が最近(2020 年 1 月 23 日時点), clang/llvm 最新(https://github.com/google/clspv/commit/50e3cd23a763372a0ccf5c9bbfc21b6c5e2df57d 現状では version 11?)に対応したので C++ for OpenCL により C++17 言語機能が使えるようになりました.
clang 9 C++ for OpenCL のメモ
https://qiita.com/syoyo/items/5350e2dc5cc5dc33c12a
STL などは使えないですが, 構造化束縛の構文など使えます(現状, C++17 以前のコードと互換性がないという warning が出る). Metal Shading Language(C++14(?) ベース)っぽい感じでシェーダやら compute kernel やらかけるようになります.
使い方
clspv -cl-std=CLC++ -inline-entry-points input.cl -o bora.csv
と, -cl-std=CLC++
を指定します(大文字小文字区別します). -inline-entry-points
も必要です. デフォルトで C++17 言語モードになります.
コンパイルはそこそこ時間かかります(clang/llvm を Release ビルドすれば早くなるか?)
これで Vulkan で機械学習, レイトレーシングの開発が捗りますね!
TODO
- Vulkan 1.2 をバックエンドにすることで, Vulkan 1.2 の改善されたメモリモデルで, より CPU/CUDA 言語などの汎用 compute カーネルが記述ができるか調べる.
-
cppast https://github.com/foonathan/cppast を使って, Metal シェーディング言語のように attribute, qualifier やアノテーション(e.g.
[[texture(0)]],
) を抜き出してランタイムへ情報を渡すことができないか調べる. - 優秀な OpenCL, Vulkan 若人さまが, clspv で C++17 言語機能をお極めになられることで人類史上最速で優秀な C++17 Vulkan 若人さまへと昇華なされるスキームを確立する旅に出たい.