[concurrency] 메모리 펜스 란 무엇입니까?

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



답변

성능 향상을 위해 최신 CPU는 사용 가능한 실리콘 (메모리 읽기 / 쓰기 포함)을 최대한 활용하기 위해 종종 명령을 순서대로 실행하지 않습니다. 하드웨어는 명령 무결성을 강제하기 때문에 단일 실행 스레드에서이를 알 수 없습니다. 그러나 휘발성 메모리 (예 : 메모리 매핑 I / O)가있는 여러 스레드 또는 환경의 경우 이로 인해 예상치 못한 동작이 발생할 수 있습니다.

메모리 펜스 / 장벽은 메모리 읽기 / 쓰기가 예상 한 순서대로 발생 함을 의미하는 명령어 클래스입니다. 예를 들어 ‘풀 펜스’는 펜스 이전의 모든 읽기 / 쓰기가 펜스 이후의 것보다 먼저 커밋됨을 의미합니다.

메모리 펜스는 하드웨어 개념입니다. 고수준 언어에서 우리는 뮤텍스와 세마포어를 다루는 데 익숙합니다. 저수준에서 메모리 펜스를 사용하여 구현 될 수 있으며 메모리 장벽을 명시 적으로 사용할 필요가 없습니다. 메모리 장벽을 사용하려면 하드웨어 아키텍처를주의 깊게 연구해야하며 응용 프로그램 코드보다 장치 드라이버에서 더 많이 발견됩니다.

CPU 재정렬은 컴파일러 최적화와는 다르지만 아티팩트는 비슷할 수 있습니다. 바람직하지 않은 동작 (예 : C에서 volatile 키워드 사용)이 발생할 수있는 경우 컴파일러가 명령어 순서를 변경하는 것을 중지하기 위해 별도의 조치를 취해야합니다.


답변

내 대답 을 다른 질문에 복사 합니다. 프로세서가 코드를 최적화하기 위해 수행하는 트릭은 무엇입니까? :

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

메모리 펜스 또는 직렬화 명령이없는 경우 프로세서는 메모리 액세스 순서를 자유롭게 조정할 수 있습니다. 일부 프로세서 아키텍처는 재주문 할 수있는 양에 제한이 있습니다. 알파는 가장 약한 것으로 알려져 있습니다 (즉, 가장 많이 재정렬 할 수있는 것).

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

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


답변

내 경험상 여러 스레드간에 메모리 액세스를 동기화하는 명령 (명시 적 또는 암시 적) 인 메모리 장벽을 나타냅니다 .

이 문제는 최신 공격적 컴파일러 (명령을 재정렬 할 수있는 놀라운 자유가 있지만 일반적으로 스레드에 대해 전혀 알지 못함)와 최신 멀티 코어 CPU의 조합에서 발생합니다.

문제에 대한 좋은 소개는 ” ‘이중 검사 잠금이 깨 졌습니다 ‘선언 “입니다. 많은 사람들에게 용이 있다는 것은 모닝콜이었습니다.

암시 적 전체 메모리 장벽은 일반적으로 핵심을 포함하는 플랫폼 스레드 동기화 루틴에 포함됩니다. 그러나 잠금없는 프로그래밍 및 맞춤형 경량 동기화 패턴을 구현하려면 종종 장벽 만 필요하거나 단방향 장벽 만 필요합니다.


답변

Wikipedia는 모두 알고 있습니다 …

membar 또는 메모리 펜스라고도하는 메모리 배리어는 CPU (중앙 처리 장치)가 배리어 명령 전후에 실행되는 메모리 작업에 대한 순서 지정 제약을 적용하도록하는 명령 클래스입니다.

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

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


답변