Открыть сервис

Унифицированная память

Унифицированная память (англ. Unified Memory, UM) — это технология организации доступа к данным в гетерогенных вычислительных системах, при которой центральный процессор (ЦП) и графический процессор (ГП) совместно используют единое адресное пространство памяти. В отличие от традиционных архитектур, где ЦП и ГП имеют собственную физическую память (оперативную и видеопамять соответственно) и обмениваются данными через явное копирование (например, через шину PCI Express), унифицированная память позволяет обоим устройствам обращаться к одним и тем же данным по одним и тем же виртуальным адресам, что упрощает программирование и повышает эффективность работы с данными.

История

Идея совместного использования памяти между разными вычислительными блоками восходит к концепциям систем с общей памятью (shared memory) в многопроцессорных архитектурах 1980-х годов. Однако практическая реализация для гетерогенных систем стала возможна лишь с развитием технологий виртуализации памяти и высокоскоростных интерконнектов.

Первой массовой реализацией унифицированной памяти стала технология Unified Memory от компании NVIDIA, представленная в 2013 году с архитектурой Kepler (серия GeForce GTX 700). Она позволяла разработчикам на платформе CUDA (Compute Unified Device Architecture) выделять память с помощью функции cudaMallocManaged(), которая автоматически управляла миграцией страниц между оперативной памятью ЦП и видеопамятью ГП. В 2016 году с архитектурой Pascal (GTX 1000) NVIDIA внедрила аппаратную поддержку страничной миграции, что значительно повысило производительность.

В 2017 году компания AMD представила собственную реализацию — Heterogeneous System Architecture (HSA) и технологию Heterogeneous Memory Management (HMM), которая была интегрирована в ядро Linux. В 2019 году компания Apple начала использовать унифицированную память в своих процессорах серии M (M1, M2, M3), где ЦП и ГП физически размещены на одном кристалле и имеют прямой доступ к единому пулу оперативной памяти (архитектура Unified Memory Architecture, UMA). Это стало ключевым отличием от традиционных ПК, где ЦП и ГП имеют отдельные банки памяти.

Архитектура и принцип работы

Традиционная модель (дискретная память)

В классических системах с дискретным ГП (например, видеокарта в слоте PCIe) ЦП и ГП имеют раздельные физические адресные пространства. Данные, которые должны быть обработаны на ГП, сначала копируются из оперативной памяти ЦП в видеопамять ГП через шину PCIe. После обработки результат копируется обратно. Этот процесс требует явного управления со стороны программиста (например, с помощью функций cudaMemcpy() в CUDA или clEnqueueWriteBuffer() в OpenCL). Недостатки: высокие накладные расходы на копирование, сложность кода и риск ошибок при управлении памятью.

Модель унифицированной памяти

Унифицированная память создаёт единое виртуальное адресное пространство, видимое как ЦП, так и ГП. Физически данные могут находиться в любом из доступных типов памяти (DRAM ЦП, VRAM ГП, а в перспективе — и в памяти других ускорителей). Система управления памятью (драйвер, аппаратный менеджер или операционная система) автоматически перемещает страницы данных между физическими устройствами по мере необходимости. Этот процесс называется миграцией страниц (page migration).

Основные компоненты реализации:

  • Менеджер памяти — программный или аппаратный модуль, отслеживающий, где находится каждая страница данных.
  • Таблица страниц — расширенная версия виртуальной памяти, которая включает информацию о том, на каком устройстве (ЦП или ГП) находится физическая копия страницы.
  • Механизм миграции — при обращении к странице, отсутствующей на текущем устройстве, возникает исключение (page fault), которое обрабатывается менеджером памяти: страница копируется с другого устройства на текущее.

Типы реализации

Аппаратная унифицированная память (UMA) — физически единый банк памяти, доступный всем вычислительным блокам. Пример: процессоры Apple M1, M2, M3, где ЦП и ГП используют одну и ту же оперативную память (LPDDR5) через общую шину. В таких системах нет необходимости в миграции страниц, так как все устройства имеют прямой доступ к одним и тем же физическим ячейкам. Однако пропускная способность памяти делится между всеми блоками.

Программно-аппаратная унифицированная память (Unified Virtual Memory, UVM) — виртуальное единое адресное пространство при физически разделённой памяти. Пример: NVIDIA CUDA Unified Memory. Здесь данные могут физически находиться в DRAM ЦП или VRAM ГП, а система автоматически перемещает их между устройствами. Это требует поддержки со стороны драйвера и аппаратных механизмов (например, таблицы страниц с поддержкой миграции).

Преимущества и недостатки

Преимущества

  • Упрощение программирования. Разработчику не нужно явно управлять копированием данных между ЦП и ГП. Код становится более читаемым и менее подвержен ошибкам, связанным с управлением памятью.
  • Гибкость. Данные могут быть обработаны на любом устройстве без необходимости перераспределения памяти. Это особенно полезно для алгоритмов с непредсказуемым доступом к данным (например, графовые алгоритмы, разреженные матрицы).
  • Поддержка сложных структур данных. Унифицированная память позволяет использовать указатели, динамические структуры (списки, деревья, хеш-таблицы) на ГП без необходимости их сериализации.
  • Эффективное использование памяти. В системах с UMA (Apple M-серии) данные не дублируются, что экономит общий объём памяти.

Недостатки

  • Накладные расходы на миграцию. В системах с раздельной физической памятью (NVIDIA, AMD) автоматическое копирование страниц может быть медленнее, чем ручное копирование больших блоков, особенно при частых переключениях контекста между ЦП и ГП.
  • Ограниченная пропускная способность. В UMA-архитектурах общая шина памяти может стать узким местом, так как ЦП и ГП конкурируют за доступ к одной и той же памяти.
  • Сложность реализации. Требует поддержки со стороны операционной системы, драйверов и аппаратного обеспечения. Не все платформы и приложения полностью поддерживают унифицированную память.
  • Проблемы с производительностью при неоптимальном доступе. Если данные часто перемещаются между устройствами (thrashing), производительность может упасть ниже, чем при ручном управлении.

Применение

Унифицированная память широко используется в следующих областях:

  • Машинное обучение и искусственный интеллект. Фреймворки, такие как TensorFlow, PyTorch и JAX, используют унифицированную память для упрощения работы с данными на ГП. Например, в PyTorch тензоры могут быть автоматически перемещены на ГП с помощью метода .to('cuda'), но при использовании Unified Memory (через cudaMallocManaged) это происходит прозрачно.
  • Научные вычисления. В задачах моделирования, симуляции (например, молекулярная динамика, вычислительная гидродинамика) унифицированная память позволяет обрабатывать большие наборы данных, которые не помещаются в видеопамять, за счёт подкачки страниц из оперативной памяти.
  • Графика и рендеринг. В системах с UMA (Apple M-серии) унифицированная память позволяет эффективно обрабатывать текстуры и буферы, которые одновременно используются ЦП и ГП, без дополнительного копирования.
  • Встраиваемые системы и мобильные устройства. В процессорах Qualcomm Snapdragon и Samsung Exynos используется унифицированная память для экономии энергии и уменьшения задержек при обработке графики и ИИ-задач.

Примеры реализации

NVIDIA CUDA Unified Memory

В CUDA 6.0 (2013) была введена функция cudaMallocManaged(), которая выделяет память, управляемую драйвером. При первом обращении к данным на ГП драйвер автоматически копирует страницы из оперативной памяти ЦП в видеопамять. В архитектуре Pascal (2016) была добавлена аппаратная поддержка страничной миграции, что позволило обрабатывать исключения (page faults) на ГП без вмешательства ЦП. В архитектуре Volta (2017) появилась поддержка доступа к памяти ЦП из ГП через шину NVLink, что увеличило пропускную способность.

AMD HSA и HMM

AMD Heterogeneous System Architecture (HSA) — это открытый стандарт для гетерогенных вычислений, включающий поддержку унифицированной памяти. Heterogeneous Memory Management (HMM) — это реализация для ядра Linux, которая позволяет ГП (например, дискретным видеокартам AMD Radeon) использовать единое адресное пространство с ЦП. HMM была включена в ядро Linux начиная с версии 4.14 (2017).

Apple Unified Memory Architecture (UMA)

В процессорах Apple M1 (2020) и последующих ЦП и ГП интегрированы на одном кристалле и имеют общий доступ к оперативной памяти через высокоскоростную шину. Это позволяет достичь низкой задержки и высокой пропускной способности (до 100 ГБ/с в M1, до 800 ГБ/с в M2 Ultra). В отличие от NVIDIA и AMD, в Apple UMA нет миграции страниц, так как все устройства физически подключены к одной памяти.

Критика и ограничения

Несмотря на преимущества, унифицированная память не является панацеей. Основные критические замечания:

  • Производительность при больших объёмах данных. В системах с раздельной памятью (NVIDIA) автоматическая миграция страниц может быть медленнее, чем ручное копирование, особенно если данные используются только на одном устройстве. Для задач с предсказуемым доступом (например, матричные умножения) ручное копирование часто эффективнее.
  • Сложность отладки. Ошибки, связанные с миграцией страниц, могут быть трудно воспроизводимыми и диагностируемыми, особенно в многопоточных приложениях.
  • Ограниченная поддержка. Не все графические процессоры и операционные системы полностью поддерживают унифицированную память. Например, в старых версиях CUDA или на некоторых платформах Linux могут отсутствовать необходимые драйверы.
  • Конкуренция за пропускную способность. В UMA-архитектурах (Apple) одновременная работа ЦП и ГП с памятью может приводить к снижению производительности, если оба устройства активно обращаются к данным.

Источники

  • NVIDIA CUDA Programming Guide, раздел «Unified Memory».
  • AMD Heterogeneous System Architecture (HSA) Foundation Specification.
  • Документация Apple по архитектуре процессоров M-серии.
  • Статья «Heterogeneous Memory Management (HMM)» в ядре Linux (kernel.org).
  • Учебные материалы по параллельным вычислениям (например, курс «Parallel Computing» от NVIDIA Deep Learning Institute).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →