>  기사  >  백엔드 개발  >  `std::atomic`의 저장소가 x86에서 순차적 일관성을 위해 XCHG를 사용하는 이유는 무엇입니까?

`std::atomic`의 저장소가 x86에서 순차적 일관성을 위해 XCHG를 사용하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-23 14:52:20685검색

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

std::atomic의 매장에서 순차 일관성을 위해 XCHG를 사용하는 이유

x86 및 x86_64 아키텍처용 std::atomic의 맥락에서 순차적 일관성을 갖춘 저장 작업(std::memory_order_seq_cst)은 다음을 사용합니다. 순차 릴리스 의미론을 달성하기 위한 기술로 메모리 장벽을 갖춘 단순한 저장 대신 XCHG.

순차 일관성 및 xchg

순차 일관성은 모든 메모리 작업이 나타남을 나타냅니다. 순차적인 순서로 실행되며 이 순서는 모든 스레드에 대해 동일합니다. 두 피연산자의 값을 원자적으로 교환하는 x86 명령어인 XCHG는 본질적으로 이러한 순차적 일관성 요구 사항을 충족합니다. XCHG를 사용하여 쓰기 작업을 수행함으로써 std::atomic은 실행 순서의 특정 지점에서 모든 스레드에 저장소가 전체적으로 표시되도록 보장하여 후속 작업으로 재정렬되는 것을 방지합니다.

mov- store mfence 대 XCHG

간단한 mov-store와 메모리 펜스(예: mfence)는 이론적으로 릴리스를 제공할 수 있습니다. 의미론적으로 순차 릴리스 저장소 작업에는 충분하지 않습니다. 메모리 장벽을 설정하는 메모리 펜스 명령어인 MFENCE는 진행하기 전에 이전 쓰기 작업이 메모리에 커밋되도록 합니다. 그러나 릴리스 스토어 이전에 후속 로드 작업이 재정렬되는 것을 막지는 못합니다.

성능 고려 사항

순차 릴리스를 위한 mov-store mfence와 XCHG 간의 선택 매장 운영에는 성능 균형이 필요합니다.

  • 특정 CPU(예: Intel Skylake), XCHG는 특히 원자 연산과 동기화해야 하는 주변 종속 코드가 없는 경우 mov-store mfence보다 더 효율적일 수 있습니다.
  • 다른 CPU에서는 높은 성능을 위해 mov-store mfence가 바람직할 수 있습니다. -처리량 시나리오 또는 주변 코드가 원자적 작업과 실행을 겹칠 수 있는 경우.

구현 세부 정보

실제로 순차 일관성을 갖춘 std::atomic 저장소의 구체적인 구현은 컴파일러 및 하드웨어 아키텍처에 따라 다릅니다.

  • GCC/Clang: 원래는 mov-store mfence를 사용했지만 최근 seq-cst에 XCHG를 사용하도록 전환했습니다. store.
  • Intel Compiler: seq-cst 저장소에 XCHG를 사용합니다.
  • Microsoft Visual C: seq-cst 저장소에도 XCHG를 사용합니다.

암시적 획득 Fence

x86 매장에 암시적 획득 펜스가 있다는 설명은 올바르지 않습니다. x86의 저장소에는 획득 의미가 아닌 릴리스 의미가 있습니다. 획득 의미 체계는 일반적으로 std::memory_order_acquire 의미 체계를 사용하는 mfence 또는 원자성 읽기 작업과 같은 메모리 장벽을 사용하여 적용됩니다.

위 내용은 `std::atomic`의 저장소가 x86에서 순차적 일관성을 위해 XCHG를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.