我在OpenCL主机代码的配置列表中遇到了一种奇怪的语法。但是,我的主机代码功能没有任何问题,但是对我来说,这根本是什么意思以及为什么它以这种方式传递参数很奇怪。
clSetKernelArg(内核,0,sizeof(cl_mem),(void *)&c_mem_obj);
据我所知,它是强制类型转换。我错了吗 ?
我相信它没有任何特殊用途,因为 clSetKernelArg API已经只接受了指针。
进行更多的技术说明真的很有帮助。
谢谢, 金宝
答案 0 :(得分:2)
您是对的,它是类型转换。它使用cl_mem
对象的地址(类型为cl_mem *
)并将其强制转换为类型void *
(由于clSetKernelArg接受了const void *
,所以它甚至都不是最佳演员)。
这不是必需的。您还可以编写clSetKernelArg(kernel, 0, sizeof(cl_mem), &c_mem_obj)
并进行编译(在Windows,Mac和Linux上,我们的代码也可以编译)。