0

私はATIRadeonMobility4800HDでUbuntuLucidを実行しています。3Dサポートは機能します(つまり、OpenGLアプリケーションは通常の速度で実行されます)が、OpenCLを使用しようとすると失敗します:

#include <CL/opencl.h>
#include <iostream>
#include <cstdlib>

#define CL_SAFE_CALL( call ) {                                                               \
    cl_int err = call; std::cerr << "EC: " << err << std::endl;                              \
    if(CL_SUCCESS != err){                                                                   \
      std::cerr << "Unsuccesful OpenCL call " << __FILE__ << " : " << __LINE__ << std::endl; \
      exit(EXIT_FAILURE);                                                    \
    } }

// OpenCL platform
cl_platform_id platform;

char* getPlatformInfo(cl_platform_id platform, cl_platform_info paramName){
  size_t infoSize = 0;
  CL_SAFE_CALL( clGetPlatformInfo(platform, paramName, 0, NULL, &infoSize) );
  char* info = (char*)malloc(infoSize);
  CL_SAFE_CALL( clGetPlatformInfo(platform, paramName, infoSize, info, NULL) );
  return info;
}

cl_platform_id createPlatform(){
  cl_platform_id platform;

  CL_SAFE_CALL( clGetPlatformIDs(1, &platform, NULL));
  std::cout << getPlatformInfo(platform, CL_PLATFORM_VERSION) << std::endl;
  return platform;
}

// OpenCL devices of the platform
cl_device_id device_id;

void* getDeviceInfo(cl_device_id device_id, cl_device_info paramName){
  size_t infoSize = 0;
  CL_SAFE_CALL( clGetDeviceInfo(device_id, paramName, 0, NULL, &infoSize) );

  char* info = (char*)malloc(infoSize);
  CL_SAFE_CALL( clGetDeviceInfo(device_id, paramName, infoSize, info, NULL) );
  return info;
}

cl_device_id createDevice(cl_platform_id platform, cl_device_type type){
  cl_device_id device_id;

  // THIS IS LINE 44:

  CL_SAFE_CALL( clGetDeviceIDs(platform, type, 1, &device_id, NULL) );

  cl_uint* max_compute_units = (cl_uint*)getDeviceInfo(device_id, CL_DEVICE_MAX_COMPUTE_UNITS);
  std::cout << "Max compute units: " << *max_compute_units << std::endl;

  return device_id;
}

int main(void){
  std::cerr << "createDevice:" << std::endl;
    platform = createPlatform();
  std::cerr << "createDevice:" << std::endl;
  device_id = createDevice(platform, CL_DEVICE_TYPE_GPU);
}

以下:

~$ g++ -o test test.cc -lOpenCL
~$ ./test
createDevice:
EC: 0
EC: 0
EC: 0
OpenCL 1.2 AMD-APP (923.1)
createDevice:
EC: -1
Unsuccesful OpenCL call test.cc : 44

インストールからlibOpenClを取得し、opencl-headersをapt-getしました。助言がありますか?

4

1 に答える 1

1

のエラーコードは-1実際には意味CL_DEVICE_NOT_FOUNDします(参照用にinclude \ CLフォルダーのcl.hを調べてください)。これはいくつかのことを意味するかもしれません:

  • あなたのGPUビデオドライバーは何ですか?OpenCLをまったくサポートしていないかどうかを確認してください。
  • あなたのドライバーは最新ですか?最新バージョンを使用しているかどうかを確認してください。
于 2012-05-14T14:57:35.187 に答える