0

2 次元ベクトルを openCL float 配列に入れるのに苦労しています。

テスト配列と動的ベクトルを次のように定義します。

double ABCD[2][2];                                      //Works
vector< vector<float> > Jacobian(0, vector<float>(0));  //Doesn't work
cl_float *input_float;                                  //openCL Input Array

私は C++ プログラムでヤコビアンを使って多くの作業を行っており、最終的にそれを openCL プログラムに渡す必要があります。

input_double = *ABCD;       //works fine in the openCL program
input_float = Jacobian;     /*error C2440 no suitable conversion 
                            from std::vector to cl_float exists*/

ポインターをいじっても、これは機能しません。動的ベクトルを cl_float 構造に取得する方法についてのアイデアはありますか? ドキュメンテーションが不足しています。

最終的には、それを独自のバッファーに配置し、GPU 内で作業しています。

inMapPtr = clEnqueueMapBuffer(
                    commandQueue, 
                    inplaceBuffer, 
                    CL_FALSE, 
                    CL_MAP_WRITE, 
                    0, 
                    SIZE_F, 
                    0, 
                    NULL, 
                    &inMapEvt, 
                    &status);
memcpy(inMapPtr, input_float, SIZE_F);

どんな助けでも大歓迎です。

4

2 に答える 2

1

ポインターは配列ではありません。配列はポインターではありません。2 の 2 つの配列を指すdouble ABCD[2][2];長さ 2 のポインターの配列ではありません。これは、インデックスのペアを正しいインデックスに変換する構文シュガーを含む4 の単一メモリ ブロックです。doubledoubledouble

vectorvectorまったく異なるデータ構造であり、多次元配列として解釈することはできません。vector1 次元配列のみをサポートします。

input_float = Jacobian;     /*error C2440 no suitable conversion 
                            from std::vector to cl_float exists*/

次のようなものが必要です

input_float = Jacobian[0][0];

vectorインスタンスは、組み込み配列のように自動的にポインターに分解されません。

于 2013-08-25T00:29:01.290 に答える