【问题标题】:OpenCL kernel definition syntaxOpenCL 内核定义语法
【发布时间】:2015-05-21 20:50:23
【问题描述】:

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

【问题讨论】:

  • 内核只是一个普通的 C 函数(符合许多限制),具有属性__kernel。
  • @SK-logic 是的,我知道这一点。我无法弄清楚定义一个的正确语法是什么,以及我提到的上述语法之间有什么区别。
  • 只有一种语法 - __kernel 属性。你上面的代码显然是一些奇怪的宏,先展开宏看看它实际上在做什么。

标签: opencl gpgpu


【解决方案1】:

是的,没错,第一个是宏。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2016-01-17
    • 2018-02-08
    相关资源
    最近更新 更多