我有一個使用OpenCL內建平方根函數(sqrt)的內核,但是當我嘗試在GPU上運行內核時,出現無法識別的命令錯誤,如果我使用浮動但它使用雙打時不起作用,它工作正常。我在Mac OS X 10.7.5上運行,而我的顯卡是ATI Radeon HD 6750顯卡。在OpenCL中使用平方根函數(sqrt)和雙打
有誰知道這個問題可能是什麼?
我有一個使用OpenCL內建平方根函數(sqrt)的內核,但是當我嘗試在GPU上運行內核時,出現無法識別的命令錯誤,如果我使用浮動但它使用雙打時不起作用,它工作正常。我在Mac OS X 10.7.5上運行,而我的顯卡是ATI Radeon HD 6750顯卡。在OpenCL中使用平方根函數(sqrt)和雙打
有誰知道這個問題可能是什麼?
顯然你的GPU不支持雙精度浮點數: http://clbenchmark.com/device-environment.jsp?config=12011396
AMD顯卡確實支持雙報告擴展:cl_khr_fp64(或cl_amd_fp64)。
你可以檢查在OpenCL的編譯時這樣說:
#ifdef cl_khr_fp64
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
#elif defined(cl_amd_fp64)
#pragma OPENCL EXTENSION cl_amd_fp64 : enable
#else
#error "Double precision floating point not supported by OpenCL implementation."
#endif
或者你也可以檢查,但不運行的OpenCL編譯這樣:
status = clGetDeviceInfo (oclInfo->device, CL_DEVICE_DOUBLE_FP_CONFIG, sizeof configFp64, &configFp64, NULL);
哇,從來沒有想過該代碼卡沒有雙精度支持。我認爲這對於DX11/GL4是強制性的。但維基百科也同意你的觀點。 –
根據您的OpenCL版本(特別是在CL 1.1和以下),你可能需要在你的內核中使用''雙精度''#pragma OPENCL EXTENSION cl_khr_fp64:enable'。 –
即使在我的內核文件的頂部添加該擴展沒有什麼區別我仍然得到以下構建錯誤函數調用未聲明的函數'_Z9__cl_sqrtd' – rjs