2016-10-22 13 views
0

私はMac Proでダブルデータ型を使用して作成したプロジェクトを持っています。今私は自分のプロジェクトをMacBook Airに移してくれました。OpenCL倍精度が動作しない

Exception 
ERROR: clBuildProgram(-11) 

エラーです。これは、MacBook AirがOpenCLで倍精度タイプをサポートしていないからです。しかし逆に、私はこれを見つけました:Mac OSX上でOpenCLカーネルエラーが発生しました。私はこのように答えた方法を適用:

cl_device_fp_config cfg; 
clGetDeviceInfo(devicesIds[0], CL_DEVICE_DOUBLE_FP_CONFIG, sizeof(cfg), &cfg, NULL); // 0 is for the device number I guess? 
printf("Double FP config = %llu\n", cfg); 

そして、彼は結果が0であれば、それは倍精度がサポートされていないことを意味していると説明しました。

Double FP config = 63 

は、私もこの方法で試してみました:しかし、私はこの結果を得る

if (!cfg) { 
    printf("Double precision not supported \n\n"); 
} else { 
    printf("Following double precision features supported:\n"); 

    if(cfg & CL_FP_INF_NAN) 
     printf(" INF and NaN values\n"); 

    if(cfg & CL_FP_DENORM) 
     printf(" Denormalized numbers\n"); 

    if(cfg & CL_FP_ROUND_TO_NEAREST) 
     printf(" Round To Nearest Even mode\n"); 

    if(cfg & CL_FP_ROUND_TO_INF) 
     printf(" Round To Infinity mode\n"); 

    if(cfg & CL_FP_ROUND_TO_ZERO) 
     printf(" Round To Zero mode\n"); 

    if(cfg & CL_FP_FMA) 
     printf(" Floating-point multiply-and-add operation\n\n"); 
} 

をそして私は次の結果を得た:ここで何が起こっているか

Double FP config = 63 
Following double precision features supported: 
    INF and NaN values 
    Denormalized numbers 
    Round To Nearest Even mode 
    Round To Infinity mode 
    Round To Zero mode 
    Floating-point multiply-and-add operation 

?私のシステムはOpenCLで倍精度をサポートしているのですか?はいの場合は、どうすれば有効にして使用できますか?そうでない場合は、私の選択肢は何ですか? 今私は非常に混乱しています。まず、MacBook Airが倍精度をサポートしているかどうかはわかりません。明らかにそうではありません。しかし、アウトプットではそうなるようです。

倍精度をサポートしていない場合、どうすればよいですか?私は値を浮動させる私のプロジェクトのすべてを変更する必要がありますか?そうしたら、どうやって有効にするのですか?私は多くのチュートリアルとサンプルをたどっていて、どれもうまくいきませんでした。例えばhttps://streamcomputing.eu/blog/2013-10-17/writing-opencl-code-single-double-precision/しかし、それらのどれもうまくいかないようです。

EDIT:残念ながらdoubleサポートがOpenCLで「オプション」である

+0

「CL_BUILD_PROGRAM_FAILURE」という-11の理由は、デバイスが倍精度をサポートしていないことをどのように知っていますか? CLビルドログを投稿してください。 'clGetProgramBuildInfo'でそれを取得できます。 – maZZZu

+0

私は2倍のせずに非常に最小のカーネルを使用したので、完璧に働いた。しかし、私がカーネルにダブルを導入するとすぐに、このエラーが出ました。ダブルスがうまくいかない理由についての私の研究を心配しないでください。私はここ数週間、この問題でここで立ち往生しています。 –

+0

あなたのシステムにどのデバイス0があるのか​​わからなくても、ドライバのバグかどうかを知ることは難しいです。また、ビルドログを提供してください。関数 'clGetProgramBuildInfo'を使用することができます。あなたが最小限のカーネルのコードを投稿できれば、それも役に立ちます。 – chippies

答えて

1

、いくつかのデバイスがそれをサポートし、いくつかはしないでください...
デバイスがdoubleをサポートしている場合は、デバイスの拡張(CL_DEVICE_EXTENSIONS)がcl_khr_fp64かが含まれていますcl_khr_fp64

倍精度浮動小数点数を使用できない場合は、浮動小数点数を使用するいくつかの例のカーネルコードhereがあります。