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

标签 xcode opencl

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

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

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

AD站点没有要下载的项目,所以我对失败的原因一无所知(最有可能是我,或者站点采取了步骤而没有提及它们)。

我也试过 macresearch.org 上的示例项目,但是它们很古老,而且第三课中的测试项目根本没有运行。

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

我已经购买了 3 本书关于 OCL(Gaster's Heterogeneous computing with OpenCL、Scarpino's OpenCL in action 和 Munshi's OpenCL 编程指南),但都没有提到如何设置 Xcode,而他们详细介绍了 Visual Studio 设置甚至 Eclipse 设置.

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

预先感谢您提出的任何建议。

最佳答案

简答: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

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

关于xcode - 如何设置 Xcode 以运行 OpenCL 代码,以及如何在构建前验证内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13046035/

相关文章:

c++ - 编译器标志 -l 的位置

opencl - 在 OpenCl 中获取二维的全局 ThreadId

c - 包含 header OpenCL(32 位与 64 位)

ios - 新iPhone,无法进行测试吗?

ios - 在代码中更改大小分类约束的常量,但它恢复为 Storyboard 值

ios - 线程 5 : EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) - 从 'Result<AnyObject>' 转换为无关类型 'NSDictionary' 总是失败

java - 在 JOCL 中将 int 作为内核参数传递

ios - UISlider 自定义缩略图图像大小调整问题

objective-c - 在 Objective-C 中创建两个线程

opencl - OpenCL 中的障碍