я получаю ошибку -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 = %#g\n", 3.012);
печатает 3.012 на консоль.
Печать на консоль должна выполняться потокобезопасным способом, поэтому ваш поток cl должен совпадать с потоком очистки консоли.
Вывод на печать из многих ядер может дать неожиданные результаты. Время выключено, отпечатки не возвращаются в каком-либо определенном порядке и т. Д. Попробуйте выполнить печать только с одного рабочего элемента.
if i == 0{
printf(...)
}
Вы также можете поставить барьер выше этого и, если нужно, перебрать несколько значений из рабочего элемента 0.
я не вижу ничего плохого с точки зрения синтаксиса.
Ну, попробуйте выглядеть сложнее, потому что вы не так используете printf.
Если вы хотите напечатать дубли, используйте
printf("%f", value);
Если это не имеет смысла, рекомендую прочитать документацию как для обычного C printf, так и для OpenCL printf.
Также, поскольку -11 — это CL_BUILD_PROGRAM _FAILURE, вы можете использовать clGetProgramBuildInfo, чтобы получить журнал сборки и проверить, где компиляция прошла неправильно.