私はフォーラムでこのスレッドを見つけました IPadまたはIPhoneのどちらかがOpenCLに対応していますか? しかしそれはかなり古いです。また、OpenCLはiOSのシステムライブラリで利用できますが、公開されていないことを私は収集できます。この点または更新に関する詳細情報はありますか?
プライベートフレームワークとしてOpenCL
を使用しても、iOSではGPU(またはDSP/FPGAなど)のメリットは得られません。存在する場合)。アームプロセッサで利用可能な複数のコアを提供するだけです。以下のコードを実行して、iOSおよびOSXでアクセス可能なOpenCLデバイスを確認しました。
iOSでの出力
ARMCPUデバイス
OS Xでの出力
Radeon HD 4670
Intel(R)Core(TM)i3 CPU 540 @ 3.07GHz
エラーチェックが除外されたソース。利用可能な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 )またはAccelerateフレームワーク()のいずれかを使用する必要があります。まだわかりませんが、どのような理由/目的でOpenCLがiPhoneのプライベートフレームワークとしてコピーされます。
プライベートAPIを介してのみ利用できます。