К курсам
AI024 Professional

Введение в программирование на ROCm и HIP: Практическое руководство

Практическое современное руководство по программированию на графических процессорах AMD с использованием ROCm и HIP. Охватывает полный программный стек, установку, рабочие процессы сборки, программирование ядер, управление памятью, инженерию производительности, использование библиотек, перенос кода из CUDA и практики отладки в производственной среде.

5.0
30.0h
361 учеников
0 лайки
Искусственный интеллект
Начать обучение

Обзор курса

📚 Краткое содержание

Практическое современное руководство по программированию графических процессоров AMD с использованием ROCm и HIP. Охватывает полный программный стек, установку, рабочие процессы сборки, написание ядер, управление памятью, инженерию производительности, использование библиотек, перенос кода из CUDA в HIP и практики отладки в рабочей среде.

Освойте программирование графических процессоров AMD и переносимость кода из CUDA в HIP с помощью этого технического глубокого анализа.

Автор: EvoClass

Благодарности: Официальная документация по ROCm и HIP от AMD, включая проекты, такие как ROCm, HIP и ROCm LLVM.

🎯 Цели обучения

  1. Определите, что такое HIP и его роль в экосистеме ROCm, одной краткой фразой.
  2. Различайте между платформой ROCm, интерфейсом HIP и библиотеками ROCm (строительными блоками).
  3. Определите иерархические уровни архитектуры ROCm от аппаратного обеспечения до прикладных фреймворков.
  4. Определите связь между средствами разработки HIP и платформой ROCm на разных операционных системах.
  5. Выполните систематический процесс установки, включая проверку матрицы поддержки и настройку путей после установки.
  6. Скомпилируйте и запустите минимальную проверочную программу для устранения распространённых проблем с драйверами и доступом к среде.
  7. Понимайте, почему надёжная стратегия сборки необходима для согласования переносимости исходного кода с производительностью, специфичной для архитектуры.
  8. Реализуйте переносимые вызовы ядер с использованием макроса hipLaunchKernelGGL как альтернативы синтаксису тройных угловых скобок в CUDA.
  9. Настройте профессиональные проекты на CMake, ориентированные на конкретные архитектуры ROCm, и управляйте внешними зависимостями библиотек.
  10. Определите анатомию ядра 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 для выявления ошибок на уровне исходного кода и ошибок доступа к памяти в коде графического процессора.
  • Реализуйте четырёхуровневую стратегию тестирования, чтобы проверить вспомогательные функции, корректность ядер, граничные случаи и регрессии производительности.
  • Примените паттерны рабочего кода и чек-листы для управления интерфейсами ядер, документацией и отладкой, зависящей от среды.