如何设置Xcode来运行OpenCL代码,以及如何在构建之前验证内核
我正在查看苹果网站上的官方文档,我发现有一个关于如何在Xcode上使用OpenCL的快速入门 也许只有我一个人,但我没有运气构建“hello world OCL”部分提到的代码 我启动了Xcode并创建了一个空项目;创建了一个main.c和一个.cl内核文件,粘贴了Apple开发者网站上的内容,我无法获得任何要构建的内容,即使在添加了一个目标之后 该广告网站没有可下载的项目,因此我对失败的原因一无所知(很可能是我,或者该网站假设了一些步骤,但没有提及这些步骤) 我还尝试了macresearch.org的示例项目,但是它们非常古老,第三课中的测试项目根本没有运行 现在,我很确定其他人正在使用Xcode运行OCL代码,但是我找不到任何一个页面(除了前面提到的macresearch.org)可以清楚地说明如何使用OCL运行Xcode项目。有没有人知道如何使用OCL和Xcode的教程 我已经购买了3本关于OCL的书(Gaster的异构计算与OpenCL、Scarpino的OpenCL和Munshi的OpenCL编程指南),都没有提到如何设置Xcode,但它们详细介绍了visual studio设置,甚至eclipse设置 在侧面;是否有任何应用程序能够在OCL应用程序中运行内核代码之前对其进行验证如何设置Xcode来运行OpenCL代码,以及如何在构建之前验证内核,xcode,opencl,Xcode,Opencl,我正在查看苹果网站上的官方文档,我发现有一个关于如何在Xcode上使用OpenCL的快速入门 也许只有我一个人,但我没有运气构建“hello world OCL”部分提到的代码 我启动了Xcode并创建了一个空项目;创建了一个main.c和一个.cl内核文件,粘贴了Apple开发者网站上的内容,我无法获得任何要构建的内容,即使在添加了一个目标之后 该广告网站没有可下载的项目,因此我对失败的原因一无所知(很可能是我,或者该网站假设了一些步骤,但没有提及这些步骤) 我还尝试了macresearch.
提前感谢您提供的任何建议。要回答问题的第二部分,在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\u 64 gpu\u 32
因此,我似乎能够通过以下方式部分解决此问题:
- 创建一个空项目,创建一个main.c文件和一个内核文件
- 将目标创建为控制台应用程序
- 在构建设置中,添加OpenCL框架(如果添加正确,您将看到它出现在左窗格的文件浏览器中)
- 指定内核文件所在的位置,对路径进行硬编码(仅仅说“my kernel.cl”是不够的;Xcode由于某些原因无法得到cl文件与主文件位于同一目录中,因此在加载内核文件时必须指定路径)
clCreateProgramWithSource
,只需编写内核并从应用程序调用它,不过还需要一些额外的编译步骤
我在这里使用苹果的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
这将创建两个文件,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的示例代码中,您不会看到任何
clCreateProgramWithBinary
或clCreateProgramWithSource
。一切都是通过mykernel.cl.c完成的,由openclc
生成,非常感谢Eric!这将是有用的!谢谢你的回答。您能告诉我让gcc/llvm使用opencl库编译opencl代码与您描述的方法有什么不同吗?