Введение в программирование на ROCm и HIP: Практическое руководство
Практическое современное руководство по программированию на графических процессорах AMD с использованием ROCm и HIP. Охватывает полный программный стек, установку, рабочие процессы сборки, программирование ядер, управление памятью, инженерию производительности, использование библиотек, перенос кода из CUDA и практики отладки в производственной среде.
Обзор курса
📚 Краткое содержание
Практическое современное руководство по программированию графических процессоров AMD с использованием ROCm и HIP. Охватывает полный программный стек, установку, рабочие процессы сборки, написание ядер, управление памятью, инженерию производительности, использование библиотек, перенос кода из CUDA в HIP и практики отладки в рабочей среде.
Освойте программирование графических процессоров AMD и переносимость кода из CUDA в HIP с помощью этого технического глубокого анализа.
Автор: EvoClass
Благодарности: Официальная документация по ROCm и HIP от AMD, включая проекты, такие как ROCm, HIP и ROCm LLVM.
🎯 Цели обучения
- Определите, что такое HIP и его роль в экосистеме ROCm, одной краткой фразой.
- Различайте между платформой ROCm, интерфейсом HIP и библиотеками ROCm (строительными блоками).
- Определите иерархические уровни архитектуры ROCm от аппаратного обеспечения до прикладных фреймворков.
- Определите связь между средствами разработки HIP и платформой ROCm на разных операционных системах.
- Выполните систематический процесс установки, включая проверку матрицы поддержки и настройку путей после установки.
- Скомпилируйте и запустите минимальную проверочную программу для устранения распространённых проблем с драйверами и доступом к среде.
- Понимайте, почему надёжная стратегия сборки необходима для согласования переносимости исходного кода с производительностью, специфичной для архитектуры.
- Реализуйте переносимые вызовы ядер с использованием макроса
hipLaunchKernelGGLкак альтернативы синтаксису тройных угловых скобок в CUDA. - Настройте профессиональные проекты на CMake, ориентированные на конкретные архитектуры ROCm, и управляйте внешними зависимостями библиотек.
- Определите анатомию ядра HIP и примените базовую формулу для индексации потоков.
🔹 Урок 1: Введение в архитектуру ROCm и HIP
Обзор: Этот урок даёт основополагающий обзор платформы ROCm и языка программирования HIP. Он уточняет взаимосвязь между полным стеком ROCm, интерфейсом HIP и высокопроизводительными библиотеками, а также устанавливает реалистичные ожидания относительно переносимости из CUDA в AMD и инженерии производительности.
Результаты обучения:
- Определите, что такое HIP и его роль в экосистеме ROCm, одной краткой фразой.
- Различайте между платформой ROCm, интерфейсом HIP и библиотеками ROCm (строительными блоками).
- Определите иерархические уровни архитектуры ROCm от аппаратного обеспечения до прикладных фреймворков.
🔹 Урок 2: Установка и настройка среды
Обзор: Этот урок проводит разработчиков графических процессоров и инженеров вычислительных центров через ключевые стратегии настройки среды, готовой к работе с HIP, на платформах Linux и Windows. Подчёркивается подход "реальность платформы", при котором разработчики должны проверить совместимость аппаратного и программного обеспечения перед началом структурированного процесса установки и финальной проверки с помощью компилятора hipcc.
Результаты обучения:
- Определите связь между средствами разработки HIP и платформой ROCm на разных операционных системах.
- Выполните систематический процесс установки, включая проверку матрицы поддержки и настройку путей после установки.
- Скомпилируйте и запустите минимальную проверочную программу для устранения распространённых проблем с драйверами и доступом к среде.
🔹 Урок 3: Инструментарий сборки: hipcc и структура проекта
Обзор: Этот урок исследует ключевой инструментарий и организационные стратегии для разработки приложений на HIP на оборудовании AMD. Он переводит разработчика от простых командных строк с использованием драйвера hipcc к профессиональным конфигурациям проектов, готовым к производству, с использованием CMake. Основные темы — портабельные макросы вызова ядер, оптимизация для конкретных архитектур и важное различие между переносимостью на уровне исходного кода и производительностью на уровне бинарного файла.
Результаты обучения:
- Понимайте, почему надёжная стратегия сборки необходима для согласования переносимости исходного кода с производительностью, специфичной для архитектуры.
- Реализуйте переносимые вызовы ядер с использованием макроса
hipLaunchKernelGGLкак альтернативы синтаксису тройных угловых скобок в CUDA. - Настройте профессиональные проекты на CMake, ориентированные на конкретные архитектуры ROCm, и управляйте внешними зависимостями библиотек.
🔹 Урок 4: Модель программирования HIP и разработка ядер
Обзор: Этот урок исследует фундаментальную архитектуру ядер HIP, сосредотачиваясь на том, как задачи преобразуются из логических проблем в выполнение на аппаратном уровне через сетки и блоки. Он предоставляет шаблон для надёжного программирования на графических процессорах, включая базовую формулу выполнения, узкие места производительности (память против вычислений) и обязательную реализацию проверки ошибок и синхронизации для рабочего кода.
Результаты обучения:
- Определите анатомию ядра HIP и примените базовую формулу для индексации потоков.
- Эффективно настройте размеры сетки и блока и реализуйте тестирование производительности для поиска оптимальной пропускной способности.
- Реализуйте надёжные макросы обработки ошибок и применяйте семантику синхронизации для управления взаимодействием устройство-хост.
🔹 Урок 5: Управление памятью и модели данных
Обзор: Этот урок фокусируется на центральном элементе программирования графических процессоров — управлении памятью. Он охватывает классификацию типов памяти (обычная, фиксированная, устройственная и управляемая), последствия для производительности механизмов передачи данных, а также критическую роль моделей доступа к памяти — в частности, коалиции — для достижения максимальной производительности. Учащиеся научатся находить баланс между удобством использования управляемой памяти и явным контролем, необходимым для высокопроизводительных приложений в области вычислительных наук.
Результаты обучения:
- Различайте между обычной и фиксированной хост-памятью и определяйте, когда использовать каждый тип для оптимальной скорости передачи.
- Реализуйте выделение памяти на устройстве и унифицированную/управляемую память с помощью API HIP (
hipMalloc,hipHostMalloc,hipMallocManaged). - Анализируйте модели доступа к памяти, чтобы обеспечить коалированный доступ и избежать узких мест производительности, таких как строительная выборка.
🔹 Урок 6: Потоки, события и асинхронное выполнение
Обзор: Этот урок переводит разработчиков от синхронной модели программирования к параллельному мышлению, сосредотачиваясь на том, как максимизировать использование графического процессора с помощью потоков и событий в HIP. Он рассматривает механизмы перекрытия передачи данных с выполнением ядер через частично разбитые пайплайны и вводит компромиссы между захватом потоков и явным построением графов. Кроме того, он подчеркивает важные аспекты для рабочей среды, включая использование библиотек, безопасных для графов, и высокоточной тайминговой информации на графическом процессоре.
Результаты обучения:
- Определите преимущества асинхронного выполнения и параллельных потоков перед синхронным выполнением.
- Реализуйте частично разбитые пайплайны для перекрытия коммуникации хост-устройство с вычислениями ядра.
- Различайте между захватом потоков и явным построением графов для снижения накладных расходов на запуск.
🔹 Урок 7: Инженерия производительности на графических процессорах AMD
Обзор: Этот урок устанавливает научную основу для оптимизации программного обеспечения на оборудовании AMD, переходя от догадок к системному, основанному на измерениях подходу. Он охватывает архитектурные отношения между вычислительными блоками, волновыми группами и давлением регистров, а также предлагает практические методологии профилирования с помощью rocprofv3 и создания надёжных шаблонов для тестирования производительности.
Результаты обучения:
- Реализуйте 6-шаговый процесс оптимизации в HIP для выявления и устранения узких мест производительности.
- Проанализируйте компромисс между давлением регистров и загрузкой устройства для максимизации использования аппаратных ресурсов.
- Выполняйте точные измерения производительности с использованием аппаратных событий и лучших практик многократного тестирования.
🔹 Урок 8: Экосистема библиотек ROCm
Обзор: Этот урок представляет философию «библиотека первая», которая отдаёт приоритет высокопроизводительным, заранее собранным библиотекам ROCm вместо разработки собственных ядер. Он охватывает категоризацию стека библиотек ROCm (математика, БПФ, примитивы, машинное обучение/ИИ) и предоставляет рамки для выбора между портабельными интерфейсами hip* и специфичными для AMD реализациями roc*. Кроме того, учащиеся изучают критические требования к «безопасности графов» при интеграции библиотек в рабочие потоки с захватом графов.
Результаты обучения:
- Примените принцип «библиотека первая» для обоснования использования проверенных примитивов вместо пользовательских ядер.
- Различайте между библиотеками
hip*иroc*на основе требований к переносимости и производительности. - Категоризируйте библиотеки ROCm по их функциональным областям (математика, БПФ, примитивы, машинное обучение/ИИ).
🔹 Урок 9: Перенос приложений на CUDA в HIP
Обзор: Этот урок описывает систематический переход исходного кода на CUDA в портабельную среду C++ HIP. Учащиеся узнают, как выполнять пошаговый процесс переноса с использованием автоматизированных инструментов, таких как hipify-perl и hipify-clang, выявлять критические ловушки переносимости, такие как предположения о warpSize, специфичные для оборудования, и реализовывать строгий процесс проверки для сравнения производительности и корректности после миграции.
Результаты обучения:
- Выполните 6-шаговый пошаговый процесс переноса для минимизации накладных расходов при отладке.
- Выберите и применим соответствующий автоматизированный инструмент перевода (
hipify-perlпротивhipify-clang) в зависимости от сложности исходного кода. - Выявите и устраните архитектурно чувствительные «ловушки переносимости», особенно те, которые связаны с
warpSizeи механическими ошибками перевода.
🔹 Урок 10: Отладка, тестирование и рабочие практики
Обзор: Этот урок охватывает ключевые инструменты и методологии для перехода ядер графических процессоров из разработки в рабочую среду на платформе ROCm. Он подробно описывает использование ROCgdb и AddressSanitizer для обнаружения ошибок, устанавливает строгую четырёхуровневую стратегию тестирования и предоставляет чек-лист для рабочей среды, чтобы гарантировать корректность и стабильность производительности ядра.
Результаты обучения:
- Используйте ROCgdb, ltrace и AddressSanitizer для выявления ошибок на уровне исходного кода и ошибок доступа к памяти в коде графического процессора.
- Реализуйте четырёхуровневую стратегию тестирования, чтобы проверить вспомогательные функции, корректность ядер, граничные случаи и регрессии производительности.
- Примените паттерны рабочего кода и чек-листы для управления интерфейсами ядер, документацией и отладкой, зависящей от среды.