2013-09-26 3 views
0

OpenCL에 raytracing 프로그램을 작성하고 있으며, 3 개의 부동 변수와 2 개의 부동 소수점 값을 취하는 제 2 차 함수의 커널이 있습니다.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; 
} 

호출 기능 : 문제가 나는 다음과 같은 테스트를 만든 것을 해결하려고 노력에서

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 

:

float t0; 
float t1; 
if (Quadratic(A, B, C, &t0, &t1)) c[(i*dimy)+j] = t0; 
else c[(i*dimy)+j] = 0.0; 

다음과 같은 오류를 생성합니다 작동하는 기능 :

bool TestFunc(float Y, float *x) { 
    *x = Y; 
    return true; 
} 

float x; 
if (TestFunc(50.0, &x)) c[(i*dimy)+j] = x; 

두 기능 모두 동일한 유형의 입출력을 가지고있는 것을 볼 수 있지만, 모든 도움이 크게 감사하겠습니다.

+1

clGetProgramBuildInfo()를 사용하여 오류의 세부 정보를 가져옵니다. 이것은 "sqrt() not defined"와 같은 문제를 직접 지적합니다. – DarkZeros

답변

0

sqrtf을 사용하여 문제가 발생했습니다. sqrt으로 변경되면 완벽하게 작동합니다.

관련 문제