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 간의 선택 저장소 운영에는 성능 균형이 필요합니다.
구현 세부 정보
실제로 순차적 일관성을 갖춘 std::atomic 저장소의 구체적인 구현은 컴파일러 및 하드웨어 아키텍처에 따라 다릅니다.
암시적 획득 울타리
x86이 상점에 암시적 획득 울타리가 있는 것이 올바르지 않습니다. x86의 저장소에는 획득 의미가 아닌 릴리스 의미가 있습니다. 획득 의미 체계는 일반적으로 std::memory_order_acquire 의미 체계를 사용하는 mfence 또는 원자 읽기 작업과 같은 메모리 장벽을 사용하여 적용됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3