OpenCL内核定义语法

时间:2015-05-20 23:13:40

标签: opencl gpgpu

我试图澄清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环境中的第二个宏定义,但没有一个清晰明确的答案。这是对的吗?

1 个答案:

答案 0 :(得分:0)

是的,它是对的,第一个是宏。

__Kernel()是一个宏,__kernel是一个特殊的CL标志,用于将C99函数声明为GPU代码入口函数(内核函数)。

因此__Kernel(hello)扩展为__kernel hello__ArgNULL扩展为()。 给你正常的CL代码:__kernel hello() { ... }

在这个Emu-CL情况下,可能需要宏,因为它不会在内部扩展为CL代码。宏是一种简化和适应类似CL的表达式的方法。