OpenCL API中的类型转换(void *)&c_mem_obj

时间:2018-11-14 20:30:01

标签: opencl

我在OpenCL主机代码的配置列表中遇到了一种奇怪的语法。但是,我的主机代码功能没有任何问题,但是对我来说,这根本是什么意思以及为什么它以这种方式传递参数很奇怪。

clSetKernelArg(内核,0,sizeof(cl_mem),(void *)&c_mem_obj);

据我所知,它是强制类型转换。我错了吗 ?

我相信它没有任何特殊用途,因为 clSetKernelArg API已经只接受了指针。

进行更多的技术说明真的很有帮助。

谢谢, 金宝

1 个答案:

答案 0 :(得分:2)

您是对的,它是类型转换。它使用cl_mem对象的地址(类型为cl_mem *)并将其强制转换为类型void *(由于clSetKernelArg接受了const void *,所以它甚至都不是最佳演员)。

这不是必需的。您还可以编写clSetKernelArg(kernel, 0, sizeof(cl_mem), &c_mem_obj)并进行编译(在Windows,Mac和Linux上,我们的代码也可以编译)。