次のC++とOpenCLは、予想される9(3 + 6)ではなく3の「結果」を示しています。理由はわかりません。私の意図は、配列インデックスを使用し、2つの異なる配列インデックスに数値を追加して「結果」を取得することにより、アクセスをテストすることでした。私がC、C ++、OpenCLを初めて使用することを考えると、それが基本的なものである可能性は十分にあります。また、入力としてベクトルを使用しているのには理由があります。これは、より大規模に実行する必要があることの試運転です。どうもありがとう。
C ++:
vector<long> v1;
vector<long> v2;
long result;
v1.push_back(3);
v1.push_back(4);
v2.push_back(5);
v2.push_back(6);
long* a1 = &v1[0];
long* a2 = &v2[0];
cl::Buffer bufA(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, v1.size()*sizeof(long), a1);
cl::Buffer bufB(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, v2.size()*sizeof(long), a2);
cl::Buffer bufC(context, CL_MEM_READ_WRITE, sizeof(long));
addKernel.setArg(0, bufA);
addKernel.setArg(1, bufB);
addKernel.setArg(2, bufC);
cl::CommandQueue queue(context, devices[0]);
queue.enqueueTask(addKernel);
queue.enqueueReadBuffer(bufC, CL_TRUE, 0, sizeof(long), &result);
queue.flush();
queue.finish();
cout << "Result: " << result << endl;
OpenCL:
__kernel void useHostPtr(__global long *a, __global long *b, __global long *c) {
*c = a[0] + b[1];
}