error语言 - 11 OpenCL

error -11 OpenCL

本文关键字:OpenCL 语言 error      更新时间:2023-10-16

这一行出现了-11错误

checkerror(clBuildProgram(program, deviceidcount, deviceids.data(), nullptr, nullptr, nullptr));

我的内核是

__kernel void render(double playerx,double playery,double playerz,double yaw,double pitch,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3,__global int* texture){
    //const int i = get_global_id(0);
    //x[i] = a*x[i];
    //x[i] = cos(a);
    x1 = x1-playerx;
    y1 = y1-playery;
    z1 = z1-playerz;
    x2 = x2-playerx;
    y2 = y2-playery;
    z2 = z2-playerz;
    x3 = x3-playerx;
    y3 = y3-playery;
    z3 = z3-playerz;
    double smallyaw = yaw - M_PI_2;
    double bigpitch = pitch + M_PI_2;
    double screenx1 = cos(smallyaw)*cos(pitch)*x1 + sin(smallyaw)*cos(pitch)*y1 + sin(pitch)*z1;
    double screeny1 = cos(yaw)*cos(bigpitch)*x1 + sin(yaw)*cos(bigpitch)*y1 + sin(bigpitch)*z1;
    double screenz1 = cos(yaw)*cos(pitch)*x1 + sin(yaw)*cos(pitch)*y1 + sin(pitch)*z1;
    printf(screenx1);
    printf(screeny1);
    printf(screenz1);
}

在语法方面我看不出有什么问题。我还尝试用浮点数替换所有的双精度。

这是愚蠢的看了这个最长的时间后,我注释掉了printf行,它工作。我该如何检查这些变量等于什么呢?有人能告诉我怎样正确地打印东西吗?

printf("value = %#gn", 3.012);

打印3.012到控制台。

打印到控制台应该以线程安全的方式完成,因此您的cl线程应该与控制台冲洗线程相同。

打印多个内核的输出可能会产生意想不到的结果。计时不准,指纹没有任何特定的顺序等等。尝试仅从一个工作项进行打印。

if i == 0{
    printf(...)
}

如果需要的话,您还可以在上面放置一个屏障,并循环遍历工作项0中的多个值。

我看不出语法有什么问题。

我们再努力看看,因为printf不是这么用的。

如果要打印双精度值,请使用

printf("%f", value);

如果这没有意义,我建议阅读通用C printf和OpenCL printf的文档。

由于-11是CL_BUILD_PROGRAM _FAILURE,您可以使用clGetProgramBuildInfo来检索构建日志并检查编译出错的地方