문제

명시 적 메모리 울타리를 사용하는 것은 무엇을 의미합니까?

도움이 되었습니까?

해결책

성능 이득의 경우 현대 CPU는 종종 사용 가능한 실리콘 (메모리 읽기/쓰기 포함)을 최대한 활용하기 위해 지침을 실행하지 않습니다. 하드웨어는 명령 무결성을 시행하기 때문에 단일 실행 스레드에서는 이것을 눈치 채지 못합니다. 그러나 휘발성 메모리 (예 : 메모리 매핑 I/O)가있는 여러 스레드 또는 환경의 경우 예측할 수없는 동작으로 이어질 수 있습니다.

메모리 펜스/배리어는 메모리 읽기/쓰기가 예상 한 순서대로 발생하는 지침 클래스입니다. 예를 들어 'Full Fence'는 울타리가 울타리 뒤에있는 울타리 앞에있는 모든 읽기/쓰기를 의미합니다.

참고 메모리 펜스는 하드웨어 개념입니다. 더 높은 수준의 언어에서 우리는 뮤 테스와 세마포어를 다루는 데 익숙합니다. 이것은 낮은 레벨에서 메모리 울타리를 사용하여 구현 될 수 있으며 메모리 장벽의 명시 적 사용은 필요하지 않습니다. 메모리 장벽을 사용하려면 하드웨어 아키텍처에 대한 신중한 연구가 필요하며 애플리케이션 코드보다 장치 드라이버에서 더 일반적으로 발견됩니다.

CPU 재주문은 컴파일러 최적화와 다릅니다. 인공물은 유사 할 수 있습니다. 바람직하지 않은 동작 (예 : C에서 휘발성 키워드 사용)이 발생할 수있는 경우 지침을 재정렬하는 컴파일러를 중지하려면 별도의 조치를 취해야합니다.

다른 팁

사자 내 대답 또 다른 질문에 프로세서가 코드를 최적화하기 위해하는 몇 가지 요령은 무엇입니까?:

가장 중요한 것은 메모리 액세스 재주문입니다.

메모리 울타리 또는 직렬화 지침이 없으면 프로세서는 메모리 액세스를 자유롭게 주문할 수 있습니다. 일부 프로세서 아키텍처는 재주문 수에 대한 제한 사항이 있습니다. 알파는 가장 약한 것으로 유명합니다 (즉, 가장 적합 할 수있는 것).

주제에 대한 아주 좋은 처리는 Linux 커널 소스 문서에서 찾을 수 있습니다. Documentation/Memory-Barriers.txt.

대부분의 경우 컴파일러 또는 표준 라이브러리에서 잠금 프리미티브를 사용하는 것이 가장 좋습니다. 이것들은 잘 테스트되어 있고 필요한 모든 메모리 장벽을 갖추어야하며 아마도 상당히 최적화되어있을 것입니다 (프리미티브 잠금을 최적화하는 것은 까다 롭고 전문가조차도 때때로 잘못을 저지르기 위해).

내 경험상 그것은 a를 말합니다 메모리 장벽, 이것은 여러 스레드 간의 메모리 액세스를 동기화하는 명령 (명시 적 또는 암시 적)입니다.

문제는 현대적인 adressive 컴파일러 (지침을 재주문 할 수있는 놀라운 자유가 있지만 일반적으로 스레드에 대해서는 아무것도 모른다)와 현대적인 멀티 코어 CPU의 조합에서 발생합니다.

문제에 대한 좋은 소개는 ""입니다.'두 번 확인 된 잠금이 깨졌습니다'선언". 많은 사람들에게 드래곤이있는 모닝콜이었다.

암시 적 전체 메모리 장벽은 일반적으로 플랫폼 스레드 동기화 루틴에 포함되며, 이는 코어를 다룹니다. 그러나 잠금없는 프로그래밍 및 사용자 정의 경량 동기화 패턴을 구현하려면 종종 장벽 또는 일방 통행 장벽 만 필요합니다.

Wikipedia는 모든 것을 알고 있습니다 ...

Membar 또는 Memory Fence라고도하는 메모리 배리어는 중앙 처리 장치 (CPU)가 장벽 명령 전후에 발행 된 메모리 작업에 대한 주문 제약을 시행하게하는 명령어 클래스입니다.

CPU는 성능 최적화를 사용하여 메모리로드 및 저장 작업을 포함하여 주문 외 실행을 초래할 수 있습니다. 메모리 작동 재주문은 일반적으로 단일 실행 스레드 내에서 눈에 띄지 않지만 신중하게 제어되지 않는 한 동시 프로그램 및 장치 드라이버에서 예측할 수없는 동작을 유발합니다. 순서 제약 조건의 정확한 특성은 하드웨어에 따라 다르며 아키텍처의 메모리 모델로 정의됩니다. 일부 아키텍처는 다른 순서 제약을 시행하기위한 여러 가지 장벽을 제공합니다.

메모리 장벽은 일반적으로 여러 장치에서 공유하는 메모리에서 작동하는 저수준 기계 코드를 구현할 때 사용됩니다. 이러한 코드에는 멀티 프로세서 시스템의 동기화 프리미티브 및 잠금없는 데이터 구조와 컴퓨터 하드웨어와 통신하는 장치 드라이버가 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top