я заметил ряд источников ядра, которые выглядят следующим образом (найденный случайным погуглить):Проверка get_global_id в ядре OpenCL Необходима?
__kernel void fill(__global float* array, unsigned int arrayLength, float val)
{
if(get_global_id(0) < arrayLength)
{
array[get_global_id(0)] = val;
}
}
Мой вопрос, если что, если-заявление действительно необходимо (при условии, что «arrayLength» в этом примере является так же как и глобальный рабочий размер).
В некоторых более «профессиональных» ядрах я видел, это не настоящее время. Мне также кажется, что аппаратное обеспечение преуспеет, чтобы не назначать ядра для бессмысленных координат.
Однако я также знаю, что процессоры работают в группах. Следовательно, я могу себе представить, что некоторые процессоры группы ничего не должны делать (например, если у вас есть 1 группа размером 16 и рабочий размер 41, тогда группа будет обрабатывать первые 16 рабочих элементов, затем затем 16, затем следующие 9, причем 7 процессоров ничего не делают - получают ли они фиктивные ядра?).
Я проверил spec. и релевантно только упоминание о «get_global_id» такой же, как в интернет-документации, которая гласит:
The global work-item ID specifies the work-item ID based on the number of global work-items specified to execute the kernel.
. , , основанный как?
И что это? Можно ли опустить, если размер массива кратен размеру рабочей группы? Какие?
Спасибо,
Ian