Мы создали этот словарь, чтобы решить проблему, с которой столкнулись при работе с GPU в Modal: документация фрагментирована, что затрудняет связь концепций на разных уровнях стека, таких как архитектура потокового мультипроцессора, вычислительная способность и флаги компилятора nvcc.
Эти термины и технологии относятся к физическим компонентам GPU — «устройству» на языке NVIDIA.
Модель параллельных вычислений и архитектура программирования NVIDIA для GPU.
Основной вычислительный блок GPU, содержащий ядра CUDA, тензорные ядра, планировщики варпов, кэши и регистры. Несколько SM работают параллельно на одном GPU.
Общий термин для вычислительных единиц внутри SM. Включает CUDA Cores и Tensor Cores.
Аппаратный блок для выполнения сложных математических операций: синус, косинус, экспонента, обратная величина и др.
Отвечает за операции чтения и записи данных между регистрами и памятью GPU.
Компонент SM, который выбирает готовый варп для выполнения инструкции на доступных исполнительных блоках.
Ядро GPU, выполняющее скалярные арифметические инструкции. В отличие от ядер CPU, CUDA Cores не планируются независимо: группы из 32 ядер (варп) получают одну и ту же инструкцию от планировщика варпов, но применяют её к разным данным (модель SIMT — Single Instruction, Multiple Threads).
Специализированное ядро GPU, выполняющее матричные операции за одну инструкцию. Обеспечивает до 100× больше операций с плавающей запятой в секунду по сравнению с CUDA Cores. Используется для ускорения операций глубокого обучения, таких как умножение матриц с накоплением (D = AB + C).
Аппаратный блок для эффективной передачи данных между глобальной памятью и тензорной памятью, оптимизированный для работы с тензорными ядрами.
Организация компонентов внутри SM: распределение CUDA Cores, Tensor Cores, кэшей, регистров и планировщиков. Меняется от поколения к поколению GPU (Volta, Ampere, Hopper, Blackwell).
Группа из нескольких SM, объединённых для обработки графических и вычислительных задач, связанных с текстурной памятью.
Высокоуровневая группировка TPC, управляющая распределением задач между несколькими кластерами на GPU.
Быстрая память на кристалле SM, используемая для хранения локальных переменных потоков. Каждый поток имеет доступ к собственному набору регистров.
Быстрый кэш первого уровня внутри SM для ускорения доступа к часто используемым данным из глобальной памяти.
Специализированная высокоскоростная память, оптимизированная для питания тензорных ядер данными при выполнении матричных операций.
Основная память графического процессора (также называемая глобальной памятью). Хранит данные, доступные всем SM, но с более высокой задержкой по сравнению с кэшами и регистрами.
Эти термины относятся к программному обеспечению, выполняемому непосредственно на GPU («устройстве»).
Модель параллельного программирования NVIDIA для массово-параллельных процессоров. Включает иерархию потоков, модель памяти и механизмы синхронизации.
Низкоуровневый машинный код, выполняемый непосредственно на GPU. Генерируется компилятором из PTX.
Промежуточное представление (IR) CUDA, виртуальная ассемблерная платформа, независимая от конкретного поколения GPU. Компилируется в SASS драйвером во время выполнения.
Версия архитектуры GPU, определяющая доступные инструкции, функции и ограничения. Примеры: 7.5 (Turing), 8.0 (Ampere), 9.0 (Hopper).
Минимальная единица выполнения в CUDA. Каждый поток выполняет один экземпляр ядра с собственными регистрами и программным счётчиком.
Группа из 32 потоков, которые планируются и выполняются вместе на одном SM. Все потоки варпа выполняют одну и ту же инструкцию одновременно (модель SIMT). Варп — основная единица планирования на GPU.
Логическая группировка нескольких варпов для координации выполнения и синхронизации внутри блока потоков.
Также известен как Thread Block (блок потоков). Группа потоков, которые могут сотрудничать через общую память и синхронизацию. Все потоки блока выполняются на одном SM.
Функция CUDA, запускаемая с хоста (CPU) и выполняемая параллельно множеством потоков на GPU. Запускается один раз, но выполняется одновременно многими потоками.
Группа потоков, которые могут обмениваться данными через общую память и синхронизироваться. Базовая единица распределения работы на SM.
Коллекция всех блоков потоков, выполняющих одно ядро. Представляет весь объём параллельной работы для запуска ядра.
Структура организации потоков в CUDA: Grid → Block → Warp → Thread. Позволяет масштабируемое распределение работы по GPU.
Многоуровневая система памяти GPU: регистры → общая память → кэш L1/L2 → глобальная память → память хоста. Каждый уровень отличается по скорости, объёму и области видимости.
Самая быстрая память, приватная для каждого потока. Используется для локальных переменных и временных значений.
Быстрая память, разделяемая всеми потоками внутри одного блока потоков. Используется для межпоточного обмена данными и оптимизации доступа к глобальной памяти.
Основная память GPU, доступная всем потокам всех блоков. Имеет высокую пропускную способность, но также высокую задержку. Соответствует памяти GPU RAM.
Эти термины относятся к программному обеспечению, выполняемому на CPU («хосте») при управлении GPU-программами.
Полный стек инструментов NVIDIA для разработки GPU-приложений: компиляторы, библиотеки, API, профилировщики.
Расширение C++ с ключевыми словами и конструкциями для написания ядер и управления выполнением на GPU (__global__, <<<grid, block>>>, и др.).
Системное ПО, обеспечивающее взаимодействие между ОС/приложениями хоста и аппаратным обеспечением GPU.
Модуль ядра Linux для драйверов NVIDIA, обеспечивающий низкоуровневый доступ к GPU.
Низкоуровневый API для управления контекстами, модулями и памятью GPU. Предоставляет больше контроля, чем Runtime API.
Библиотека реализации CUDA Driver API в Linux.
API для мониторинга и управления состоянием GPU: температура, загрузка, память, питание.
Библиотека реализации NVML в Linux.
Утилита командной строки на базе NVML для мониторинга и управления GPU.
Высокоуровневый API для запуска ядер, управления памятью и синхронизации. Проще в использовании, чем Driver API.
Библиотека реализации CUDA Runtime API в Linux.
Компилятор CUDA: преобразует код CUDA C++ в PTX и/или машинный код для целевых архитектур GPU.
Компонент, компилирующий PTX в SASS во время выполнения, обеспечивая совместимость с разными поколениями GPU.
Интерфейс для создания инструментов профилирования и трассировки CUDA-приложений.
Профилировщик производительности для анализа работы CPU и GPU, выявления узких мест и оптимизации приложений.
Набор утилит для работы с бинарными файлами CUDA: cuobjdump, nvdisasm, cudabacktrace и др.
Оптимизированная библиотека линейной алгебры для GPU: матричные операции, векторные вычисления, решения СЛАУ.
Библиотека примитивов для глубокого обучения: свёртки, пулинг, нормализация, активации — оптимизирована для NVIDIA GPU.
GPUs используются, когда производительность приложения на универсальном оборудовании недостаточна. Это делает программирование для них принципиально отличным от большинства других форм программирования.
Компонент системы, ограничивающий общую производительность: вычисления, память, пропускная способность, задержки.
Визуальная модель производительности, связывающая арифметическую интенсивность с пропускной способностью памяти и вычислительной мощностью для определения теоретического максимума.
Ситуация, когда производительность ограничена скоростью выполнения арифметических операций, а не доступом к памяти.
Ситуация, когда производительность ограничена пропускной способностью или задержками памяти, а не вычислительной мощностью.
Отношение количества арифметических операций к объёму переданных данных (FLOP/байт). Ключевой параметр для анализа по модели Roofline.
Дополнительные затраты времени или ресурсов на управление, синхронизацию, передачу данных, не связанные с полезной работой.
Формула из теории массового обслуживания: L = λ × W, где L — среднее число задач в системе, λ — интенсивность поступления, W — среднее время выполнения. Применяется для анализа параллелизма GPU.
Максимальный объём данных, который может быть передан между памятью и вычислительными блоками за единицу времени (ГБ/с).
Максимальное количество арифметических операций, которые GPU может выполнить за единицу времени (TFLOP/s).
Техника параллельного выполнения множества варпов: пока один варп ожидает данные, планировщик переключается на другой, поддерживая загрузку исполнительных блоков.
Текущий статус варпа: активен, ожидает (stalled), завершён. Определяет, может ли варп быть выбран для выполнения.
Такт, в котором варп выполняет полезную инструкцию (не ожидает данные или синхронизацию).
Отношение числа активных варпов на SM к максимально возможному. Высокая заполненность помогает скрывать задержки памяти.
Доля времени, в течение которой исполнительные блоки (конвейеры) выполняют полезные инструкции.
Теоретический максимум операций в секунду, который может достичь GPU при идеальных условиях.
Процент тактов, в которых планировщик успешно выдаёт инструкцию варпу (не простаивает из-за зависимостей или конфликтов).
Доля времени, в течение которой SM выполняет полезные вычисления, а не простаивает.
Ситуация, когда потоки внутри варпа выполняют разные ветви кода (например, из-за условия if). Приводит к последовательному выполнению ветвей и снижению производительности.
Задержка выполнения инструкции из-за зависимости от результата предыдущей инструкции, ещё не завершённой.
Метрика, показывающая, насколько эффективно выполняются условные переходы внутри варпа (минимизация warp divergence).
Оптимизация доступа к глобальной памяти, когда соседние потоки обращаются к соседним адресам, позволяя объединить несколько запросов в один транзакционный.
Ситуация в общей памяти, когда несколько потоков одного варпа обращаются к разным адресам в одном банке памяти, вызывая последовательное обслуживание запросов.
Ситуация, когда количество регистров, требуемых потоком, превышает доступное, что приводит к выгрузке данных в локальную память и снижению производительности.
Оригинальный словарь на modal.com
Исходный код на GitHub
Документация NVIDIA CUDA
Руководство по лучшим практикам CUDA
Источник


