"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué la tienda `std::atomic`\ usa XCHG para lograr coherencia secuencial en x86?

¿Por qué la tienda `std::atomic`\ usa XCHG para lograr coherencia secuencial en x86?

Publicado el 2024-11-18
Navegar:342

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

Por qué la tienda std::atomic emplea XCHG para lograr coherencia secuencial

En el contexto de std::atomic para arquitecturas x86 y x86_64, un La operación de almacenamiento con coherencia secuencial (std::memory_order_seq_cst) emplea XCHG en lugar de un almacenamiento simple con una barrera de memoria como la técnica para lograr una semántica de liberación secuencial.

Consistencia secuencial y xchg

La coherencia secuencial dicta que todas las operaciones de memoria parecen ejecutarse en algún orden secuencial, y este orden es lo mismo para todos los hilos. XCHG, una instrucción x86 que intercambia atómicamente los valores de dos operandos, satisface inherentemente este requisito de coherencia secuencial. Al utilizar XCHG para realizar una operación de escritura, std::atomic garantiza que el almacén se vuelva globalmente visible para todos los subprocesos en un punto específico del orden de ejecución, evitando el reordenamiento con operaciones posteriores.

mov- store mfence vs. XCHG

Si bien un simple mov-store seguido de una barrera de memoria (como mfence) podría teóricamente proporcionar semántica de liberación, no lo es suficiente para operaciones de almacenamiento de lanzamiento secuencial. MFENCE, una instrucción de barrera de memoria que establece una barrera de memoria, garantiza que las operaciones de escritura anteriores se guarden en la memoria antes de continuar. Sin embargo, no impide que las operaciones de carga posteriores se reordenen antes del almacén de lanzamiento.

Consideraciones de rendimiento

La elección entre mov-store mfence y XCHG para lanzamiento secuencial Las operaciones de la tienda implican compensaciones en el rendimiento.

  • En ciertas CPU (por ejemplo, Intel Skylake), XCHG puede ser más eficiente que mov-store mfence, especialmente cuando no hay ningún código dependiente circundante que deba sincronizarse con la operación atómica.
  • En otras CPU, mov-store mfence puede ser preferible para escenarios de alto rendimiento o cuando el código circundante puede superponerse ejecución con la operación atómica.

Detalles de implementación

En la práctica, la implementación específica de La tienda std::atomic con consistencia secuencial varía según el compilador y la arquitectura del hardware.

  • GCC/Clang: Originalmente usaba mov-store mfence pero recientemente cambió a usar XCHG para tiendas seq-cst.
  • Compilador Intel: Utiliza XCHG para seq-cst tiendas.
  • Microsoft Visual C: También usa XCHG para tiendas seq-cst.

Valla de adquisición implícita

La afirmación de que las tiendas x86 tienen una barrera de adquisición implícita es incorrecta. Las tiendas en x86 tienen semántica de lanzamiento, no de adquisición. La semántica de adquisición generalmente se aplica mediante barreras de memoria como mfence u operaciones de lectura atómica con la semántica std::memory_order_acquire.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3