OpenCL 内核定义语法

OpenCL kernel definition syntax

我正在尝试阐明 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环境中的宏定义,但没有明确和明确的答案。这样对吗?

对对对,第一个就是宏。

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

所以这个 __Kernel(hello) 扩展为 __kernel hello __ArgNULL 扩展为 ()。 给你正常的 CL 代码:__kernel hello() { ... }

在这个 Emu-CL 案例中,可能需要宏,因为它不会在内部扩展为 CL 代码。宏是一种简化语言并使其适应类似 CL 的表达式的方法。