Количество волновых фронтов, которые могут поместиться на SIMD - PullRequest
1 голос
/ 08 мая 2011

Я читаю статью о графическом процессоре AMD и меня смущает конкретный пример. Учитывая единицу SIMD с несколькими регистрами, сколько волновых фронтов может занимать SIMD, если им требуется x количество регистров?

В частности, если SIMD-блок имеет 16 тыс. Регистров для совместного использования между 1-32 волновыми фронтами. Тогда это означает, что каждый волновой фронт может иметь в среднем 8 регистров (если есть 32 волновых фронта). Это хорошо.

Далее говорится, что существует глобальное ограничение на число волновых фронтов в SIMD ~ 20,6, которое затем дает каждому регистру волнового фронта 11-12.

Эта часть меня смущает. Далее говорится, что только 2 волновых фронта могут занимать SIMD, если они используют 83 или более регистров. (напоминая, что волновые фронты имеют ширину 64).

В моих расчетах: 2 * 83 * 64 = 10628 registers, что ниже 16,384, указанных в SIMD. Поэтому вы можете иметь 3 волновых фронта без проблем.

Я читаю статью здесь , если есть что-то, что я пропустил. (Седьмой абзац)

1 Ответ

0 голосов
/ 16 мая 2011

Относительно глобального лимита:

У каждого из amd gpus есть глобальный предел того, сколько одновременных волновых фронтов он может выдержать.Это ограничение зависит от модели, но обычно не изменяется между разными версиями одного и того же чипа.Например, для чипов кипариса (5830, 5850, 5870) это 496 волновых фронтов на GPU.Поскольку эти чипы имеют разное количество CU, максимальное количество волновых фронтов / CU (рассчитанное по этому ограничению) увеличивается с 35,4 для 5830 до 24,8 для 5870. Для чипов начального уровня этот глобальный предел может рассчитываться до значений, достигающих 96 волновых фронтов /кубическийВ этих случаях применяется ограничение на 32 волновых фронта / CU (8 рабочих групп и 4 волновых фронта) с 8 регистрами / потоком.

Теперь для 2 волновых фронтов:

Судя по числам, указанным в ATIРуководство по потоковому программированию В OpenCL кажется, что количество используемых регистров немного меньше, чем 16384, так что я бы предположил (как и в чистом предположении, не нашел никакой информации об этом), некоторые регистры используются для других целей, не доступных непосредственно ядру.(Указатели инструкций и еще много чего).В приведенной таблице нет распределения, использующего более 15872 регистров, так что это может быть используемым максимумом.Конечно, это чисто предположение, так что это может быть просто случай, когда кто-то использует неправильные числа в руководстве, и все копируют его.

В общем, Руководство по программированию ATI Stream OpenCL являетсяхороший ресурс, чтобы узнать об этом.Имейте в виду, что ссылка является результатом быстрого поиска в Google и, похоже, не указывает на самую последнюю версию (она указывает на версию 1.03, когда я использую версию 1.05, и я не знаю, является ли этосамый актуальный тоже).Не знаю, имеет ли это какое-то важное значение, но может потребоваться более глубокий поиск.

...