OpenCL中的内核块是什么?

OpenCL中的内核块是什么?,opencl,Opencl,在文章“如何设置Xcode来运行OpenCL代码,以及如何在构建之前验证内核”中,NeXTCoder将一些代码称为“简短答案”,即 在这段代码中,作者说“将内核代码包装到内核块中”,但没有解释什么是“内核块”。(苹果公司的MacOSX OpenCL程序员指南没有提到内核块。) 宿主程序调用“square_kernel”,但示例内核称为“square”,示例内核块标记为“kernelName”(斜体)。您能告诉我如何将这三部分放在一起:内核、内核块和主机程序,以便在Xcode 5.1中运行吗?我只

在文章“如何设置Xcode来运行OpenCL代码,以及如何在构建之前验证内核”中,NeXTCoder将一些代码称为“简短答案”,即

在这段代码中,作者说“将内核代码包装到内核块中”,但没有解释什么是“内核块”。(苹果公司的MacOSX OpenCL程序员指南没有提到内核块。)

宿主程序调用“square_kernel”,但示例内核称为“square”,示例内核块标记为“kernelName”(斜体)。您能告诉我如何将这三部分放在一起:内核、内核块和主机程序,以便在Xcode 5.1中运行吗?我只有一个内核。谢谢。

术语“内核块”似乎只是一个行话,指的是“作为内核的代码部分”。特别是,本例中的内核块只是声明为内核的函数,在声明之前添加
kernel
。或者,更简单一点,从这个术语在这个网站上的使用方式来看,我会说“内核块”与“内核”是相同的

kernelName
(斜体)是一个占位符。那里的代码显示了如何定义任何内核的一般模式:

  • 它的前缀是
    内核
  • 它返回
    void
  • 它有一个名字。。。
    kernelName
    ,例如可以是
    square
  • 它有几个输入和输出参数

内核被称为
square
,但使用
square\u内核
调用的原因似乎是XCode所做的一些魔术:它似乎读取
.cl
文件,并创建一个
.h
文件,其中包含从
.cl
文件派生的附加声明(从中可以看出,定义了一个名为
回弹
的内核,GCL生成了一个
回弹(kernel
声明)。

这不是真正的行话,它是一个类似闭包的实体

OpenCL C 2.0增加了对clang块语法的支持。您可以使用^运算符声明块变量并指示块文字的开头。块体本身包含在{}中,如示例所示(与C一样,;指示语句的结尾)。该块能够使用定义它的同一范围内的变量

例如:

int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};
printf(“%d\n”, myBlock(3));
// prints 21
资料来源:

在谈到这篇“文章”时,你似乎提到了马可13对拉克尔问题的回答非常有帮助。有人能推荐一个好的资源来学习如何使用C++11在Xcode 5.1上组装OpenCL程序,其中包含更多的“如何”和更少的“你可以”。