OpenCL API中的类型转换(void*)&;c_mem_obj
我在OpenCL主机代码的军备列表中遇到了一个奇怪的语法。但是,我的主机代码功能没有任何问题,但对我来说很奇怪,它到底意味着什么,以及它为什么以这种方式传递参数 clSetKernelArg(kernel,0,sizeof(cl_mem),(void*)和c_mem_obj) 据我所知,这是类型转换。我错了吗 我相信它没有任何特殊用途,因为clSetKernelArgAPI已经只接受指针 有一个更专业的解释真的很有帮助 谢谢,OpenCL API中的类型转换(void*)&;c_mem_obj,opencl,Opencl,我在OpenCL主机代码的军备列表中遇到了一个奇怪的语法。但是,我的主机代码功能没有任何问题,但对我来说很奇怪,它到底意味着什么,以及它为什么以这种方式传递参数 clSetKernelArg(kernel,0,sizeof(cl_mem),(void*)和c_mem_obj) 据我所知,这是类型转换。我错了吗 我相信它没有任何特殊用途,因为clSetKernelArgAPI已经只接受指针 有一个更专业的解释真的很有帮助 谢谢, jimbo你说得对,这是一个类型演员。它将获取cl\u mem对象(
jimbo你说得对,这是一个类型演员。它将获取
cl\u mem
对象(类型为cl\u mem*
)的地址,并将其强制转换为typevoid*
(由于clSetKernelArg采用const void*
,因此它甚至不是最佳强制转换)
它不是必需的。您也可以只编写
clSetKernelArg(kernel,0,sizeof(cl\u mem),&c\u mem\u obj)
并且它应该编译(它适用于我们的代码,在Windows、Mac和Linux上)。您是对的,它是一个类型转换。它将获取cl\u mem
对象(类型为cl\u mem*
)的地址,并将其强制转换为typevoid*
(由于clSetKernelArg采用const void*
,因此它甚至不是最佳强制转换)
这不是必需的。您也可以只编写
clSetKernelArg(kernel,0,sizeof(cl\u mem),&c\u mem\u obj)
并且应该编译它(它适用于我们的代码,在Windows、Mac和Linux上)。谢谢!!!是的,你是对的。它不用石膏就可以工作。我不明白他们为什么使用这种语法,因为它来自NVIDIA基准测试,所以对我来说更有趣。谢谢!!!是的,你是对的。它不用石膏就可以工作。我不明白他们为什么使用这种语法,因为它来自NVIDIA基准测试,所以对我来说更有趣。