Итак, я читал архитектуру для графических процессоров GCN 1-го поколения, предоставленных в документе здесь , и я немного запутался в размере векторных ALU и некоторых других вещах.
1) Согласно этому, каждый вычислительный блок имеет 1 скалярный блок и 4 SIMD. Каждое из этих 4 SIMD имеет 16 ALU для выполнения векторных операций. В документе говорится, что ALU изначально выполняют вычисления с плавающей запятой одинарной точности и 24-разрядное целое число на полной скорости, а также DP и 32-разрядное целое число на пониженной скорости.
Я хочу знать, почему 32-битные целые числа выполняются с пониженной скоростью, когда 32-битная с плавающей запятой SP может выполняться нормально?
2) Во-вторых, мы знаем, что для графических процессоров AMD GCN каждый массив SIMD выполняет четверть волнового фронта за 4 цикла. Когда инструкция назначена на SIMD-блок, реплицируется ли она на все 4? или для получения инструкции от каждого SIMD-блока требуется 4 разных цикла?
Если все 4 SIMD-блока выполняют одну и ту же инструкцию, то теоретически это дает нам 4 волновых фронта за 4 цикла. Если это второй случай, то только 4 волновых фронта будут завершены в 4-м цикле.
Хотя обратите внимание, что согласно техническому документу GCN, Local Data Share (LDS) объединяет 16 линий из 2 разных блоков SIMD в каждом цикле, поэтому мы получаем 2 полных волновых фронта за 4 цикла. Похоже, это намекает на то, что это первый случай, поскольку невозможно получить более 1 волнового фронта за 4 цикла, если инструкции не реплицированы на SIMD-блоки.
3) Наконец, я хочу спросить о сценарии.
Предположим, у меня есть 2D-рабочая группа, назначенная на вычислительную единицу. Рабочая группа состоит из 8x8 = 64 рабочих элементов. Сформирует ли вычислительный блок 1 волновой фронт и выполнит ли это в течение 4 циклов в 1 SIMD-модуле, в то время как остальные 3 SIMD-блока останутся бездействующими? Или что-то еще случится?