私はC、C++、OpenCLが新しく、現時点でそれらを学ぶために最善を尽くしています。ここには、既存のC++関数があります。この関数は、CまたはC++バインディングのいずれかを使用してOpenCLに移植する方法を理解しようとしています。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++のバインディングとカーネルコードのサンプルコードを参考にしていただきたいと思います。
多くのありがとうございます。
'using namespace std;' - これをヘッダーではこれまでしないでください。 –
@EdS。それはなぜでしょうか? – dominicbri7
@ dominicbri7:ヘッダーを含む全員のグローバル名前空間を汚染しているためです。たぶん私は 'std'をグローバルな名前空間にインポートしたくないかもしれません。たぶんそこには正当な理由があります。あなたは私のために選択していません。 –