意外发现 iOS 5.1.1 的私有框架 (Private Frameworks) 里竟然有 OpenCL,于是就是试着把以前课上要求写的两个简单的 OpenCL 测试小程序移植到 iOS 上去。
一个是在内存和显存中传输数据,并测出内存到内存、内存到显存、显存到显存和显存到内存传输消耗时间;另一个是转换 64 位无符号整数大端小端法表示。程序是 C 语言写的,源代码和 iOS 上的二进制可以在这里找: https://github.com/linusyang/opencl-test-ios 。写得比较锉,测试的误差也可能比较大,见笑了。:)
程序可以跨平台,以前在 OS X 和 Windows 上跑过。现在我用 iOS 5.1 SDK 提供的 Clang 编译,分别在 iPhone 4 和 iPad 2 上跑了一下,截图如下:
iPhone 4: https://github.com/downloads/linusyang/opencl-test-ios/Test-iPhone4.png
iPad 2: https://github.com/downloads/linusyang/opencl-test-ios/Test-iPad2.png
(可以看出,第二个测试用 CPU 跑反而快一点,因为 CPU 用的是 __builtin_bswap64,调用内置的指令集做运算,性能不是很好的 GPU 比不过 CPU 的。)
结果发现 iOS 上用 OpenCL 做并行计算还是很有潜力的,速度不赖。iPhone 4 的显卡比较老了体现不出来,iPad 2 的明显好很多,估计用 iPad 3 测就更厉害了。现在 OpenCL 还处于不公开状态,App Store 里自然不会有程序去用,不知道 Cydia 里有没有程序已经用上了 OpenCL。现在 ARM 平台的显卡还比较鸡肋,以后有了更好的设备,移动并行计算或许能流行起来也说不定啊。
一个是在内存和显存中传输数据,并测出内存到内存、内存到显存、显存到显存和显存到内存传输消耗时间;另一个是转换 64 位无符号整数大端小端法表示。程序是 C 语言写的,源代码和 iOS 上的二进制可以在这里找: https://github.com/linusyang/opencl-test-ios 。写得比较锉,测试的误差也可能比较大,见笑了。:)
程序可以跨平台,以前在 OS X 和 Windows 上跑过。现在我用 iOS 5.1 SDK 提供的 Clang 编译,分别在 iPhone 4 和 iPad 2 上跑了一下,截图如下:
iPhone 4: https://github.com/downloads/linusyang/opencl-test-ios/Test-iPhone4.png
iPad 2: https://github.com/downloads/linusyang/opencl-test-ios/Test-iPad2.png
(可以看出,第二个测试用 CPU 跑反而快一点,因为 CPU 用的是 __builtin_bswap64,调用内置的指令集做运算,性能不是很好的 GPU 比不过 CPU 的。)
结果发现 iOS 上用 OpenCL 做并行计算还是很有潜力的,速度不赖。iPhone 4 的显卡比较老了体现不出来,iPad 2 的明显好很多,估计用 iPad 3 测就更厉害了。现在 OpenCL 还处于不公开状态,App Store 里自然不会有程序去用,不知道 Cydia 里有没有程序已经用上了 OpenCL。现在 ARM 平台的显卡还比较鸡肋,以后有了更好的设备,移动并行计算或许能流行起来也说不定啊。