문제

내 프로그램이 Semantics/Store 작업을 릴리스 시맨틱으로 획득하여로드 작업을 수행하면 CPU의 캐시가 무효화됩니다.
내 질문은 이것입니다 : 캐시의 어느 부분이 실제로 무효화 되었습니까? 획득/릴리스를 사용한 변수를 보유한 캐시 라인 만? 아니면 전체 캐시가 무효화 되었습니까? (L1 + L2 + L3 .. 등?). 획득/릴리스 시맨틱을 사용할 때 또는 풀 펜스를 사용할 때이 주제에 차이가 있습니까?

도움이 되었습니까?

해결책

나는 이것에 대한 전문가가 아니지만이 문서를 우연히 발견했는데 아마도 도움이 될 것입니다.http://www.rdrop.com/users/paulmck/scalability/paper/whymb.2009.04.05a.pdf

다른 팁

울타리 나 뮤트없이로드를 수행 할 때로드 된 값은 잠재적으로, 즉 캐시, 레지스터 (컴파일러 최적화를 통해) 또는 RAM ...에서 발생할 수 있지만, 질문에서 이미 이것을 알고있었습니다.

대부분의 MUTEX 구현에서 MUTEX를 구입할 때 울타리는 항상 명시 적으로 (예 : Mfence, Barrier 등) 또는 암시 적으로 (예 : x86에서 버스를 잠그기 위해 접두사 잠금)를 적용합니다. 이로 인해 경로의 모든 캐시의 캐시 라인이 무효화됩니다.

전체 캐시는 무효화되지 않았으며 메모리 위치의 각 캐시 라인 만 유효하지 않습니다. 여기에는 MUTEX의 라인 (일반적으로 메모리 값으로 구현 됨)이 포함됩니다.

물론 건축 별 세부 사항이 있지만 이것이 일반적으로 작동하는 방식입니다.

또한 다른 하나의 캐시가 무효화되기 위해 캐시를 필요로하는 하나의 CPU에서 작업이있을 수 있으므로 캐시를 무효화하는 유일한 이유는 아닙니다. "캐시 일관성 프로토콜"에 대한 Google 검색을 수행하면이 주제에 대한 많은 정보가 제공됩니다.

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