我正在查看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设置甚至是eclipse设置.
在一边; 是否有任何应用程序能够在OCL应用程序中运行之前验证内核代码?
提前感谢您提出的任何建议.
小智 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
Run Code Online (Sandbox Code Playgroud)
这将创建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
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,构建应用程序本身:
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
Run Code Online (Sandbox Code Playgroud)
就是这样.您将看不到任何clCreateProgramWithBinary或clCreateProgramWithSourceApple的示例代码.一切都是通过生成的mykernel.cl.c完成的openclc.
小智 6
所以我似乎能够以这种方式部分解决问题:
创建一个空项目,创建一个main.c文件和一个内核文件
创建目标作为控制台应用程序
在构建设置中,添加OpenCL框架(如果将正确添加,您将看到它出现在左窗格中的文件浏览器上).
指定内核文件所在的位置,硬编码路径(仅仅说"my kernel.cl"是不够的; Xcode由于某些原因没有得到cl文件与主文件在同一个目录中,所以你必须在加载内核文件时指定路径)
我在使用Apple开发人员站点上的示例代码时成功使用了这些步骤.
我很确定还有其他方法可以做到这一点,但至少这可能有助于像我这样的人不知道如何开始.