0
我在OpenCL中編寫了一個光線跟蹤程序,並且在我的內核中有一個函數,Quadratic,它接收3個浮點變量和兩個指向浮點值的指針。在OpenCL內核中通過指針訪問變量
功能:
bool Quadratic(float A, float B, float C, float *t0, float *t1) {
float discrim = B * B - (4.0 * A * C);
if (discrim <= 0.0) return false;
float rootDiscrim = sqrtf(discrim);
float q;
if (B < 0) q = -0.5f * (B - rootDiscrim);
else q = -0.5f * (B + rootDiscrim);
*t0 = q/A;
*t1 = C/q;
float temp;
return true;
}
調用該函數:
float t0;
float t1;
if (Quadratic(A, B, C, &t0, &t1)) c[(i*dimy)+j] = t0;
else c[(i*dimy)+j] = 0.0;
產生以下錯誤:
pyopencl.RuntimeError: clBuildProgram failed: build program failure -
Build on <pyopencl.Device 'ATI Radeon HD 6750M' on 'Apple' at 0x1021b00>:
Error returned by cvms_element_build_from_source
在努力工作,出了什麼問題,我創建了以下測試功能似乎工作:
bool TestFunc(float Y, float *x) {
*x = Y;
return true;
}
float x;
if (TestFunc(50.0, &x)) c[(i*dimy)+j] = x;
據我可以看到這兩個函數具有相同類型的輸入和輸出,任何幫助將不勝感激。
使用clGetProgramBuildInfo()獲取錯誤的詳細信息。這直接指向像「sqrt()not defined」這樣的問題。 – DarkZeros