因此,我有一個項目,我使用雙數據類型在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/但他們都沒有工作。
編輯:
你怎麼知道-11換句話說'CL_BUILD_PROGRAM_FAILURE'的原因是設備不支持雙打?請發佈您的CL構建日誌。你可以用'clGetProgramBuildInfo'獲取它。 – maZZZu
因爲當我使用一個非常小的內核而沒有雙打時,它工作得很完美。但是一旦我在內核中引入了一個double,它就給了我這個錯誤。不要擔心我爲什麼雙打不工作的研究是基於堅實的觀察。現在我一直在這個問題上陷入困境。 –
不知道您的系統上有哪些設備0,很難知道這是否是驅動程序中的錯誤。另外,請提供構建日誌 - 您可以使用函數'clGetProgramBuildInfo'。如果你可以發佈最小內核的代碼,那也有幫助。 – chippies