我创建了一个带有一些值的向量。然后为该向量创建一个cl_buffer,并使用内核参数将其传递给OpenCL内核。像这样:
在主持人代码:
__kernel void test(__global double* inp)
{
for(int m = 0;m<10;m++)
{
printf("inp values are : %d \n",inp[m]);
}
}
在内核代码中:
{{1}}
这只是显示我如何将向量中的值传递给程序中的OpenCL内核的示例。它有什么问题吗?当我打印值时,每次都会得到一些随机的垃圾值。
我正在使用MacOS系统和Xcode。设备是Intel HD graphics 4000
答案 0 :(得分:1)
如果您使用的是CL_MEM_USE_HOST_PTR,则需要映射内存区域,以便设备可以看到它。检查https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clEnqueueMapBuffer.html。我也建议阅读the Intel tutorial on the subject.
HD 4000也不应该有双重支持。您确定代码是在GPU而不是CPU上运行吗?
答案 1 :(得分:0)
我只是在编译答案,因为所有要点(在评论中)都使它协同工作。
1)将数据类型更改为double,因为Intel没有正确使用double并且结果不正确。
2)其他错误是大小,在缓冲区中传递大小时,在readbuffer期间,它应该是inp * sizeof(float),因为我们使用float而不是double现在!