私はC、C ++、OpenCLを初めて使用し、現時点でそれらを学ぶために最善を尽くしています。これは、CまたはC++バインディングを使用してOpenCLに移植する方法を理解しようとしている既存のC++関数です。
#include <vector>
using namespace std;
class Test {
private:
double a;
vector<double> b;
vector<long> c;
vector<vector<double> > d;
public:
double foo(long x, double y) {
// mathematical operations
// using x, y, a, b, c, d
// and also b.size()
// to calculate return value
return 0.0;
}
};
大まかに言って、私の質問は、この関数がアクセスするすべてのクラスメンバーをバインディングとカーネルに渡す方法です。スカラー値を渡す方法は理解していますが、ベクトル値についてはよくわかりません。上記の各メンバーへのポインターを渡す方法や、OpenCLのメンバーのビューがホストメモリと同期するようにそれらをメモリマップする方法はありますか?私の質問の内訳は以下の通りです。
- メンバーbとcが可変サイズである場合、これらをバインディングとカーネルに渡すにはどうすればよいですか?
- 2次元である場合、メンバーdを渡すにはどうすればよいですか?
- カーネル内からこれらのメンバーにアクセスするにはどうすればよいですか?また、カーネルへの引数でどのタイプとして宣言されますか?配列の添字表記、つまりb [0]を使用するだけでアクセスできますか?
- カーネル関数内でb.size()と同等の操作を呼び出すにはどうすればよいですか、または代わりに、バインディングからカーネルにサイズを追加の引数として渡すのでしょうか?変更するとどうなりますか?
回答にCまたはC++バインディングとカーネルコードのサンプルソースコードを入れていただければ幸いです。
どうもありがとう。