Подтвердить что ты не робот

Доступен OpenCL на iOS

Я нашел эту тему на форуме Являются ли IPad или IPhone способными OpenCL?, но он довольно старый. Кроме того, я могу собрать, что OpenCL доступен для системных библиотек iOS, но не для публики. Есть ли дополнительная информация в этом отношении или какое-либо обновление?

4b9b3361

Ответ 1

Даже при использовании OpenCL в качестве частной структуры на iOS он не даст вам преимуществ GPU (или других, таких как DSP/FPGA, если они есть). Это просто дает вам несколько ядер, доступных на ручном процессоре. Я выполнил приведенный ниже код, чтобы проверить устройства OpenCL, доступные в iOS и OS X.

Вывод на iOS

Устройство CPU ARM

Вывод на OS X

Radeon HD 4670
   Intel (R) Core (TM) i3 CPU 540 @3,07 ГГц

Исключен исходный код с проверкой ошибок. Использование доступных заголовков OpenCL (1) и связывание OpenCL с (/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/PrivateFrameworks)

#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) или ускорить фреймворк (3). Все еще не уверен, по какой причине/цели OpenCL копируется как частная фреймворк на iPhone.