0

このようなことをする方法はありますか?

int length = 1000;
float *h_input = new float[length * 100];
size_t bytes = length * 100 * sizeof(float);
cl_mem m_input  = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
cl_mem m_output = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
clEnqueueReadBuffer (queue, m_input, true, 0, bytes, h_input, 0, NULL, NULL);
for (int i = 0; i < 100; i++)
{
 some_function(length, m_input + i, m_output + i);
}

私はこれについていくつかの素朴なテストを行いましたが、機能していないようです。これは私が得るエラーです。

 invalid use of incomplete type 'struct _cl_mem'

iを追加パラメーターとして渡す以外の回避策はありますか?追加のパラメータを導入するには、アップストリームコードをカーネルまで変更する必要があります。

編集明確にするために、より多くの情報を追加しました。

m_inputのオフセットはclEnqueueReadBuffer、適切なオフセットを使用して回避できます(ただし、単一の呼び出しを実行するよりもコストがかかる場合があります)。ただし、m_outputは後で再利用されるため、ホストに転送することはできません。

編集私のGoogleのスキルは私に失敗しました。

しかし、私はcl.hを見て答えを見つけました。clCreateSubBuffer答えです。まだ答えはありません。したがって、を使用したサンプルコードで最初の回答を受け入れますclCreateSubBuffer()

4

1 に答える 1

0

cl.hを見て答えを見つけました。clCreateSubBuffer答えです。まだ答えはありません。したがって、を使用したサンプルコードで最初の回答を受け入れますclCreateSubBuffer()

于 2013-01-07T18:47:39.193 に答える