2011年12月5日月曜日

OpenCL C++ bindingで複数の.clファイルを扱う

C++を使い慣れている人には常識的なことなのかもしれないが、
OpenCLをC++で使うときにやり方が見つからなかったのでメモ。

OpenCLをC++から叩くとソースが非常に短くなって生産性、可読性がかなり高まり便利。
しかしながら、使用者が少ないので情報があまりなく、その点では面倒。

標題の件だが、C++からは以下のようにしてソースをコンパイルする。
(srcに.clファイルのソースが含まれているとする。)
cl::Program::Sources source(1, std::make_pair(src, strlen(src) ));
cl::Program program_ = cl::Program(context, source);
program_.build(devices);

単一のソースのみをコンパイルする場合はこれでいいのだが、
複数のソースを扱う場合の情報は検索しても見つけられず、四苦八苦した。
しかし、あるサイトで先にsourceを宣言し、コンストラクタを使わずにpush_backを使うものを発見。
cl::Program::Sources source(1, std::make_pair(src, strlen(src) ));

cl::Program::Sources source;
source.push_back(std::make_pair(src, strlen(src));

これと同じように、複数のファイルをpush_backしてやればそのままコンパイルが通る。

0 件のコメント:

コメントを投稿