- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OpenCL 的新手。我试图将 5 个参数传递给内核:一个输入缓冲区、一个输出缓冲区、一个整数和 2 个输入缓冲区大小的局部数组。
//Create input/output cl_mem objects
cl_mem inputBuffer = clCreateBuffer(context, CL_MEM_READ_ONLY |
CL_MEM_COPY_HOST_PTR, inputVector.size(), (void *)inputVector.data(), NULL);
cl_mem outputBuffer = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
inputVector.size(), NULL, NULL);
//get iterator from command line
cl_uint iterations = (cl_uint) atoi(argv[3]);
//std::cout << "iterations: " << iterations << std::endl
//cout confirms I'm getting this correctly
//Set kernel arguments
bool argOK = (CL_SUCCESS == clSetKernelArg(kernel, 0, sizeof(cl_mem), (void*)&inputBuffer));
argOK = argOK && (CL_SUCCESS == clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&outputBuffer));
argOK = argOK && (CL_SUCCESS == clSetKernelArg(kernel, 2, sizeof(cl_uint), &iterations));
argOK = argOK && (CL_SUCCESS == clSetKernelArg(kernel, 3, sizeof(inputBuffer), NULL));
argOK = argOK && (CL_SUCCESS == clSetKernelArg(kernel, 4, sizeof(inputBuffer), NULL));
//Check for failure
if(!argOK) {
std::cerr << "Error: clSetKernelArg failed\n";
return SDK_FAILURE;
}
当我运行程序时,它会打印:
Error: clSetKernelArg failed
我做了一些挖掘/调试,最终发现这一行:
argOK = argOK && (CL_SUCCESS == clSetKernelArg(kernel, 2, sizeof(cl_uint), &iterations));
是罪魁祸首。将其更改为:
argOK = argOK && (CL_INVALID_ARG_SIZE == clSetKernelArg(kernel, 2, sizeof(cl_uint), &iterations));
让程序成功继续。 因此,clSetKernelArg(kernel, 2, ...) 语句返回 CL_INVALID_ARG_SIZE。不过这很奇怪,因为看起来我为迭代变量传递了正确的大小。
这是我的内核供引用:
__kernel void do_the_thing (__global uchar* in, __global uchar* out,
__global uint * numIterations, __local uchar* arr1, __local uchar* arr2)
{
//Do stuff that I haven't written yet.
}
TL;DR:为什么 setKernelArg 调用返回 CL_INVALID_ARG_SIZE?
最佳答案
内核的第三个参数 (index = 2) 是缓冲区 (__global uint *
) 而不是 cl_uint
标量。
将内核更改为:
__kernel void do_the_thing (__global uchar* in, __global uchar* out, uint numIterations, __local uchar* arr1, __local uchar* arr2)
{
//Do stuff that I haven't written yet.
}
关于c++ - OpenCL:clSetKernelArg 返回 CL_INVALID_ARG_SIZE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946420/
我正在研究 OpenCl 编程指南中的 HelloWorld 示例,当我尝试运行此函数 (clSetKernelArg) 时,我不断收到 EXC_BAD_ACCESS。我的函数的外观基本上是... c
我是 OpenCL 的新手。我试图将 5 个参数传递给内核:一个输入缓冲区、一个输出缓冲区、一个整数和 2 个输入缓冲区大小的局部数组。 //Create input/output cl_mem ob
我即将完成将一些 CUDA 代码重写为 OpenCL 的工作。但是我遇到了这个可怕的运行时错误。 我调用的内核接受这样的参数: __kernel void kernel_forwardProject(
来自 Khronos 网站关于 clSetKernelArg 的线程安全: All OpenCL API calls are thread-safe except clSetKernelArg, wh
我正在使用 Luis Cabellos 的 System.GPU.OpenCL 模块来控制 OpenCL 内核。一切运行良好,但为了加快速度,我尝试将一些全局内存缓存到本地缓冲区中。我刚刚注意到,使用
我正在通过实现 Matrix 点积来深入研究 OpenCL。我在让我的内核返回与我的主机相同的值时遇到了问题。 我做了一个封装函数,分配设备内存,设置内核参数,运行内核并将结果返回给主机。 /* T
我是一名优秀的程序员,十分优秀!