gpt4 book ai didi

c++ - opencl 程序没有给出正确的输出

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:16 26 4
gpt4 key购买 nike

以下 C++ 和 OpenCL 给出的“结果”为 3 而不是预期的 9 (3+6),我不知道为什么。我的意图只是通过使用数组索引并在两个不同的数组索引处添加数字以给出“结果”来测试访问。鉴于我是 C、C++ 和 OpenCL 的新手,它很可能是基础知识。另外,我使用 vector 作为输入是有原因的——这是我需要在更大范围内做的事情的试运行。非常感谢。

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];
}

最佳答案

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

关于c++ - opencl 程序没有给出正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com