4
3

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.

clspv(OpenCL カーネル記述 -> SPIR-V -> Vulkan 実行) で C++17 言語機能を使う

Posted at

漢なら, 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 若人さまへと昇華なされるスキームを確立する旅に出たい.
4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?