1
yezi47 2013-08-06 20:46:55 +08:00
你好,我是新手,我想问下你是用什么软件编写的代码 ,和如何移植到ios上的?用的什么工具?
|
2
linusyang OP @yezi47 其实就是很简单的 C 语言程序,当时是用 Xcode 写的,移植的话用 iOS SDK 的工具链,交叉编译一下就可以跑了。OpenCL 目前还是私有库,因为存在 JIT、动态代码的问题,是 Apple 的禁区,目前开放的可能性不大,只是给 Apple 自家的系统程序加速。
|
3
CocoaBob 2013-09-25 18:43:31 +08:00
搜索iOS上OpenCL信息的时候找到这篇文章,针对Xcode 5做了一些修改,最终在iPhone上跑起来了~但有报错,不得不留言麻烦linusyang兄看看~
makefile里的一些配置,在Xcode 5里有所改变,主要是安装Command Line Tools之后,路径变了,现在的配置是: CC = /usr/bin/clang LD = /usr/bin/ld LDID = /usr/local/bin/ldid CFLAGS = -arch armv7 -Os -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/ -I./include -framework OpenCL -miphoneos-version-min=3.0 -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/ -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk 其中ldid需要自己在网上找一下。 但我不知道怎么用make之后的binary……最终还是用Xcode 5来测试~ 具体操作是: 1,新建一个项目。 2,删掉AppDelegate等ObjC的文件,删掉main.m,删掉UnitTest相关文件。 3,将include文件夹、endianness.c和transmission.c添加到项目 4,在项目Target设置的Header Search Paths里面,添加include目录所在路径 5,endianness.c、transmission.c这两个文件,只要有一个勾上Target Membership即可。 6,然后真机运行测试。 我遇到的报错分别是: [OpenCL Endianness Demo - Linus Yang] [Device: ARM CPU Compute Device] Error: Failed to build program executable! <program source>:9:9: warning: comparison of integers of different signs: 'int' and 'const unsigned int' if(i < count) ~ ^ ~~~~~ [OpenCL Transmission Demo - Linus Yang] [Device: ARM CPU Compute Device] Step 1: 15.063000 ms, 531.102702 MB/s Error: Failed to build program executable! <program source>:8:9: warning: comparison of integers of different signs: 'int' and 'const unsigned int' if(i < count) ~ ^ ~~~~~ 我对OpenCL完全陌生,不知道该怎么处理这些错误。如果linusyang兄有时间的话,请指点一二~ |
4
CocoaBob 2013-09-25 19:09:55 +08:00
@CocoaBob 对了,试过加上或去掉unsigned,只是少了最后的warning,Error依然存在。
稍微看了一下文档,clBuildProgram返回值是-11,即CL_BUILD_PROGRAM_FAILURE。而clGetProgramBuildInfo没有返回任何细节…… |
5
linusyang OP @CocoaBob 不好意思刚看到。是我的问题,之前写得 Makefile 太老了,刚才抽空更新了一下,应该可以适配 Xcode 5.0 了,试试看?
|
6
CocoaBob 2013-09-26 06:10:00 +08:00
@linusyang 非常感谢,我这还没到第二天呢,答复非常及时~目前手头iPhone、iPad都升级到了iOS 7,未越狱状态下应该无法ssh了对吧?不知道有没有其他方法来测试这两个程序?目前我的解决方法是在Xcode里新建个项目,用付费的开发者账户code sign后再真机调试……不过遇到了上面所述的error,也许是项目设置问题。先去休息了,明天再研究研究~
|
8
chen2308 2013-09-26 16:08:29 +08:00
Hi,我发现你文中有个小错误:
“(可以看出,第二个测试用 CPU 跑反而快一点,因为 CPU 用的是 __builtin_bswap64,调用内置的指令集做运算,性能不是很好的 GPU 比不过 CPU 的。)” 在iphone 5s之前的sgx gpu根本不支持OpenCL,你这边得到的时间其实都是CPU时间。 另外,我发现在5S上也不支持GPU,估计是驱动还没有准备好。 |
9
linusyang OP @chen2308 那就怪了,难道是 iOS 的 OpenCL 库直接调用 CPU 运算的么?我也不是很清楚啊。貌似程序编译以后可以正常执行 OpenCL 库的那些函数: https://github.com/downloads/linusyang/opencl-test-ios/Test-iPad2.png
|