首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置Xcode以运行OpenCL代码,以及如何在构建之前验证内核

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

Stack Overflow用户
提问于 2012-10-24 17:05:57
回答 3查看 13.5K关注 0票数 14

我正在看苹果网站上的官方文档,我看到了关于如何在Xcode上使用OpenCL的快速入门。

也许只有我,但我没有机会构建"hello world OCL“部分中提到的代码。

我已经启动了Xcode并创建了一个空项目;创建了一个main.c和一个.cl内核文件,粘贴了苹果开发人员站点上的内容,但我无法获得要构建的任何内容,即使添加了一个目标。

AD站点没有要下载的项目,所以我不知道失败的原因(很可能是我,或者站点假定了步骤而没有提到它们)。

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

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

我已经买了3本关于OCL的书(Gaster的《使用OpenCL进行异构计算》、斯卡皮诺的《OpenCL实际操作》和Munshi的《OpenCL编程指南》),没有提到如何设置Xcode,而是详细介绍了visual studio甚至eclipse的设置。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-29 06:00:57

因此,我似乎能够通过这种方式部分解决这个问题:

  • 创建一个空项目,创建一个main.c文件和一个内核文件
  • 在构建设置中创建一个目标作为控制台应用程序
  • ,添加OpenCL框架(您将看到它出现在文件浏览器的左侧窗格中,如果它将被添加到内核文件所在的位置,则硬编码路径(仅说"my kernel.cl“是不够的;由于某些原因,Xcode没有得到cl文件与主文件在同一目录中,因此您必须在加载内核文件时指定路径)

在使用Apple developer站点上的示例代码时,我成功地使用了这些步骤。

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

票数 6
EN

Stack Overflow用户

发布于 2013-02-06 08:32:42

简短的回答: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)从苹果公司获得Xcode Hello World示例,并展示了OpenCL将在后台执行的步骤。

要开始使用,请执行以下操作:

代码语言:javascript
复制
/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完成了将内核加载到应用程序中的所有魔术)。接下来,您需要编译内核:

代码语言:javascript
复制
/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

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

代码语言:javascript
复制
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

就是这样。在苹果的示例代码中,您将看不到任何clCreateProgramWithBinaryclCreateProgramWithSource。一切都是通过openclc生成的mykernel.cl.c完成的。

票数 13
EN

Stack Overflow用户

发布于 2012-10-26 09:03:05

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

代码语言:javascript
复制
/System/Library/Frameworks/OpenCL.framework/Libraries/openclc \
    -c -Wall -emit-llvm -arch gpu_32 -o foo.bc foo.cl

它会将foo.cl编译成LLVM位码foo.bc。这个二进制文件可以与比clCreateProgramWithSource更快的clCreateProgramWithBinary一起使用。-arch的有效值为i386 x86_64 gpu_32

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13046035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档