В моем ядре OpenCL я проверяю, находится ли global_id в глобальном размере проблемы, но он не работает.Workgroup Bound Check not working
Если глобальный размер проблемы делится на workgroupsize, все в порядке. Если нет, ядро ничего не делает.
__kernel void move_points(const unsigned int points,
const unsigned int floors,
const unsigned int gridWidth,
const unsigned int gridHeight,
__global const GraphData *graph,
__global const float *pin_x,
__global const float *pin_y,
__global const float *pin_z,
__global float *pout_x,
__global float *pout_y,
__global float *pout_z,
__global clrngMrg31k3pHostStream *streams)
{
int id = get_global_id(0);
if (id < points) {
do kernel things...
}
}
Кто-нибудь знает, где проблема?
Большое спасибо. Робин.
Хорошо, спасибо. В соответствии с этим, если я могу два изменить свой глобальный размер проблемы, лучше всего вычислить мои глобальные рабочие элементы как кратные максимальному рабочему классу устройства прямо? например, мой максимальный рабочий график равен 1024, тогда я устанавливаю свой глобальный размер проблемы на 1024 * 1000? – user3507003
В общем случае, если можете, то ДА. Чем больше размер рабочей группы, тем выше загрузка устройства. Но не всегда, иногда лучше иметь меньший размер, чтобы иметь возможность хранить больше памяти на каждый рабочий элемент. Или, может быть, размер вашей локальной проблемы проще решить с другим размером группы. – DarkZeros
совершенный. Большое спасибо! – user3507003