2016-12-13 10 views
0

私はEC2インスタンスを持っています。clGetDeviceIDs(-32)。 Nvidia GRID GPU(Kepler GK104)を使用したec2インスタンスのOpenCLエラー

g2.2xlarge Instance. 
Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz 
NVIDIA GRID GPU (Kepler GK104) with 
Ubuntu 14.04 - 64 bit. 

この次の後: https://stackoverflow.com/a/41103241/1900929を、私はhttps://developer.nvidia.com/cuda-downloadsからCUDAツールキット8.0をインストールし、それは仕様があるのです。私も"clinfo"をインストールしました。

は、それから私は、OpenCLの状態をチェックするためにclinfoを走った - ITは、次の出力で働いていた:

clinfo: /usr/local/cuda-8.0/targets/x86_64-linux/lib/libOpenCL.so.1: no version information available (required by clinfo) 

Platform Version:    OpenCL 1.2 CUDA 8.0.46 
Platform Name:     NVIDIA CUDA 
Platform Vendor:     NVIDIA Corporation 

Number of devices:    1 
    Device Type:     CL_DEVICE_TYPE_GPU 
    Name:       GRID K520 
    Vendor:      NVIDIA Corporation 
    Device OpenCL C version:  OpenCL C 1.2 
    Driver version:    367.57 
    Profile:      FULL_PROFILE 
    Version:      OpenCL 1.2 CUDA 
//with other info too which I can paste if required. 

この時点で私はそれにもかかわらずOpenCLのが働いているので、私のプログラムも動作しますので、。だから、私はOpenCL(C++ラッパー)を使用して私のプログラムを移動しました。しかし、それは私に次のエラーを与えた: - AN INVALIDプラットフォームが、それはGPUの問題だ場合、今私は知らない

を与えられている場合

clGetDeviceIDs(-32) 

このエラーはCL_INVALID_PLATFORMを参照します - NVIDIA GRID GPU(ケプラーGK104)。あるいは、インテル(R)Xeon(R)CPUを最初のプラットフォームとして採用しようとしている場合。

これは私にエラーを与えるコードスニペットです:

try { 
    // Create a "platforms" vector. 
    std::vector<cl::Platform> platforms; 
    // Get all the platforms 
    cl::Platform::get(&platforms); 
    // Create an array of platforms to save the platforms in. 
    cl::Platform * platform = new cl::Platform[platforms.size()]; 

    // Create a "devices" vector. 
    std::vector<cl::Device> devices; 
    // Get all the "devices" for each "platform" 
    for (int platformCounter = 0; platformCounter < platforms.size(); platformCounter++) { 
     platform[platformCounter].getDevices(CL_DEVICE_TYPE_GPU, &devices); 
    } 
} 

エラーの考えられる理由何ができますか?

答えて

2

なぜcl::Platform * platform = new cl::Platform[platforms.size()];を作成しますが、それに値を入れずにデバイスを取得するのはなぜですか? ループ内でプラットフォームを直接使用できます。

for (int platformCounter = 0; platformCounter < platforms.size(); platformCounter++) { 
     platforms[platformCounter].getDevices(CL_DEVICE_TYPE_GPU, &devices); 
    } 
+0

確かに、それは質問に答えません。 –

+0

プラットフォーム[platformCounter]を使用すると、デバイスを取得するための初期化されていないプラットフォームIDが与えられているため、CL_INVALID_PLATFORMエラーが発生します。 –

+0

プラットフォーム[1] .getDevices(CL_DEVICE_TYPE_GPU、&devices)を使用する必要があります。 ? –

関連する問題