_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의 사용자 정의 버전을 구현하거나 추측에 불과한 작업에 대한 메모리 순서를 명시적으로 제어해야 하는 경우 유용할 수 있습니다.
요약
위 내용은 _mm_sfence, _mm_lfence 및 _mm_mfence는 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!