可以在iOS上使用OpenCL

时间:2013-09-17 10:21:55

标签: ios opencl

我在论坛Are either the IPad or IPhone capable of OpenCL?上找到了这个帖子,但它已经很老了。另外,我可以收集的是,OpenCL可用于iOS的系统库,但不适用于公共。在这方面有更多信息或任何更新吗?

2 个答案:

答案 0 :(得分:11)

即使将OpenCL用作私有框架,iOS上的也不会为您提供GPU (或其他类似DSP / FPGA,如果存在的话)的好处。它只是为您提供臂处理器上的多个内核。我运行以下代码来验证iOS和OS X中可访问的OpenCL设备。

iOS上的输出

  

ARM CPU设备

OS X上的输出

  

Radeon HD 4670
     英特尔(R)酷睿(TM)i3 CPU 540 @ 3.07GHz

排除错误检查的来源。使用OpenCL标头(1)并从(/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/PrivateFrameworks)链接OpenCL < / em>的

#include "OpenCL/cl.h"
#include <iostream>

cl_context_properties prop[] = { CL_CONTEXT_PLATFORM, 0, 0 };    
//get num of platforms
cl_uint num;
cl_int err = clGetPlatformIDs(0, 0, &num);


//get each platform
cl_platform_id *platforms = new cl_platform_id[num];
err = clGetPlatformIDs(num, platforms, &num);

//create context for platform
prop[1] = (cl_context_properties) platforms[0];
cl_context context = clCreateContextFromType(prop, CL_DEVICE_TYPE_ALL, NULL, NULL, &err);


//get num devices
size_t numDevices=0;
clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &numDevices);
cl_device_id *devices = new cl_device_id[ numDevices ];

//get every device
clGetContextInfo(context, CL_CONTEXT_DEVICES, numDevices, devices, 0);

//get info of every device
for( int idx=0; idx < numDevices; ++idx) {

    size_t bufSize=0;
    clGetDeviceInfo(devices[idx], CL_DEVICE_NAME, 0, NULL, &bufSize);
    if( bufSize > 0 ) {
        char* devName = new char[ bufSize ];
        clGetDeviceInfo(devices[idx], CL_DEVICE_NAME, bufSize, devName, 0);
        std::cout << "Device Name: " << devName << '\n';
    }
}

建议:截至目前,我们需要使用OpenGL(2)或Accelerate框架(3)。仍然不确定,出于什么原因/目的将OpenCL作为私有框架复制到iPhone上。

答案 1 :(得分:8)

仅通过私有API提供。

F.e。 https://github.com/linusyang/opencl-test-ios