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

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

Patricia Arquette
Patricia Arquette원래의
2024-11-18 00:05:02388검색

When Should You Use _mm_sfence, _mm_lfence, or _mm_mfence?

_mm_sfence, _mm_lfence 또는 _mm_mfence 사용 시기 결정

멀티 스레드 코드를 활용하는 경우 메모리 순서를 효과적으로 제어해야 할 필요성이 발생합니다. x86 프로세서는 강력하게 정렬된 메모리 모델을 자랑하는 반면 C와 C는 보다 완화된 모델을 고수합니다. 이로 인해 내장 함수 _mm_sfence, _mm_lfence 및 _mm_mfence의 적절한 사용에 대한 혼란이 발생할 수 있습니다.

메모리 순서 이해

의미 획득/해제의 경우 컴파일 시간 재정렬 방지 컴파일러 장벽의 개념에서 강조된 것처럼 그것만으로도 충분합니다. 이는 불필요한 asm 명령어로 인해 성능을 방해하지 않고 추상 머신에서 작업의 올바른 순서를 보장합니다. GNU C/C asm("" ::: "memory")과 같은 옵션은 효과적으로 컴파일러 장벽 역할을 하여 성능에 미치는 영향을 최소화하면서 이 목표를 달성합니다.

또는 C 11 std::atomic은 다음과 같은 완벽한 솔루션을 제공합니다. shared_var.store(tmp, std::memory_order_release), 변경 사항에 대한 전역 가시성을 보장합니다. _mm_mfence는 C11/C 11 std::atomic의 자체 버전을 구현하는 경우 mfence를 활용하여 순차 일관성을 설정하고 이전 저장소에 전역적으로 액세스할 수 있기 전에 후속 로드가 값을 가져오는 것을 방지하는 경우 잠재적인 가치를 갖습니다.

각 내장 함수의 역할 조사

_mm_sfence:

  • NT 저장소에 이상적이며 다른 스레드가 의존하는 플래그를 설정하기 전에 펜스가 필요합니다. .
  • 일반 상점과 달리 약하게 주문되는 NT 상점 이용 시 출시/획득 동기화를 보장합니다.

_mm_lfence:

  • WC(Write-Combining) 메모리 영역과 관련된 경우 로드 순서가 약하기 때문에 로드 펜스로 거의 사용되지 않습니다.
  • 일부 프로세서에서 실행 흐름을 제어하는 ​​데 활용될 수 있으며 이후 명령이 lfence까지 실행되지 않도록 방지할 수 있습니다. 완료되었습니다.

_mm_mfence:

  • 순차적 일관성을 위해 mfence를 활용하여 자체 버전의 std::atomic을 구현하는 데 잠재적으로 유용합니다.
  • 참고: mfence는 잠긴 원자 RMW 작업보다 느릴 수 있습니다.

성능 관련 주의 사항

펜스는 그렇지 않다는 점을 인정하는 것이 중요합니다. 매장의 가시성을 가속화합니다. 이전 작업이 완료될 때까지 현재 스레드 내의 작업을 연기할 뿐입니다.

결론

일반적인 사용 사례의 경우 C 11 std::atomic 또는 C11 stdatomic은 강력한 기능을 제공합니다. 메모리 순서 제어를 위한 사용자 친화적인 솔루션입니다. NT 저장소 또는 std::atomic의 사용자 정의 구현과 관련된 시나리오에서는 _mm_sfence 및 _mm_mfence가 유용할 수 있지만 성능에 미치는 영향을 신중하게 고려하는 것이 중요합니다.

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

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