opencl程序没有给出正确的输出

时间:2012-09-14 15:43:51

标签: c++ opencl

以下C ++和OpenCL给出的结果为3而不是预期的9(3 + 6),我不知道为什么。我的目的只是通过使用数组索引并在两个不同的数组索引处添加数字来测试访问权限以给出“结果”。鉴于我是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];
}

1 个答案:

答案 0 :(得分:1)

主机端的long类型可能具有不同的长度。它通常是4个字节。在OpenCL中,long被定义为64位整数。 您应该在主机代码中使用cl_long而不是long