OpenCL中的内核块是什么?
在文章“如何设置Xcode来运行OpenCL代码,以及如何在构建之前验证内核”中,NeXTCoder将一些代码称为“简短答案”,即 在这段代码中,作者说“将内核代码包装到内核块中”,但没有解释什么是“内核块”。(苹果公司的MacOSX OpenCL程序员指南没有提到内核块。) 宿主程序调用“square_kernel”,但示例内核称为“square”,示例内核块标记为“kernelName”(斜体)。您能告诉我如何将这三部分放在一起:内核、内核块和主机程序,以便在Xcode 5.1中运行吗?我只有一个内核。谢谢。术语“内核块”似乎只是一个行话,指的是“作为内核的代码部分”。特别是,本例中的内核块只是声明为内核的函数,在声明之前添加OpenCL中的内核块是什么?,opencl,Opencl,在文章“如何设置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程序,其中包含更多的“如何”和更少的“你可以”。