在文章"如何设置Xcode以运行OpenCL代码,以及如何在构建之前验证内核" NeXTCoder将一些代码称为" Short Answer",即https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/XCodeHelloWorld/XCodeHelloWorld.html。
在该代码中,作者说"将内核代码包装到内核块中:"没有解释什么是"内核块"。 (Apple的Mac OS X OpenCL程序员指南未提及内核块。)
主持人程序调用" square_kernel"但样本内核被称为" square"并且示例内核块标记为" kernelName" (斜体字)。你能告诉我如何将3个部分放在一起:内核,内核块和放大器。主机程序在Xcode 5.1中运行?我只有一个内核。感谢。
答案 0 :(得分:1)
这不是真的行话。它是类似闭包的实体。
OpenCL C 2.0增加了对clang块语法的支持。您可以使用^运算符声明Block变量并指示Block文本的开头。块本身包含在{}中,如示例所示(与C一样,通常表示语句的结尾)。块可以使用来自定义它的同一范围内的变量。
示例:
int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
return num * multiplier;
};
printf(“%d\n”, myBlock(3));
// prints 21
来源: https://www.khronos.org/registry/cl/sdk/2.1/docs/man/xhtml/blocks.html
答案 1 :(得分:-1)
术语“内核块”似乎只是一个行话来引用“作为内核的代码的一部分”。特别是,在这种情况下,内核块只是通过在声明之前添加kernel
来声明为内核的函数。或者,甚至更简单,从该网站上的术语使用方式来看,我会说“内核块”与“内核”相同。
kernelName
(斜体字)是一个占位符。那里的代码显示了如何定义任何内核的一般模式:
kernel
void
kernelName
,例如square
内核被调用square
,但用square_kernel
调用的原因似乎是XCode所做的一些魔术:它似乎读取了.cl
文件,并创建了一个.h
文件,其中包含从.cl
文件派生的其他声明(如this question中所示,其中定义了名为rebound
的内核,并且GCL生成了{ {1}}声明)。