如何设置Xcode以运行OpenCL代码,以及如何在构建之前验证内核

时间:2012-10-24 09:05:57

标签: xcode opencl

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

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

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

AD网站没有可下载的项目,所以我不知道失败的原因(可能是我最有可能,或者网站假设步骤而没有提及)。

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

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

我已经在OCL购买了3本书(Gaster的OpenCL异构计算,Scarpino的OpenCL实战和Munshi的OpenCL编程指南),既没有提到如何设置Xcode,他们详细介绍了Visual Studio的设置,甚至是日食设置。

侧面;是否有任何应用程序能够在OCL应用程序中运行之前验证内核代码?

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

3 个答案:

答案 0 :(得分:12)

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

命令行的长答案:

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

我在这里使用默认编译器标志(请参阅https://developer.apple.com/library/mac/#documentation/Performance/Conceptual/OpenCL_MacProgGuide/ExampleHelloWorld/Example_HelloWorld.html)从Apple获取OpenCL Hello World示例,并显示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

就是这样。 Apple的示例代码中不会显示任何clCreateProgramWithBinaryclCreateProgramWithSource。一切都是通过openclc生成的mykernel.cl.c完成的。

答案 1 :(得分:6)

看来我能够以这种方式部分解决问题:

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

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

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

  • 指定内核文件所在的位置,对路径进行硬编码(仅仅说“my kernel.cl”是不够的; Xcode由于某些原因不能得到cl文件与main相同的目录,因此您必须在加载内核文件时指定路径)

在Apple开发者网站上使用示例代码时,我成功地使用了这些步骤。

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

答案 2 :(得分:0)

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

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

它会将foo.cl编译为LLVM位代码foo.bc。此二进制文件可与clCreateProgramWithBinary一起使用,速度高于clCreateProgramWithSource-arch的有效值为i386 x86_64 gpu_32