number のみを __global int* c に書き込むカーネル関数があります。具体的には、次のようになります。
__kernel void Add1(__global int* c)
{
*c = 3;
}
ホスト コードでは、C 値にメモリを割り当てました。
cl_mem bufferC[deviceNumber]; // deviceNumber = 8
for(int i = 0; i< deviceNumber; i++){
bufferC[i] = clCreateBuffer(context[i], CL_MEM_WRITE_ONLY, sizeof(cl_int) * global_size, NULL, &error);
}
for(int i = 0; i< deviceNumber; i++){
error = clSetKernelArg(kernel[i], 0, sizeof(cl_mem), (void*)&bufferC[i]);
}
for(int i = 0; i< deviceNumber; i++){
error = clEnqueueReadBuffer(commandQueue[i], bufferC[i], CL_TRUE, 0, sizeof(cl_int) * global_size, &c[i], 0, NULL, NULL);
}
そして私はそれを次のように印刷します:
for (size_t i = 0; i < deviceNumber; ++i)
{
std::cout<< "delta = " << c[i] << std::endl;
}
そして出力:
delta = 3
delta = 11165
delta = -1329524360
delta = 11165
delta = 0
delta = 0
delta = -1329520352
delta = 11165
最初の値は問題ありません。残りは一種のゴミです。私がどのような間違いを書いたか知っていますか? もちろん部分的なコードですが、その 'c' 値に関するすべての行を貼り付けたと思います。グローバル サイズは 1 に設定されます。