hardware_destructive_interference_size 2

True sharing / False sharing : std::hardware_..._interference_size

True sharing / False sharing : std::hardware_..._interference_size 1. 설명 False sharing은 2개 이상의 코어가 서로 다른 메모리 주소에 접근하지만, 두 주소가 동일한 캐시 최소 단위에 적제되어 있어(논리적으로는 전혀 영향이 없지만 캐시는 이를 모르기에) 동기화가 이루어져 성능이 하락하는것을 말합니다. True sharing은 false sharing과는 반대로 동일한 메모리 주소에 값을 쓸때를 의미합니다. 이때는 당연히 동기화가 이루어지기에(논리적으로도 그것이 맞고) 이번글에서는 딱히 다루지 않겠습니다. C++17 에는 이렇게 동일한 캐시라인에 적제되는지 판별할수 있는(L1 캐시 라인 크기를 얻어오는) 표준이 추가되었습니다. 다만, 아직까..

C++/개념(Concept) 2021.08.30

[BUG] Apple Clang std::hardware_xxx_interference_size

Apple Clang 컴파일러 버그 1. 설명 C++17부터는 true sharing 이 일어나는 메모리의 최대 크기와, 그 반대인 false sharing이 일어나는 메모리의 최소 크기를 얻어오는 표준이 지정되었습니다. Sharing은 보통 멀티스레드 환경에서 캐시 동기화때문에 일어나게 되는데, 보다 자세한 내용은 다른 글에서 다루도록 하겠습니다. 두 값 모두 실제 CPU의 캐시 라인과 관련이 있습니다. 하지만 실제로 이 표준을 구현하는 컴파일러는 2021년 8월 현재로써는 마이크로소프트의 컴파일러 뿐이고, 다른 계열들은 해당 표준을 구현하지 않았습니다. 대신 구현 여부를 매크로로 알아낼 수 있는데, Apple Clang에서는 해당 매크로조차 잘못 정의가되어 있는 상황입니다. 2. 예시 해당 표준이 구..