我试图澄清OpenCL中的一些结构和语法。目前我正在使用VS2013和OpenCL Emulator-Debugger。我开始使用模拟器附带的演示项目并坚持下去:
__Kernel(hello)
__ArgNULL
{
...
}
上面只有两行:
//__kernel void
//hello()
它们之间的区别是什么?据我所知,文档(这里:http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/OpenCL-Emu-Documentation-2.pdf
和这里:https://www.khronos.org/registry/cl/specs/opencl-1.x-latest.pdf)第一个只是OCL-Emu环境中的第二个宏定义,但没有一个清晰明确的答案。这是对的吗?
答案 0 :(得分:0)
是的,它是对的,第一个是宏。
__Kernel()
是一个宏,__kernel
是一个特殊的CL标志,用于将C99函数声明为GPU代码入口函数(内核函数)。
因此__Kernel(hello)
扩展为__kernel hello
并__ArgNULL
扩展为()
。
给你正常的CL代码:__kernel hello() { ... }
在这个Emu-CL情况下,可能需要宏,因为它不会在内部扩展为CL代码。宏是一种简化和适应类似CL的表达式的方法。