在OpenCL内核中传递vector的值

时间:2016-11-21 11:28:35

标签: opencl

我创建了一个带有一些值的向量。然后为该向量创建一个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

2 个答案:

答案 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现在!