2016-08-28 12 views
0

Eclipse CDT(Mars)とintel_sdk_for_opencl_setup_6.1.0.1600に基づいてWindows 10でOpenCLアプリケーションを開発しています。私のコンピュータのデバイスは以下の通りです:intelを使用しているため、OpenCLコードがクラッシュするOpenCL.lib

OS:Windowsの10プロ CPU:I7-5500U ドライバ:

問題をwin64_15407.4279.exe:コードはEclipseのCDTで正常にビルドされているが、それはEclipse CDTで - >ローカルC/C++アプリケーションとして実行しているときにクラッシュしてハングします。実際には、OpenCL.lib(Intel OpenCL SDKから来て、C:\ Program Files(x86)\ Intel \ OpenCL SDK \ 6.1 \にあるファイルを置き換えることで、同じIDEとOSでビルドして正常に実行できます) lib \ x64 \ OpenCL.lib)をAMD OpenCL SDK(*** \ AMD APP \ lib \ x64 \ OpenCL.lib)の対角に置き換えます。

ファイル(C:\ Program Files(x86)\ Intel \ OpenCL SDK \ 6.1 \ lib \ x64 \ OpenCL.lib)を(*** \ AMD APP \ lib \ x64 \ OpenCL.lib)どのようにすれば、ネイティブintel_sdk_for_opencl_setup_6.1.0.1600とEclipse CDTを使用してコードを正常に実行できますか?

#include <stdio.h> 
#include <stdlib.h> 
#include<CL/cl.h> 

int main(int argc, char *argv[]) { 
    cl_uint err; 
    cl_uint num_platform; 
    cl_platform_id *platform; 

    err = clGetPlatformIDs(0, NULL, &num_platform); 
    if (CL_SUCCESS == err) 
     printf("Number of Detected OpenCL platforms: %d\n\n", num_platform); 
    else 
     printf("Error calling clGetPlatformIDs. Error code: %d \n", err); 

    platform = (cl_platform_id *) malloc(sizeof(cl_platform_id) * num_platform); 

    err = clGetPlatformIDs(num_platform, platform, NULL); 
    size_t size; 

    for (cl_uint i = 0; i < num_platform; i++) { 

     err = clGetPlatformInfo(platform[i], CL_PLATFORM_NAME, 0, NULL, &size); 
     char *PName = (char *) malloc(size); 
     err = clGetPlatformInfo(platform[i], CL_PLATFORM_NAME, size, PName,NULL); 
     printf("PName:%s\n", PName); 

     err = clGetPlatformInfo(platform[i], CL_PLATFORM_VENDOR, 0, NULL,&size); 
     char *PVendor = (char *) malloc(size); 
     err = clGetPlatformInfo(platform[i], CL_PLATFORM_VENDOR, size, PVendor,NULL); 
     printf("PVendor:%s\n", PVendor); 

     err = clGetPlatformInfo(platform[i], CL_PLATFORM_VERSION, 0, NULL,&size); 
     char *PVersion = (char *) malloc(size); 
     err = clGetPlatformInfo(platform[i], CL_PLATFORM_VERSION, size,PVersion, NULL); 
     printf("PVersion:%s\n", PVersion); 
     printf("i=%d err=%d\n\n", i, err); 
    } 
    return 0; 
} 

答えて

0

どこがクラッシュしますか? OpenCLコールの1つで? clGetPlatformIDsのクラッシュは、さまざまな理由(OpenCL.dllの不良ベンダーのディストリビューションを含む)で見られました。 Windowsでは、OpenCL.libはOpenCL.dllの静的ラッパーであり、KhronosがOpenCL ICD(インストール可能なクライアントドライバー、インストールされているすべてのベンダードライバーのトランポリン)として配布するものと同じです。しかし、一部のベンダーはそれらを変更します(たとえば、NVIDIAのバージョンが必要なNVIDIA Nsightのトレースを行うため)。だから私はあなたのためにクラッシュする理由を説明することはできませんが、私は自信を持って非衝突のもののためにクラッシュするものを交換することができ、うまくいくと言うことができます。

+0

まず、IntelのOpenCL.dllをAMDのOpenCL.dllで置き換えるのは効果的な解決策です。第2に、オフィシャルソリューションhttps://software.intel.com/en-us/forums/opencl/topic/676363?language=ruに関するトピックがあります – chengzi

関連する問題