У меня есть основной вопрос для моего понимания. Приносим извинения, если какая-либо ссылка на ответ приведена в некоторых документах. Я не мог найти ничего связанного с этим в руководстве по программированию C.CUDA: GPU Working
У меня есть Архитектура Ферми GPU Geforce GTX 470. Он имеет
14 потоковых мультипроцессоры 32 потоковых ядер на СМ
Я хотел понять, нить за преимущественный механизм с примером. Предположим, что у меня есть простейшее ядро с оператором 'printf' (вывести идентификатор потока). И я использую следующие размеры сетки и блоки
dim3 grid, block;
grid.x = 14;
grid.y = 1;
grid.z = 1;
block.x = 32;
block.y = 1;
block.z = 1;
Так как я понимаю, 14 блоков будет назначено 14 потоковых мульти-процессоров. И поскольку каждый потоковый мультипроцессор имеет 32 ядра, каждое ядро будет выполнять одно ядро (один поток). Это верно?
Если это так, то что произойдет в следующем случае?
grid.x = 14;
grid.y = 1;
grid.z = 1;
block.x = 64;
block.y = 1;
block.z = 1;
Я понимаю, что любое количество блоков, которые я назначаю сетке, они запланированы без какой-либо последовательности или прогноза. Это связано с тем, что, как только на экране появится столбец с бутылкой ресурсов, графический процессор будет планировать эти блоки, не требуя этих ресурсов.
1) Используются те же критерии для потоков потоков.
2) Но, как я уже говорил, у меня есть инструкция printf и нет общего использования ресурсов, что происходит в этом случае? После выполнения 32 потоков выполняются остальные 32 потока? 3) Если у меня также есть y-размер в блоке, тогда какая последовательность? Это первые 32 потока в x-размерности для всех y-размерностей, а затем остальные?
Может кто-нибудь прокомментировать это?
Что касается вашего первого примера, это зависит от операций, которые будут выполнены. В техническом документе Fermi написано, что _a CUDA core выполняет инструкцию с плавающей точкой или целым числом в часах для потока_. Таким образом, операции двойной точности будут занимать два ядра. Поэтому я не думаю, что утверждение «ядро» будет выполнять одно ядро (один поток) _, как правило, правильно. – JackOLantern
Я полагаю, что одна операция двойной точности будет использовать один FPU на GPU Fermi, а не два ядра. –