1

次の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];
}
4

1 に答える 1

1

longホスト側の型は長さが異なる場合があります。通常は 4 バイトです。OpenCL では、long64 ビット整数として定義されています。ホストコードではcl_long代わりに使用する必要があります。long

于 2012-09-14T20:16:20.487 に答える