Малёжина Дарья Олеговна
Малёжина Д.О. Подписчиков: 3372
Рейтинг Рейтинг Рейтинг Рейтинг Рейтинг 8.6М

Последовательность памяти в архитектуре процессоров

0 комментариев

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

Самая строгая модель последовательности памяти, доступная сегодня, называется последовательной согласованностью. Формально она определяется следующим образом:

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

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

Если бы был проведен опрос среди программистов, это было бы самым популярным выбором модели памяти, но потребуются значительные усилия для реализации на аппаратном уровне.

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

-создание условий загрузки в обход сохранения в пределах ядра, если оно адресовано другой ячейке памяти

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

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

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

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

Понравилась публикация?
9 / 0
нет
0 / 0
Подписаться
Донаты ₽
Главная
Коллективные
иски
Добавить Видео Опросы