«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему хранилище `std::atomic` использует XCHG для последовательной согласованности на x86?

Почему хранилище `std::atomic` использует XCHG для последовательной согласованности на x86?

Опубликовано 18 ноября 2024 г.
Просматривать:481

Why does `std::atomic`\'s store use XCHG for sequential consistency on x86?

Почему хранилище std::atomic использует XCHG для последовательной согласованности

В контексте std::atomic для архитектур x86 и x86_64 операция сохранения с последовательной согласованностью (std::memory_order_seq_cst) использует XCHG вместо простого сохранения с барьером памяти в качестве метода достижения семантики последовательного выпуска.

Последовательная согласованность и xchg

Последовательная согласованность требует, чтобы все операции с памятью выполнялись в некотором последовательном порядке, и этот порядок одинаков для всех потоков. XCHG, инструкция x86, которая атомарно обменивает значения двух операндов, по своей сути удовлетворяет этому требованию последовательной согласованности. Используя XCHG для выполнения операции записи, std::atomic гарантирует, что хранилище станет глобально видимым для всех потоков в определенной точке порядка выполнения, предотвращая переупорядочение последующих операций.

mov- store mfence против XCHG

Хотя простое mov-store, за которым следует ограничение памяти (например, mfence), теоретически может обеспечить семантику выпуска, этого недостаточно для операций хранилища с последовательным выпуском. MFENCE, инструкция ограничения памяти, которая устанавливает барьер памяти и гарантирует, что предыдущие операции записи будут зафиксированы в памяти, прежде чем продолжить. Однако это не предотвращает переупорядочение последующих операций загрузки перед хранилищем выпуска.

Аспекты производительности

Выбор между mov-store mfence и XCHG для последовательного выпуска операции хранилища требуют компромисса в производительности.

  • На некоторых процессорах (например, Intel Skylake) XCHG может быть более эффективным, чем mov-store mfence, особенно когда нет окружающего зависимого кода, который необходимо синхронизировать. с атомарной операцией.
  • На других процессорах mov-store mfence может быть предпочтительнее для сценариев с высокой пропускной способностью или когда окружающий код может перекрывать выполнение атомарной операции.

Детали реализации

На практике конкретная реализация хранилища std::atomic с последовательной согласованностью варьируется в зависимости от компилятора и аппаратной архитектуры.

  • GCC/ Clang: Первоначально использовался mfence mov-store, но недавно перешел на использование XCHG для хранилищ seq-cst.
  • Компилятор Intel: Использует XCHG для хранилищ seq-cst.
  • Microsoft Visual C : Также использует XCHG для хранилищ seq-cst.

Implicit Acquire Fence

Утверждение, что x86 в магазинах неявное ограждение приобретения неверно. Хранилища на платформе x86 имеют семантику выпуска, а не семантику приобретения. Семантика получения обычно реализуется с использованием барьеров памяти, таких как mfence или операции атомарного чтения с семантикой std::memory_order_acquire.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3