SIMD-16 и SIMD-32 преимущества / недостатки?

Совсем недавно AMD выпустила новую архитектуру GPU под названием rDNA в своей новой линейке графических процессоров Navi. После прочтения определенной статьи и видео о глубоком погружении в архитектуру я понял следующее (не стесняйтесь исправлять, если я ошибаюсь):

  • Небольшие рабочие нагрузки, для выполнения которых требуется аналогичная инструкция, называются "потоками".

  • Затем планировщик организует группу из тех потоков, для которых требуется одна и та же инструкция. В частности, в случае AMD GPU, GCN и рДНК предназначены для обработки 64 и 32 потоков соответственно.

  • SIMD затем обрабатывает эти кластерные потоки. Но разница в том, что AMD GCN использует SIMD16, что означает, что 16 потоков могут обрабатываться одновременно, а AMD rDNA использует SIMD32, то есть 32 потока могут обрабатываться одновременно.

  • Все должно работать безупречно, если в GPU есть все 64 потока, которые будут выполняться, но было бы неприятно, если бы ему нужно было выполнить только 1 поток. Таким образом, только 1 векторный модуль SIMD16 действительно делает что-то продуктивное, в то время как остальные три просто пугают.

  • Изменения в архитектуре означают, что с SIMD32 графический процессор может устранить потенциальную бутылочную горлышко.

Однако каждый из этих источников постоянно повторяет: "Дизайн SIMD16 лучше подходит для вычислительной нагрузки"... Это подняло у меня вопрос:

1) Разве дизайн SIMD32 не лучше всего в SIMD16 во всех отношениях? Если нет, то в чем именно заключается преимущество SIMD16 в вычислительной работе?

2) Для каждых 64 потоков 4 SIMD16 выполняют обработку одновременно или последовательно? Причина, по которой я спрашиваю это, на видео от Engadget изображен процесс как сериализованный, в то время как видео от Linus Tech Tips, похоже, намекает на его параллельность. Это чертовски смутило меня.

  • Если все последовательно, то почему AMD просто не идет на SIMD64 или что-то еще?

  • Если все параллельно, то я, честно говоря, вообще не вижу преимущества SIMD. На GCN у вас есть 4 SIMD16, а на рДНК у вас есть 2 SIMD32. Если вы обрабатываете 1 поток в GCN с SIMD16, время запуска 1 SIMD16 должно быть равно времени, когда вы запускаете 4 SIMD16, потому что, опять же, они параллельны. Переходя к 2 SIMD32, время, которое вы обрабатываете 1 SIMD32, должно быть равно времени, которое вы обрабатываете 2 из них. В обоих случаях у вас все еще есть 63 неиспользованных потока. Так в чем смысл точно.

Я знаю, что мое понимание должно быть ошибочным в какой-то момент, поэтому я хотел бы получить несколько глубоких объяснений. Спасибо вам.

1 ответ

Просто длинный комментарий.

В gcn есть только 1 скалярная единица на 4 вектора (длина 16). Но в rdna есть 2 скалярных единицы на 1 вектор (длина 32). Это должно быть серьезным преимуществом в сложных алгоритмах, которые создают давление на скалярную единицу. И эта скалярная единица новее, не так ли? Так что это хорошее решение проблемы с одним потоком вместо того, чтобы ожидать от разработчиков полностью оптимизированной вычислительной нагрузки. Теперь обход дерева может быть лучше?

В gcn каждый 16-значный вектор генерируется за один цикл, а весь gcn - за 4 цикла. 4 цикла на 64 трубопровода. Но в РДНА это 1 цикл на 32 конвейера, поэтому он параллелен. Это, опять же, означает очень хорошее преимущество для некоторых проблем с задержкой. Когда 2 блока работают вместе, это все равно 1 цикл на 64 конвейера, так как они независимы два 32 широких вектора.

До сих пор у нас было в 4 раза больше уловок на "проблемную" производительность и в 8 раз уловки на "скалярных" рабочих нагрузках.

Попадая в параллелизм на уровне потоков, он завершает те же волновые фронты быстрее, чем gcn, с указанными выше преимуществами или без них. Это уменьшает давление регистра. Меньшее давление в регистре обеспечивает запас для большего количества потоков в полете. Это дополнительно увеличено с 1024 регистрами на вектор, что отлично по сравнению с 256 потоками gcn. Больше потоков на линию, более быстрые линии, лучшая система кэширования и т. Д., Это становится быстрее и эффективнее.

Масштабируемость архитектуры, должно быть, остановила их на 32 дорожках вместо 64 128 и т. Д. Или меньше, например 16 8 4. Возможно, наличие 64-полосного вектора не может получить достаточную пропускную способность от кэшей? Я не знаю. Но есть транзисторный бюджет. Где бы вы обрезать, чтобы иметь более широкий simd? Кэш означает меньший или меньший кэш и меньший или меньший кэш на конвейер. Я бы тоже не обрезал скалярную единицу. Возможно текстурирование юнитов и ропов, но геймеры тоже купят это. Проникновение на рынок.

Похоже, они хорошо сыграли на параллелизме на уровне потоков, и им, возможно, не нужно добавлять больше физических потоков в один и тот же вектор. 80 волновых фронтов на двух векторах (когда они работают вместе) уже хороши для tlp, и, таким образом, гораздо больше проблем с ilp стало бы меньшей проблемой сейчас. Создание 16 или 8 широких векторов на одной и той же области потребовало бы 160 потоков в пролете на конвейер. Есть ли 160 уникальных операций на конвейер? Я не знаю. Даже 80 уникальных операций выглядит для меня слишком много. Это все равно, что использовать все математические функции и функции памяти rdna одновременно. Просто предположение.

На данный момент ограничение 80 волновых фронтов означает, что вы можете попытаться использовать до 80 x 2560 рабочих элементов в алгоритме, если есть проблемы с протоколом ilp или другие проблемы. Может быть, не очень полезен в простых алгоритмах, таких как naive nbody, но полезен в таких вещах, как смешанная точность int float string, которые все вычисляются в одном окне инструкций. Возможно, именно поэтому они сказали, что 16wide лучше.

В gcn в конвейере было до 40 потоков на конвейер. Nvidia еще меньше, чем 32 или 16. Теперь в rdna есть 80, и это быстрее. Абсолютно лучше. Но не может быть, когда у вас есть только 2560 частиц в алгоритме nbody. По этой причине запрашиваемая ширина симд 64+ может быть лучше для меньшего количества частиц (возможно). Но по мере увеличения количества частиц, больше tlp выглядит лучше, следовательно, меньше ширина на вычислительную единицу при том же количестве транзисторов.

Другие вопросы по тегам