Нет. Это означает, что вы вызвали ядро CUDA с одним блоком, и этот блок имеет 100 активных потоков. Вы передаете размер в качестве второго параметра функции вашему ядру. В вашем ядре каждый из этих 100 потоков выполняет цикл for 100 раз.
#pragma unroll
— это оптимизация компилятора, которая может, например, заменить такой фрагмент кода, как
for ( int i = 0; i < 5; i++ )
b[i] = i;
с участием
b[0] = 0;
b[1] = 1;
b[2] = 2;
b[3] = 3;
b[4] = 4;
поместив директиву #pragma unroll
прямо перед циклом. Преимущество развернутой версии в том, что она требует меньшей вычислительной нагрузки на процессор. В случае версии цикла for
обработка, в дополнение к назначению каждого i
на b[i]
, включает i
инициализацию, оценку i<5
6 раз и увеличение i
5 раз. В то время как во втором случае требуется заполнить только содержимое массива b
(возможно, плюс int i=5;
, если i
используется позже). Еще одним преимуществом развертывания цикла является улучшение параллелизма на уровне инструкций (ILP). В развёрнутой версии, возможно, будет больше операций, которые процессор будет помещать в конвейер обработки, не беспокоясь о состоянии цикла for
на каждой итерации.
Такие сообщения, как это, объясняют, что развертывание цикла во время выполнения не может происходить для CUDA. В вашем случае компилятор CUDA не имеет никаких подсказок о том, что size
будет равно 100, поэтому развертывание цикла во время компиляции не произойдет, и поэтому, если вы форсируете развертывание, вы можете в конечном итоге повредить производительности.
Если вы уверены, что size
равно 100 для всех исполнений, вы можете развернуть свой цикл, как показано ниже:
#pragma unroll
for(int i=0;i<SIZE;i++) //or simply for(int i=0;i<100;i++)
b[i]=i;
в котором SIZE
известен во время компиляции с #define SIZE 100
.
Я также предлагаю вам правильно проверить ошибки CUDA в вашем коде (объяснено здесь).
person
Farzad
schedule
09.03.2014
size
в качестве второго параметра функции вашему ядру. В вашем ядре каждый из этих 100 потоков выполняет циклfor
100 раз. Я советую вам начать изучение CUDA с основ и двигаться постепенно, а не переходить к более сложным или менее важным материалам, таким как развертывание циклов. - person Farzad   schedule 09.03.2014