このようなことをする方法はありますか?
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()
。