Как разрабатывать чипы GPU
Chapter 5 Gpu Memory System Design

ТЕМА 5: Конструирование системы памяти GPU

Графические процессорные устройства (GPU) превратились в высокопараллельные программируемые ускорители, способные достигать высокой производительности и энергоэффективности в широком диапазоне приложений. Система памяти является критически важным компонентом современных архитектур GPU, поскольку она должна обеспечивать огромное количество одновременных потоков быстрым доступом к данным. В этой главе мы рассмотрим ключевые элементы конструкции системы памяти GPU, в том числе технологии DRAM, используемые в GPU, контроллеры памяти и арбитраж, разделяемую память и кэши, а также методы эффективного использования памяти.

Технологии DRAM для GPU

Динамическая оперативная память с произвольным доступом (DRAM) является основной технологией, используемой для реализации основной памяти в современных вычислительных системах, включая GPU. DRAM обеспечивает высокую плотность и относительно низкую стоимость по сравнению с другими технологиями памяти. Однако DRAM также имеет более высокую латентность доступа и меньшую пропускную способность по сравнению с памятью на кристалле, такой как кэши и регистровые файлы.

GPU, как правило, используют специализированные технологии DRAM, оптимизированные для высокой пропускной способности, а не низкой латентности. Некоторые распространенные технологии DRAM, используемые в GPU, включают:

  1. GDDR (Graphics Double Data Rate): GDDR - это специализированная технология DRAM, разработанная для графических карт и игровых консолей. Она обеспечивает более высокую пропускную способность, чем стандартная DDR DRAM, за счет использования более широкой шины и более высоких тактовых частот. GDDR5 и GDDR6 являются наиболее последними версиями, предлагающими пропускную способность до 512 ГБ/с и 768 ГБ/с соответственно.

  2. HBM (High Bandwidth Memory): HBM - это высокопроизводительная трехмерная технология стекированной DRAM, обеспечивающая очень высокую пропускную способность и низкое энергопотребление. HBM укладывает несколько чипов DRAM один на другой и соединяет их с помощью сквозных кремниевых переходов (TSV), что позволяет достичь гораздо более высоких скоростей передачи данных, чем традиционная DRAM. HBM2 может обеспечивать пропускную способность до 1 ТБ/с.

На рисунке 5.1 показано различие между традиционной памятью GDDR и трехмерной стекированной HBM.

   Память GDDR
```Память HBM
  ____________                   ______________________  
 |            |                 |  ___________________  |
 |   DRAM     |                 | |                   | |
 |   Chips    |                 | |      DRAM Dies    | |
 |            |                 | |___________________| |
 |            |                 |           .          |
 |            |                 |           .          | 
 |            |                 |           .          |
 |____________|                 |  ___________________  |
      |                         | |                   | |
     PCB                        | |  Logic Die (GPU)  | |
                                | |___________________| |
                                |______________________|

Рисунок 5.1: Сравнение архитектур памяти GDDR и HBM.

Выбор технологии DRAM зависит от конкретных требований GPU, таких как бюджет питания, форм-фактор и целевые приложения. Высокопроизводительные GPU для игр и профессиональной графики часто используют GDDR6 из-за его высокой пропускной способности, в то время как HBM2 более распространен в GPU для центров обработки данных и HPC, где энергоэффективность является ключевой проблемой.

## Контроллеры памяти и арбитраж

Контроллеры памяти отвечают за управление потоком данных между GPU и внешней DRAM. Они обрабатывают запросы на память от ядер GPU, планируют команды DRAM и оптимизируют модели доступа к памяти для максимизации использования пропускной способности и минимизации задержек.

Контроллеры памяти GPU, как правило, используют многоканальный дизайн для обеспечения высокой пропускной способности и параллельного доступа к DRAM. Каждый канал памяти подключен к одному или нескольким микросхемам DRAM и имеет свои собственные шины команд и данных. Контроллер памяти распределяет запросы на память по доступным каналам для максимизации параллелизма и избежания конфликтов каналов.

На Рисунке 5.2 показана упрощенная схема контроллера памяти GPU с четырьмя каналами.

Ядра GPU | | | | | КоФайл на русском языке:

mory | | Контроллер памяти | |_____________| | | | | Ch0 Ch1 Ch2 Ch3 | | | | DRAM DRAM DRAM DRAM

Рисунок 5.2: Контроллер памяти GPU с четырьмя каналами.

Арбитраж памяти - это процесс принятия решения о том, какие запросы к памяти должны быть обслужены в первую очередь, когда есть несколько неисполненных запросов. GPU используют различные стратегии арбитража для оптимизации производительности и справедливости системы памяти:

1. **Первым пришёл - первым обслужен (FCFS)**: Самая простая стратегия арбитража, при которой запросы обслуживаются в порядке их поступления. FCFS справедлива, но может привести к субоптимальной производительности из-за отсутствия перераспределения запросов.

2. **Круговая очередь (RR)**: Запросы обслуживаются в циклическом порядке, обеспечивая равный приоритет для всех запрашивающих. RR обеспечивает справедливость, но может не оптимизировать локальность или срочность запросов.

3. **Приоритетный**: Запросам назначаются приоритеты на основе различных критериев, таких как тип запроса (например, чтение против записи), источник (например, текстура против кэша L2) или возраст запроса. Запросы с более высоким приоритетом обслуживаются в первую очередь.

4. **Осведомлённый о дедлайнах**: Запросы планируются в соответствии с их дедлайнами, чтобы обеспечить своевременное выполнение. Это особенно важно для приложений реального времени.

5. **Осведомлённый о локальности**: Контроллер памяти пытается планировать запросы, которые обращаются к соседним участкам памяти, вместе, чтобы максимизировать попадания в строчные буферы и минимизировать накладные расходы на преднамотку и активацию DRAM.

Передовые контроллеры памяти GPU часто используют комбинацию этих стратегий арбитража для достижения наилучшего баланса между производительностью, справедливостью и требованиями реального времени.

## Общая память и кэши

GPU используют иерархическую систему памяти, включающую как управляемые программно, так и аппаратно управляемые кэши, для снижения латентности и требований к пропускной способности основной памяти.

### Общая память

Общая память - это управляемое программно, размещённое на кристалле пространство памяти, которое разделяется между потоками блока потоков (NVIDIA) или рабочих групп (AMD). ЭтоRussian translation:

kgroup (OpenCL). Он действует как управляемый пользователем кэш, позволяя программистам явно управлять перемещением и повторным использованием данных в блоке потоков.

Разделяемая память, как правило, реализуется с использованием быстрых, многопортовых SRAM-банков для обеспечения доступа с низкой задержкой и высокой пропускной способностью. Каждый банк может обслуживать один запрос на память за цикл, поэтому оборудование должно арбитрировать между одновременными доступами к одному и тому же банку, чтобы избежать конфликтов.

Рисунок 5.3 иллюстрирует организацию разделяемой памяти в ядре GPU.

Блок потоков


| _________________ | | | Поток 0 | | | || | | . | | . | | . | | _________________ | | | Поток N-1 | | | || | |_______________| | | | | | Разделяемая память | | ____________ | | | Банк 0 | | | |____| | | | Банк 1 | | | || | | . | | . | | . | | | Банк M-1 | | | |__________| | ||

Рисунок 5.3: Организация разделяемой памяти в ядре GPU.

Правильное использование разделяемой памяти может значительно улучшить производительность ядер GPU, снижая количество обращений к более медленной внешней памяти DRAM. Однако это требует тщательного программирования, чтобы обеспечить эффективное совместное использование данных и избежать конфликтов банков.

### Управляемые аппаратурой кэши

В дополнение к управляемой программным обеспечением разделяемой памяти, GPU также используют управляемые аппаратурой кэши для автоматического использования локальности данных и снижения обращений к DRAM. Наиболее распространенными типами управляемых аппаратурой кэшей в GPU являются:

1. **Кэш данных L1**: Небольшой, закрепленный за каждым ядром кэш, который хранит недавно доступные данные глобальной памяти. Кэш L1 обычно является частным для каждого ядра GPU и используется для снижения задержки доступа к глобальной памяти.

2. **Текстурный кэш**: Специализированный кэш, предназначенный для оптимизации доступа к читаемымВот русский перевод файла с markdown-форматированием и комментариями:

### Данные текстуры

Кэш текстур оптимизирован для двумерной пространственной локальности и поддерживает аппаратно-ускоренную фильтрацию и интерполяцию операций.

3. **Константный кэш**: Небольшой кэш только для чтения, который хранит часто используемые константные данные. Константный кэш транслируется во все тред в варпе, что делает его эффективным для данных, которые используются многими тредами.

4. **Кэш L2**: Более крупный разделяемый кэш, расположенный между ядрами GPU и основной памятью. Кэш L2 хранит данные, вытесненные из кэшей L1, и используется для уменьшения количества обращений к DRAM.

На Рисунке 5.4 показана типичная иерархия памяти GPU с аппаратно-управляемыми кэшами.

GPU Core 0 GPU Core 1 GPU Core N-1


| | | | | | | L1 Data | | L1 Data | | L1 Data | | Cache | | Cache | | Cache | || || || | | | | | | | Texture | | Texture | | Texture | | Cache | | Cache | | Cache | || || || | | | | | | | Constant | | Constant | | Constant | | Cache | | Cache | | Cache | || || |______________| | | | |_________________|_________________| | | | | | L2 Cache | |_____________| | | Main Memory

Рисунок 5.4: Иерархия памяти GPU с аппаратно-управляемыми кэшамиВот русский перевод файла ches с ненереведенным кодом:

Кэши, управляемые аппаратно, помогают повысить производительность приложений GPU, автоматически используя локальность данных и сокращая количество обращений к DRAM. Однако они также могут вызывать проблемы когерентности и согласованности кэша, особенно в контексте параллельных моделей программирования, таких как CUDA и OpenCL.

## Техники для эффективного использования памяти

Эффективное использование системы памяти GPU имеет решающее значение для достижения высокой производительности и энергоэффективности. Некоторые ключевые методики оптимизации использования памяти в приложениях GPU включают:

1. **Объединение (Coalescing)**: Расположение обращений к памяти от потоков в варпе к смежным областям памяти, позволяющее аппаратному обеспечению объединять их в одну более широкую транзакцию памяти. Объединение максимизирует использование пропускной способности DRAM и сокращает количество транзакций памяти.

2. **Оптимизация схемы размещения данных**: Организация структур данных в памяти для максимизации пространственной локальности и минимизации промахов кэша. Это включает в себя методики, такие как "структура массивов" (SoA), которая группирует элементы данных одного типа вместе, и "массив структур" (AoS), которая хранит элементы данных, принадлежащие одной структуре, вместе.

3. **Кэширование и предвыборка**: Эффективное использование аппаратно управляемых кэшей за счет использования временной и пространственной локальности в моделях доступа к памяти. Это можно достичь с помощью техник, таких как секционирование данных, которое разбивает данные на меньшие фрагменты, помещающиеся в кэш, и программная предвыборка, которая явно загружает данные в кэш перед их использованием.

4. **Планирование доступа к памяти**: Перераспределение доступов к памяти для максимизации попаданий в буфер строк памяти и минимизации overhead'а предварительной подготовки и активации DRAM. Это можно сделать с помощью аппаратных механизмов в контроллере памяти или с помощью программных методик, таких как оптимизация моделей доступа и преобразования схемы размещения данных.

5. **Сжатие**: Применение методов сжатия данных для уменьшения размера данных, передаваемых между памятью и ядрами GPU. Это можетПомогите снизить нагрузку на пропускную способность и уменьшить энергопотребление, связанное с перемещением данных.

6. **Виртуализация памяти**: Использование техник виртуальной памяти для предоставления единого, непрерывного адресного пространства для приложений GPU. Это позволяет более гибко управлять памятью и использовать такие возможности, как demand paging, которые могут помочь снизить потребление памяти и повысить эффективность использования системы.

Рисунок 5.5 иллюстрирует некоторые из этих техник в контексте системы памяти GPU.

GPU Cores | | | | | Coalescing | || | | | | | Data Layout | | Optimization| || | | | | | Caching and | | Prefetching | || | | | | | Memory | | Access | | Scheduling | || | | | | | Compression | || | | | | | Memory | |Virtualization| || | DRAM

Рисунок 5.5: Техники эффективного использования памяти в системе памяти GPU.

1. **Coalescing**: Организация обращений к памяти из потока нитей в варпе к соседним ячейкам памяти, позволяя оборудованию объединять их в одну более широкую операцию обращения к памяти. Coalescing максимизирует использование пропускной способности DRAM и уменьшает количество операций обращения к памяти.

   Пример:
   ```c
   // Неоптимизированная схема доступа
   int idx = threadIdx.x;
   float val = input[idx * stride];
   
   // Оптимизированная схема доступа
   int idx = threadIdx.x;
   float val = input[idx];
  1. Оптимизация расположения данных: Организация структур данных в памяти для максимизации пространственной локальности и минимизации промахов в кэше. Это включает в себя такие техники, как structure-of-arrays (SoA) layout, которая группирует элементы данных одного типа вместе, и array-of-structures (AoS) layoHere is the Russian translation of the markdown file, with the code comments translated:

Расположение данных, при котором элементы, принадлежащие одной и той же структуре, находятся рядом друг с другом.

Пример:

// Макет Array-of-Structures (AoS)
struct Point {
    float x;
    float y;
    float z;
};
Point points[N];
 
// Макет Structure-of-Arrays (SoA)
struct Points {
    float x[N];
    float y[N];
    float z[N];
};
Points points;
  1. Кэширование и предвыборка: Эффективное использование аппаратно-управляемых кэшей за счет использования временной и пространственной локальности в моделях доступа к памяти. Это можно достичь с помощью таких техник, как разбиение данных на более мелкие фрагменты, которые помещаются в кэш (data tiling), и программной предвыборки, которая явно загружает данные в кэш перед их использованием.

    Пример:

    // Разбиение данных на фрагменты
    for (int i = 0; i < N; i += TILE_SIZE) {
        for (int j = 0; j < N; j += TILE_SIZE) {
            // Обработка фрагмента данных, который помещается в кэш
            for (int ii = i; ii < i + TILE_SIZE; ii++) {
                for (int jj = j; jj < j + TILE_SIZE; jj++) {
                    // Выполнение вычислений на A[ii][jj]
                }
            }
        }
    }
  2. Планирование доступа к памяти: Перераспределение доступов к памяти для максимизации попаданий в буфер строк и минимизации накладных расходов на предзарядку и активацию в DRAM. Это можно сделать с помощью аппаратных механизмов в контроллере памяти или с помощью программных методов, таких как оптимизация моделей доступа и преобразования макета данных.

  3. Сжатие: Применение методов сжатия данных для уменьшения размера данных, передаваемых между памятью и ядрами GPU. Это может помочь ослабить проблемы с пропускной способностью и снизить энергопотребление, связанное с перемещением данных.

    Примеры:

    • Дельта-кодирование: хранение разностей между последовательными значениями вместо фактических значений.
    • Кодирование длин серий: замена повторяющихся значений единичным экземпляром и счетчиком.
    • Кодирование Хаффмана: присвоение более коротких двоичных последовательностей более часто встречающимся значениям.
  4. Виртуальная память****Виртуализация: Использование методов виртуальной памяти для обеспечения единого, непрерывного адресного пространства для приложений GPU. Это позволяет более гибко управлять памятью и реализовывать такие функции, как страничная выгрузка, которые могут помочь снизить потребление памяти и повысить эффективность использования системы.

    Пример:

    • Единая виртуальная адресация (Unified Virtual Addressing, UVA) в CUDA: Позволяет потокам GPU напрямую обращаться к памяти CPU, используя единый указатель, упрощая управление памятью в гетерогенных системах.

Многокристальные модули (Multi-Chip-Module) GPUs

По мере роста производительности и требований к энергопотреблению GPU традиционные одночиповые конструкции могут не справляться с растущим спросом. Многокристальные модули (Multi-Chip-Module, MCM), в которых несколько чипов GPU интегрируются в один корпус, стали перспективным решением этой проблемы.

Конструкции MCM GPU имеют ряд преимуществ:

  1. Более высокая пропускная способность памяти: Интеграция нескольких стеков или чипов памяти позволяет MCM GPU обеспечить значительно более высокую пропускную способность памяти по сравнению с одночиповыми конструкциями.

  2. Лучшая масштабируемость: Конструкции MCM позволяют интегрировать больше вычислительных блоков и контроллеров памяти, что дает возможность масштабировать GPU до более высоких уровней производительности.

  3. Более высокий выход годных и экономическая эффективность: Более мелкие индивидуальные чипы в конструкции MCM могут иметь лучшую производительность и быть более экономически эффективными по сравнению с крупными монолитными чипами.

Тем не менее, конструкции MCM GPU также вызывают новые проблемы, такие как:

  1. Межчиповая связь: Эффективная связь между различными чипами в корпусе MCM имеет решающее значение для производительности. Требуются высокопропускные, низкокоммуникационные интерконнекты для минимизации накладных расходов на перемещение данных между чипами.

  2. Подача питания и тепловой менеджмент: Конструкции MCM требуют тщательной организации подачи питания и теплового менеджмента для обеспечения оптимальной производительности и надежности.

  3. Программная поддержка: Для полного использования преимуществ многокристальной архитектуры MCM GPU могут потребоваться изменения в модели программирования и системах выполнения.

Исследования в этой области...Данная область исследований посвящена дизайну и оптимизации MCM GPU, включая архитектуру системы памяти, дизайн межсоединений и управление ресурсами.

Например, Arunkumar et al. [2017] предлагают дизайн MCM GPU, который использует высокопропускную, низкотактовую межсоединительную сеть для соединения нескольких GPU-чипов. Авторы также предлагают архитектуру системы памяти, которая использует увеличенную пропускную способность и емкость дизайна MCM для улучшения производительности и энергоэффективности.

Другим примером является работа Milic et al. [2018], которая предлагает схему управления ресурсами для MCM GPU, направленную на улучшение использования ресурсов и снижение накладных расходов на межчиповые коммуникации. Схема использует сочетание аппаратных и программных методов для мониторинга использования ресурсов и моделей связи приложения, а также принятия динамических решений по распределению ресурсов.

Заключение

Система памяти является критически важным компонентом современных архитектур GPU, и ее дизайн и оптимизация могут оказывать существенное влияние на общую производительность и эффективность системы. По мере роста требований к параллельным рабочим нагрузкам исследователи изучают широкий спектр техник для улучшения производительности, масштабируемости и адаптируемости систем памяти GPU.

Некоторые ключевые направления исследований в этой области включают планирование доступа к памяти и дизайн межсоединений, эффективность кэширования, приоритизацию запросов к памяти и обход кэша, использование гетерогенности между потоками, согласованный обход кэша, адаптивное управление кэшем, приоритизацию кэша, размещение страниц виртуальной памяти, размещение данных и конструкции многочипных модулей.

Исследуя эти и другие техники, ученые стремятся разработать системы памяти GPU, которые могут соответствовать растущим потребностям параллельных рабочих нагрузок, сохраняя при этом высокую производительность и энергоэффективность. По мере того, как GPU продолжают развиваться и находить новые области применения, таких как машинное обучение, научные вычисления и аналитика данных, дизайн и оптимизация их систем памяти остаются важными задачами.Стебли будут оставаться важной областью исследований и инноваций.