我正在OpenCL中编写一个光线跟踪程序,我的内核中有一个函数Quadratic,它接收3个浮点变量和两个浮点值指针。
功能:
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;
据我所知,两种功能都有相同类型的输入和输出,我们将非常感谢任何帮助。
答案 0 :(得分:0)
事实证明问题在于使用sqrtf
。一旦更改为sqrt
,它就能完美运行。