> 백엔드 개발 > C++ > _mm_sfence, _mm_lfence 및 _mm_mfence는 언제 사용해야 합니까?

_mm_sfence, _mm_lfence 및 _mm_mfence는 언제 사용해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-15 14:44:02
원래의
998명이 탐색했습니다.

When Should You Use _mm_sfence, _mm_lfence, and _mm_mfence?

_mm_sfence, _mm_lfence 및 _mm_mfence는 언제 사용해야 합니까?

멀티 스레드 프로그래밍으로 인해 동시성 관련 복잡성이 발생하므로 데이터 유지를 위한 메커니즘이 필요합니다. 무결성과 동기화. Intel의 내장 라이브러리는 x86 아키텍처에서 메모리 순서를 제어하기 위해 _mm_sfence, _mm_lfence 및 _mm_mfence를 포함한 여러 기능을 제공합니다.

x86의 메모리 순서

x86 CPU는 강력한 정렬된 메모리 모델이지만 C와 C는 더 약한 모델을 가지고 있습니다. 따라서 적절한 메모리 순서를 보장하고 데이터 손상이나 경합 상태를 방지하려면 추가적인 예방 조치가 필요합니다.

_mm_sfence

_mm_sfence는 주로 비임시(NT) 저장소 다음에 사용됩니다. (_mm_stream_*) 추측에 의한 재정렬을 방지합니다. NT 저장소는 순서가 약합니다. 즉, 다른 메모리 작업에 비해 순서가 어긋나는 것처럼 보일 수 있습니다. _mm_sfence는 NT 저장소가 메모리에 커밋된 후 후속 메모리 작업이 전체적으로 표시되도록 하는 장벽을 만듭니다.

_mm_lfence

_mm_lfence는 로드 펜스로 거의 사용되지 않습니다. 비디오 RAM과 같은 WC(Write-Combining) 메모리 영역에서 로드할 때만 관련성이 있습니다. _mm_lfence는 폐기될 때까지 후속 명령어의 실행을 방지할 수 있으며 이는 마이크로벤치마킹에 유용할 수 있습니다.

_mm_mfence

_mm_mfence는 순차적 일관성을 제공하여 후속 로드가 이후까지 값을 읽을 수 없도록 보장합니다. 이전 매장이 전 세계적으로 표시됩니다. std::atomic의 사용자 정의 버전을 구현하거나 추측에 불과한 작업에 대한 메모리 순서를 명시적으로 제어해야 하는 경우 유용할 수 있습니다.

요약

  • 데이터 손상 및 경쟁 조건을 방지하려면 NT 저장 후 _mm_sfence를 사용하세요.
  • 피하세요 WC 메모리 영역으로 특별히 작업하지 않는 한 로드 순서 지정을 위한 _mm_lfence.
  • _mm_mfence는 순차적 일관성을 제공하지만 잠긴 원자 읽기-수정-쓰기 작업보다 효율성이 떨어질 수 있습니다.
  • C 11 std 사용을 고려하세요:: 더욱 편리하고 최적화된 접근 방식을 제공하는 Atomic 또는 C11 stdatomic을 사용하여 메모리 동기화를 수행합니다.

위 내용은 _mm_sfence, _mm_lfence 및 _mm_mfence는 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿