stringtranslate.com

Модель доступа к памяти

В вычислительной технике шаблон доступа к памяти или шаблон доступа ввода-вывода — это шаблон, с помощью которого система или программа считывает и записывает память на вторичном хранилище . Эти шаблоны различаются по уровню локальности ссылок и существенно влияют на производительность кэша , [1] а также имеют последствия для подхода к параллелизму [2] [3] и распределению рабочей нагрузки в системах с общей памятью . [4] Кроме того, проблемы с когерентностью кэша могут влиять на производительность многопроцессорных систем , [5] что означает, что определенные шаблоны доступа к памяти устанавливают потолок для параллелизма (который стремятся преодолеть многоядерные подходы). [6]

Компьютерная память обычно описывается как « случайный доступ », но обходы программным обеспечением все равно будут демонстрировать закономерности, которые можно использовать для повышения эффективности. Существуют различные инструменты, помогающие проектировщикам систем [7] и программистам понимать, анализировать и улучшать закономерности доступа к памяти, включая VTune и Vectorization Advisor , [8] [9] [10] [11] [12] включая инструменты для решения закономерностей доступа к памяти графического процессора [13]

Модели доступа к памяти также имеют последствия для безопасности , [14] [15] , что побуждает некоторых пытаться скрыть активность программы из соображений конфиденциальности. [16] [17]

Примеры

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

Последовательный

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

Шагал

Пошаговые или простые 2D, 3D шаблоны доступа (например, пошаговое прохождение многомерных массивов ) также легко предсказать, и они встречаются в реализациях алгоритмов линейной алгебры и обработки изображений . Циклическая мозаика является эффективным подходом. [19] Некоторые системы с DMA предоставляют пошаговый режим для передачи данных между субплиткой больших 2D массивов и памятью блокнота . [20]

Линейный

Линейный шаблон доступа тесно связан с «пошаговым», где адрес памяти может быть вычислен из линейной комбинации некоторого индекса. Последовательное прохождение индексов с линейным шаблоном дает пошаговый доступ . Линейный шаблон доступа для записей (с любым шаблоном доступа для неперекрывающихся чтений) может гарантировать, что алгоритм может быть распараллелен, что используется в системах, поддерживающих вычислительные ядра .

Ближайший сосед

Модели доступа к памяти ближайшего соседа появляются в моделировании и связаны с последовательными или шаговыми моделями. Алгоритм может проходить по структуре данных, используя информацию от ближайших соседей элемента данных (в одном или нескольких измерениях) для выполнения вычисления. Они распространены в физических симуляциях, работающих на сетках. [21] Ближайший сосед может также относиться к межузловой связи в кластере; физические симуляции, которые полагаются на такие локальные модели доступа, могут быть распараллелены с данными, разделенными на узлы кластера, с чисто ближайшей соседней связью между ними, что может иметь преимущества для задержки и пропускной способности связи. Этот вариант использования хорошо отображается на топологию сети тора . [22]

2D пространственно когерентный

В 3D-рендеринге шаблоны доступа для текстурного отображения и растеризации небольших примитивов (с произвольными искажениями сложных поверхностей) далеки от линейных, но все еще могут демонстрировать пространственную локальность (например, в пространстве экрана или пространстве текстуры ). Это можно превратить в хорошую локальность памяти с помощью некоторой комбинации порядка Мортона [23] и тайлинга для текстурных карт и данных буфера кадра (отображение пространственных областей на строки кэша) или путем сортировки примитивов с помощью отложенного рендеринга на основе тайлов . [24] Также может быть выгодно хранить матрицы в порядке Мортона в библиотеках линейной алгебры . [25]

Разброс

Шаблон доступа к памяти с разбросом объединяет последовательное чтение с индексированной/случайной адресацией для записи. [26] По сравнению со сбором, он может создавать меньшую нагрузку на иерархию кэша, поскольку элемент обработки может отправлять записи по принципу «запустил и забыл» (полностью минуя кэш), используя при этом предсказуемую предварительную выборку (или даже DMA) для своих исходных данных.

Однако распараллелить его может быть сложнее, поскольку нет гарантии, что записи не будут взаимодействовать [27] , и многие системы по-прежнему проектируются с учетом того, что аппаратный кэш будет объединять множество небольших записей в более крупные.

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

Консоль PlayStation 2 использовала обычное обратное текстурное отображение, но обрабатывала любую обработку scatter/gather "на чипе" с помощью EDRAM, в то время как 3D-модель (и множество текстурных данных) из основной памяти подавались последовательно через DMA. Вот почему в ней отсутствовала поддержка индексированных примитивов, и иногда требовалось управлять текстурами "заранее" в списке отображения .

Собирать

В шаблоне доступа к памяти со сбором данных чтения адресуются или индексируются случайным образом, тогда как записи являются последовательными (или линейными). [26] Примером может служить обратное текстурное отображение , где данные могут быть записаны линейно по строкам сканирования , тогда как адреса текстур произвольного доступа вычисляются по пикселям .

По сравнению с scatter, недостаток в том, что кэширование (и обход задержек) теперь необходимо для эффективного чтения небольших элементов, однако его легче распараллелить, поскольку записи гарантированно не будут перекрываться. Таким образом, метод gather более распространен для программирования gpgpu , [27] где массивная потоковая обработка (обеспечиваемая параллелизмом) используется для сокрытия задержек чтения. [27]

Комбинированный сбор и рассеивание

Алгоритм может собирать данные из одного источника, выполнять некоторые вычисления в локальной или встроенной памяти и рассеивать результаты в другом месте. По сути, это полная работа конвейера GPU при выполнении 3D-рендеринга — сбор индексированных вершин и текстур и рассеивание затененных пикселей в пространстве экрана . Растеризация непрозрачных примитивов с использованием буфера глубины является «коммутативной», что позволяет переупорядочивать, что облегчает параллельное выполнение. В общем случае потребуются примитивы синхронизации.

Случайный

На противоположной стороне находится действительно случайный шаблон доступа к памяти. Несколько многопроцессорных систем специализируются на работе с ними. [28] Подход PGAS может помочь, сортируя операции по данным на лету (полезно, когда проблема *заключается* в выяснении локальности несортированных данных). [21] Структуры данных, которые в значительной степени полагаются на отслеживание указателя, часто могут давать плохую локальность ссылок , хотя сортировка иногда может помочь. При наличии действительно случайного шаблона доступа к памяти может быть возможным разбить его (включая этапы рассеивания или сбора или другую промежуточную сортировку), что может улучшить локальность в целом; это часто является предпосылкой для распараллеливания .

Подходы

Проектирование, ориентированное на данные

Ориентированное на данные проектирование — это подход, призванный максимизировать локальность ссылок путем организации данных в соответствии с тем, как они обрабатываются на различных этапах программы, в отличие от более распространенного объектно-ориентированного подхода (т. е. организации таким образом, что структура данных явно отражает схему доступа). [29]

Контраст с местностью ссылки

Локальность ссылки относится к свойству, демонстрируемому шаблонами доступа к памяти. Программист изменит шаблон доступа к памяти (переработав алгоритмы), чтобы улучшить локальность ссылки, [30] и/или увеличить потенциал для параллелизма. [26] Программист или проектировщик системы может создать фреймворки или абстракции (например, шаблоны C++ или функции более высокого порядка ), которые инкапсулируют определенный шаблон доступа к памяти. [31] [32]

Различные соображения относительно шаблонов доступа к памяти появляются в параллелизме за пределами локальности ссылок, а именно разделение чтения и записи. Например: даже если чтение и запись «совершенно» локальны, их может быть невозможно распараллелить из-за зависимостей ; разделение чтения и записи на отдельные области дает другой шаблон доступа к памяти, который может изначально показаться хуже в терминах чистой локальности, но желателен для использования современного параллельного оборудования. [26]

Локальность ссылки может также относиться к отдельным переменным (например, способность компилятора кэшировать их в регистрах ), в то время как термин «шаблон доступа к памяти» относится только к данным, хранящимся в индексируемой памяти (особенно в основной памяти ).

Смотрите также

Ссылки

  1. ^ "проектирование, ориентированное на данные" (PDF) .
  2. ^ Jang, Byunghyun; Schaa, Dana; Mistry, Perhaad и Kaeli, David (2010-05-27). «Использование шаблонов доступа к памяти для повышения производительности памяти в архитектурах с параллельными данными». IEEE Transactions on Parallel and Distributed Systems . 22 (1). Нью-Йорк: IEEE : 105–118. doi : 10.1109/TPDS.2010.107. eISSN  1558-2183. ISSN  1045-9219. S2CID  15997131. Уникальный идентификатор NLM 101212014.
  3. ^ Джефферс, Джеймс; Рейндерс, Джеймс; Содани, Авинаш (2016-05-31). оптимизация xeon phi. ISBN 9780128091951.
  4. ^ «Анализ энергии и производительности преобразований кода для шаблонов доступа к данным на основе PGAS» (PDF) .
  5. ^ «Улучшение архитектур когерентности кэша с помощью шаблонов доступа к памяти для встраиваемых многоядерных систем» (PDF) .
  6. ^ "Intel Terascale" (PDF) .
  7. ^ Анализ моделей доступа к памяти. WWC '98. 29 ноября 1998. стр. 105. ISBN 9780769504506.
  8. ^ "QUAD — анализатор шаблонов доступа к памяти" (PDF) .
  9. ^ «Dymaxion: Оптимизация моделей доступа к памяти для гетерогенных систем» (PDF) .
  10. ^ "Оценка схемы классификации доступа к памяти для программ с интенсивным использованием указателей и числовых программ". 1996. CiteSeerX 10.1.1.48.4163 .  {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  11. ^ Мацубара, Юки; Сато, Юкинори (2014). «Анализ шаблонов доступа к онлайн-памяти с помощью инструмента профилирования приложений». 2014 Второй международный симпозиум по вычислениям и сетям . С. 602–604. doi :10.1109/CANDAR.2014.86. ISBN 978-1-4799-4152-0. S2CID  16476418.
  12. ^ «Приведение данных и кода в порядок: данные и макет».
  13. ^ CuMAPz: инструмент для анализа шаблонов доступа к памяти в CUDA. Dac '11. 5 июня 2011 г. стр. 128–133. doi :10.1145/2024724.2024754. ISBN 9781450306362. S2CID  16065152.
  14. ^ «Защита шаблона доступа к памяти для устройств с ограниченными ресурсами» (PDF) .
  15. ^ "Понимание атак на кэш" (PDF) .
  16. ^ "защита данных в облаке".
  17. ^ "повышение-безопасности-облака-с----забывчивой-оперативной-памятью". 24 сентября 2013 г.предлагаемая конструкция оперативной памяти, позволяющая избежать уязвимостей шаблона доступа к памяти
  18. ^ Чак Паридон. "Руководство по сравнительному анализу производительности хранилища - Часть I: Проектирование рабочей нагрузки" (PDF) . На практике шаблоны доступа к вводу-выводу столь же многочисленны, как и звезды
  19. ^ «оптимизация для тайлинга и локальности данных» (PDF) .В статье рассматривается циклическая мозаика и ее последствия для параллельного кода.
  20. ^ «Оптимальное разбиение данных на 2D-диски для DMA-передач на MPSoC» (PDF) .
  21. ^ ab "Разделенное глобальное адресное пространство, программирование". YouTube .охватывает случаи, когда PGAS является выигрышным вариантом, когда данные могут быть еще не отсортированы, например, при работе со сложными графиками — см. «наука в спектре нерегулярности».
  22. ^ «Количественная оценка локальности в моделях доступа к памяти в приложениях HPC» (PDF) .упоминает о моделях доступа к ближайшему соседу в кластерах
  23. ^ «Проектирование и анализ архитектуры кэша для текстурного картирования» (PDF) .см. заказ Мортона,шаблон доступа к текстуре
  24. ^ "Приказ Мортона об ускорении текстурирования" (PDF) .
  25. ^ «Матрицы порядка Мортона заслуживают поддержки компиляторов. Технический отчет 533» (PDF) .обсуждает важность порядка Мортона для матриц
  26. ^ abcd "gpgpu scatter vs gather". Архивировано из оригинала 2016-06-14 . Получено 2016-06-13 .
  27. ^ abc GPU gems. 2011-01-13. ISBN 9780123849892.в тексте рассматриваются «шаблоны доступа к рассеянной памяти» и «шаблоны доступа к собранной памяти»
  28. ^ «Cray и HPCC: контрольные показатели и результаты за прошедший год» (PDF) .см. глобальные результаты случайного доступа для Cray X1. векторная архитектура для сокрытия задержек, не столь чувствительна к когерентности кэша
  29. ^ "проектирование, ориентированное на данные" (PDF) .
  30. ^ «оптимизация-структур-данных-и-шаблонов-доступа-к-памяти-для-улучшения-локальности-данных».
  31. ^ «Шаблонный механизм доступа к памяти для ускорителей в SoC» (PDF) .
  32. ^ «Многоцелевая векторизация с помощью универсальной библиотеки MTPS C++» (PDF) .библиотека шаблонов C++ для создания оптимизированных шаблонов доступа к памяти