Свържете се с нас

Съдържание и теми, включени в курса

Въведение в ускорените изчисления с GPU

  • Хетерогенни изчисления и архитектура CPU-GPU
  • Изпълнение и пространства за памет на CUDA
  • Компилиране на CUDA C++ с nvcc и CMake
  • Проверка на средата за разработка на GPU

Паралелни алгоритми с Thrust и CUB

  • Ускорено сортиране, редуциране и трансформиране от GPU
  • Преобразуване на алгоритмите STL за изпълнение на GPU
  • Устройствени вектори (device vectors) на Thrust и политики за изпълнение
  • Примитиви на CUB за широка гама от потребителски тръбопроводи

Архитектура и управление на паметта за GPU

  • Типове глобална, константна и текстура памет
  • Експлицитно разпределяне и трансфер на устройствова (device) памет
  • Обединена памет (Unified Memory) за опростен достъп до данни
  • Коефициенти на паметта и оптимизация на модела на достъп

Асинхронно изпълнение с потоци на CUDA (CUDA Streams)

  • Създаване и управление на потоци на CUDA
  • Препокриване на изпълнението на ядрата с трансферите на данни
  • Управление на зависимостите чрез събития на CUDA (CUDA events)
  • Приоритети на потоци и настройка на паралелизма

Писане на персонализирани CUDA ядра

  • Модел за програмиране SIMT и изпълнение на warp-ове
  • Конфигурация на стартиране на ядро и цикли с решетка (grid-stride loops)
  • Индексиране на нишки и многомерни мрежи
  • Обработка на грешки и проверки на API-то за изпълнение на CUDA runtime

Йерархия на нишките и модел на изпълнение

  • Мрежи (Grids), блокове и нишки в кода на устройството
  • Примитиви на ниво warp и операции за гласуване (ballot)
  • Синхронизация на ниво блок и бариери
  • Анализ на заетостта и използването на ресурсите

Кооперативни групи за гъвкав паралелизъм

  • API-то cooperative_groups и типовете групи
  • Плитки от блокове на нишки (Thread-block tiles) и tiled_partition
  • Кооперативни стартирания на ниво мрежа
  • Въздействия за мултимрежова синхронизация

Техники за оптимизация на споделената памет

  • Банки за споделена памет и избягване на конфликти между банките
  • Стратегии за плочки за матрични операции
  • Споделена памет като кеш, управляван от потребителя
  • cuda::shared_memory_mdspan за многомерни прегледи

Сливане на ядра и разширени паралелни модели

  • Обединяване на множество ядра за намаляване на накладните разходи при стартиране
  • Сканиране, редуциране по ключ и сегментирани алгоритми
  • Атомни операции и конструкции от данни без ключалки (lock-free)
  • Атомни операции, агрегирани на ниво warp, за пропускателна способност

Профилиране и оптимизация с Nsight Systems

  • Анализ по времева линия на активността на CPU и GPU
  • Идентифициране на тесни места при трансфер на паметта
  • Профилиране на производителността и заетостта на ядерата
  • Итеративна оптимизация с Nsight Compute

Съвременни функции на C++ в кода за устройство (Device Code) на CUDA

  • Lambdas, constexpr и auto в ядерата
  • Паралелни алгоритми на C++17 и политики за изпълнение
  • Концепции и обхвати на C++20 на устройството (device)
  • Поддръжка на C++23 в nvcc и CCCL 3.x

CUDA Graphs и разширен асинхронизъм

  • Дефиниране и стартиране на графи на CUDA
  • Запис на графи от изпълнението на потоци (streams)
  • Обновяване на графи и възли за условно изпълнение
  • Намаляване на забавянето при стартиране за йтеративни товари

Шаблони за интеграция със съществуващи приложения

  • Запазване на GPU кода зад C++ интерфейси
  • Управление на системи с множество GPU и NUMA
  • Интегриране на системите за изграждане (build systems) с CMake и CUDA
  • Отстраняване на грешки в кода за устройство (device code) с cuda-gdb

Обобщение и най-добри практики

  • Избор между Thrust, CUB и персонализирани ядра
  • Переносимост на производителността върху различни архитектуры на GPU
  • Организация на кода и RAII за ресурси на CUDA
  • Следващи стъпки и разширени пътища за обучение по CUDA

Изисквания

  • Базови познания по C++ включващи lambdas изрази, шаблони (templates) и STL.
  • Познанство със стандартните алгоритми, контейнери и итератори.
  • Удобство с цикли, условни оператори и функции.
  • Не е необходима предишна опитност с CUDA или програмиране на GPU.

Целева аудитория

  • Разработчици на C++, които търсят начини за ускоряване на приложения с интензивни изчисления чрез GPU.
  • Инженери по софтуер, преминаващи от програмиране само за CPU към хетерогенно паралелно програмиране.
  • Инженери по производителност и количествени разработчици, работещи с големи набори от данни.
 8 Часа

Брой участници


Цена за участник

Отзиви от участници (3)

Предстоящи Курсове

Свързани Kатегории