Каковы требования для использования операций `shfl` на AMD GPU с использованием HIP C++?

Существует AMD HIP C++, которая очень похожа на CUDA C++. Также AMD создала Hipify для преобразования CUDA C++ в HIP C++ (Portable C++ Code), который может выполняться как на GPU nVidia, так и на GPU AMD: https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP

требование для nvidia

пожалуйста, убедитесь, что у вас есть устройство с поддержкой вычислений версии 3.0 или выше, чтобы использовать операции warp shfl и добавить -gencode arch=compute=30, code=sm_30 nvcc флаг в Makefile при использовании этого приложения.

Кроме того, HIP определяет переносимые механизмы для запроса архитектурных функций и поддерживает больший 64-битный размер волны, который расширяет тип возвращаемого значения для функций между рядами, таких как голосование и перемешивание, с 32-битных до 64-битных.

Но какой из графических процессоров AMD поддерживает функции shfl или какая-либо поддержка AMD GPU shfl потому что на AMD GPU это реализовано с использованием Local-памяти без аппаратных инструкций от регистра к регистру?

Для GPU nVidia требуется 3,0 или выше (CUDA CC), но каковы требования для использования shfl операции на AMD GPU с использованием HIP C++?

1 ответ

Решение
  1. Да, в GPU GCN3 есть новые инструкции, такие как ds_bpermute а также ds_permute который может обеспечить функциональность, такую ​​как __shfl() и даже больше

  2. Эти ds_bpermute а также ds_permute инструкции используют только маршрут локальной памяти (LDS 8,6 ТБ / с), но фактически не используют локальную память, это позволяет ускорить обмен данными между потоками: 8,6 ТБ / с <скорость <51,6 ТБ / с: http: // gpuopen.com / драмы-GCN-сборка кросс-пер-операция /

Они используют оборудование LDS для маршрутизации данных между 64 полосами волнового фронта, но на самом деле они не записывают в местоположение LDS.

  1. Также есть Data-Parallel Primitives (DPP) - это особенно полезно, когда вы можете использовать его, поскольку операционная система может читать регистры соседних рабочих элементов напрямую. Т.е. DPP может получить доступ к соседнему потоку (рабочему элементу) на полной скорости ~51,6 ТБ / с

http://gpuopen.com/amd-gcn-assembly-cross-lane-operations/

теперь большинство векторных инструкций может выполнять межканальное чтение с полной пропускной способностью.

Например, wave_shr-инструкция (сдвиг волнового фронта вправо) для алгоритма сканирования:

введите описание изображения здесь

Подробнее о GCN3: https://github.com/olvaffe/gpu-docs/raw/master/amd-open-gpu-docs/AMD_GCN3_Instruction_Set_Architecture.pdf

Новые инструкции

  • "SDWA" - адресация вспомогательных слов обеспечивает доступ к байтам и словам VGPR в инструкциях VALU.
  • "DPP" - параллельная обработка данных позволяет командам VALU получать доступ к данным из соседних линий.
  • DS_PERMUTE_RTN_B32, DS_BPERMPUTE_RTN_B32.

...

DS_PERMUTE_B32 Перестановка вперед. Не пишет никакой памяти LDS.

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