У меня проблема с неправильным global_id()
результатом.Я хотел бы свернуть трехмерный воксель с размером {35,35,35}
с трехмерным ядром с размером {5,5,5}
.Поэтому я вызываю «clEnqueueNDRangeKernel» с global_size = {35,35,35}
и local size = { 5, 5, 5}
std::vector<size_t> local_nd = { 5, 5, 5 };
std::vector<size_t> global_nd = { 35, 35, 35 };
err = clEnqueueNDRangeKernel( queue, hello_kernel, work_dim, NULL, global_nd.data(), local_nd.data(), 0, NULL, NULL);
То, что я ожидаю при вызове get_global_id()
, функция global_id(0)
должна быть в диапазоне от 0 до 34 global_id(1)
должно бытьот 0 до 34 и global_id(2)
должно быть от 0 до 34.
Однако для global_id(0)
and global_id(1)
результаты кажутся правильными.Тем не менее, global_id(2)
значения варьируются от 30 до 34 вместо ожидаемых от 0 до 34.
const int ic0 = get_global_id(0); // icol
const int ic1 = get_global_id(1); // irow
const int ic2 = get_global_id(2); // idep
printf(" %d %d %d\n", ic0, ic1, ic2 );
// value of ic0 = [0 -> 34] correct!
// value of ic1 = [0 -> 34] correct!
// value of ic2 = [30 -> 34] ( SHOULD IT BE [0->34] )?
мой gpu is max-workgroup является максимальным элементом рабочей группы ND: {1024, 1024, 64}