3
2

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 5 years have passed since last update.

clang 9 C++ for OpenCL のメモ

Last updated at Posted at 2019-09-29

Clang 9 から, OpenCL カーネルで C++ の機能(C++17)が使えるようになってきました.

ただしこれは C++ 言語のフル実装(libc++ など STL なども含んだものという意図です)が OpenCL runtime 経由で GPU などで動くようになるというわけでもなく, OpenCL C++ の実装というわけではありません.
また, STL も利用できません.

template や class が使えて, 最近の CUDA C++ 言語や, Metal Shading Language のような感じでかけるようになった感じでしょうか.

auto や lambda 式も利用できますので, それなりにカーネルコードが記述しやすくなると想像します.

利用方法

-cl-std=clc++ もしくは -std=clc++ を指定します.

また, デフォルトでは get_global_id() などは定義されないため, ドキュメントにあるように, 基本的にデフォルトヘッダファイルを読み込むオプションを指定します.

-Xclang -finclude-default-header

-Xclang は, 後続のコンパイルオプションが clang 独自のものであることを指示するものです.

その他

SyCL

より完全な形(?)で C++ を Accelerator(e.g. GPU, FPGA) で動かすものとして, SyCL が提案されています.

OSS の実装は triSYCL, 商用(?)の実装は Codeplay 社による ComputeCPP があります.
どのくらい世の中で利用されているのかは不明ですが, Intel SyCL なるものも出てきているので以外と普及していくかも? :thinking:

hipSyCL というのも出てきていました.

Intel OpenCL Clang

intel graphics compiler で使われています.

clang 9 以降でビルドすれば, C++ -> SPIR-V -> OpenCL compute kernel を実行できる Vulkan runtime で Vulkan で実行, というのが実現できそうかしらん?

clspv

SPIR-V 出力に特化した, clspv でも C++ を使うことができますが, こちらは現状 opencl1.2 の C++ 機能のみになります(C++98 相当?). いろいろいじれば C++17 も使える... かも?

TODO

3
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?