14

我正在查看 Apple 网站上的官方文档,我看到有一个关于如何在 Xcode 上使用 OpenCL 的快速入门。

也许只有我一个人,但我没有运气构建“hello world OCL”部分提到的代码。

我已经启动了 Xcode 并创建了一个空项目;创建了一个 main.c 和一个 .cl 内核文件,粘贴了 Apple 开发人员网站上的内容,即使添加了目标,我也无法构建任何东西。

AD站点没有要下载的项目,所以我不知道失败的原因(最有可能是我,或者该站点假设了步骤并且没有提及它们)。

我也尝试过 macresearch.org 的示例项目,但它们非常古老,而且第 3 课中的测试项目根本没有运行。

现在,我很确定其他人正在使用 Xcode 运行 OCL 代码,但我找不到任何一个页面(除了前面提到的 macresearch.org),它提供了关于如何使用 OCL 运行 Xcode 项目的清晰设置。有没有人知道如何使用 OCL 和 Xcode 的教程?

我已经购买了 3 本关于 OCL 的书(Gaster 的 OpenCL 异构计算、Scarpino 的 OpenCL in action 和 Munshi 的 OpenCL 编程指南),都没有提到如何设置 Xcode,而它们详细介绍了 Visual Studio 设置甚至 Eclipse 设置.

在一边; 是否有任何应用程序能够在 OCL 应用程序中运行内核代码之前对其进行验证?

提前感谢您提出的任何建议。

4

3 回答 3

13

简短回答:https ://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/XCodeHelloWorld/XCodeHelloWorld.html

命令行的长答案:

使用最近的 Xcode(和 Lion 或更高版本),您甚至不需要调用clCreateProgramWithSource,只需编写内核并从您的应用程序调用它,但需要一些额外的编译步骤。

我在这里使用默认编译器标志从 Apple 获取 OpenCL Hello World 示例(请参阅https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/ExampleHelloWorld/Example_HelloWorld.html)并显示Xcode 会在后台执行的步骤。

为了让您开始,请执行以下操作:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -cl-auto-vectorize-enable -emit-gcl mykernel.cl

这将创建 2 个文件,mykernel.cl.h 和 mykernel.cl.c(mykernel.cl.c 完成了将内核加载到应用程序中的所有魔法)。接下来,您需要编译内核:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple i386-applecl-darwin -emit-llvm-bc -o mykernel.cl.i386.bc mykernel.cl
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple x86_64-applecl-darwin -emit-llvm-bc -o mykernel.cl.x86_64.bc mykernel.cl
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc -x cl -cl-std=CL1.1 -Os -triple gpu_32-applecl-darwin -emit-llvm-bc -o mykernel.cl.gpu_32.bc mykernel.cl

最后但同样重要的是,构建应用程序本身:

clang -c -Os -Wall -arch x86_64 -o mykernel.cl.o mykernel.cl.c
clang -c -Os -Wall -arch x86_64 -o square.o square.c
clang -framework OpenCL -o square mykernel.cl.o square.o

And that's it. You won't see any clCreateProgramWithBinary or clCreateProgramWithSource in Apple's sample code. Everything is done via mykernel.cl.c generated by openclc.

于 2013-02-06T00:32:41.613 回答
6

所以似乎我能够以这种方式部分解决这个问题:

  • 创建一个空项目,创建一个main.c文件和一个内核文件

  • 创建一个目标作为控制台应用程序

  • 在构建设置中,添加 OpenCL 框架(如果添加正确,您将看到它出现在左侧窗格的文件浏览器中)。

  • 指定内核文件所在的位置,硬编码路径(仅仅说“我的 kernel.cl”是不够的;Xcode 由于某些原因没有得到 cl 文件与主文件在同一个目录中,所以您必须在加载内核文件时指定路径)

我成功使用了这些步骤,同时使用了 Apple 开发人员网站上的示例代码。

我很确定还有其他方法可以做到这一点,但至少这可以帮助像我这样不知道如何开始的人。

于 2012-10-28T22:00:56.567 回答
1

要回答您问题的第二部分,您可以在 Mountain Lion 上运行 OpenCL 编译器,foo.cl如下所示:

/System/Library/Frameworks/OpenCL.framework/Libraries/openclc \
    -c -Wall -emit-llvm -arch gpu_32 -o foo.bc foo.cl

它将编译foo.cl为 LLVM bit-code foo.bc。这个二进制文件可以和 一起使用clCreateProgramWithBinary,比clCreateProgramWithSource. -arch的有效值为i386 x86_64 gpu_32

于 2012-10-26T01:03:04.733 回答