OpenCL API 中的类型转换 (void *)&c_mem_obj
Posted
技术标签:
【中文标题】OpenCL API 中的类型转换 (void *)&c_mem_obj【英文标题】:Type casting in OpenCL APIs (void *)&c_mem_obj 【发布时间】:2018-11-14 20:30:00 【问题描述】:我在 OpenCL 主机代码的 armaments 列表中遇到了一个奇怪的语法。但是,我的主机代码功能没有任何问题,但对我来说这意味着什么以及为什么它以这种方式传递参数很奇怪。
clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&c_mem_obj);
据我所知,它是类型转换。我错了吗 ?
我相信它没有任何特殊用途,因为 clSetKernelArg API 已经只接受指针。
有更多技术性的解释真的很有帮助。
谢谢, 金宝
【问题讨论】:
【参考方案1】:你是对的,这是一个类型转换。它获取您的cl_mem
对象的地址(类型为cl_mem *
)并将其转换为类型void *
(并且由于clSetKernelArg 需要const void *
,它甚至不是best 演员) .
不是必需的。您也可以只写clSetKernelArg(kernel, 0, sizeof(cl_mem), &c_mem_obj)
,它应该可以编译(它适用于我们的代码,在 Windows、Mac 和 Linux 上)。
【讨论】:
谢谢!!!是的你是对的。它没有演员表。我不明白他们为什么使用这种语法,因为它来自 NVIDIA 基准测试,它对我来说变得更有趣。以上是关于OpenCL API 中的类型转换 (void *)&c_mem_obj的主要内容,如果未能解决你的问题,请参考以下文章
更新到 Xcode 12:无法将类型“DataRequest”的值转换为闭包结果类型“Void”