2016-12-28 12 views
1

私はOpenCLをよく知らないけど、C/C++ APIではOpenCLコードを文字列として提供する必要があります。しかし最近、私はArrayFireライブラリを発見しました。このライブラリは、いくつかの計算を呼び出すために文字列コードを必要としません。私はそれがどのように機能しているのだろうと思った(オープンソースだが、コードはちょっと混乱している)。GPUで純粋なC++コードを実行することは可能ですか

template <typename F> 
void parallel_for(int starts, int ends, F task) //API 
{ /*some OpenCL magic */ } 
//... 
parallel_for(0, 255, [&tab](int i){ tab[i] *= 0.7; }); //using 

PS:それは次のようにOpenCLのコンパイル(例えばx86の)の任意の部分を呼び出すバックエンドのコードと並列に書き込むことが可能になり、私はあまりにも楽観的、99%のためだ知っ

+1

https://github.com/arrayfire/arrayfire - ソースは無料で入手できます。なぜそれを読んでいないのですか? – talonmies

+0

OpenCL 2.2は、C++のサブセットで書かれたカーネルをサポートしています。 (仮想関数なし、新規/削除、例外など) – tmlen

答えて

2

あなたがすることはできません標準OpenCLを使用してデバイスから実際にC++ホストコードを呼び出します。 シングルソースC++プログラミングのKhronos標準であるSYCLを使用できます。 SYCLでは、OpenCL文字列を必要とせずにC++を直接デバイスコードにコンパイルすることができます。 SYCLカーネルの中から任意のC++関数を呼び出すことができます(ソースコードが利用できる限り)。 SYCL.techには、より多くのリンクと最新情報があります。

関連する問題