Computing/Operating System

False sharing. 거짓 공유

i독 2021. 10. 13. 07:03

CPU 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목현상이 일어나는 것을 뜻한다.

일반적인 CPU는 L1, L2 캐쉬가 코어에 있고 L3는 외부에 나와 있다. L3 캐시는 메모리로부터 data를 받아오고, 해당 데이터를 L2 → L1 순으로 전달하게 된다.

L1 cache는 long long num1 과 long long num2 가 있다. cache는 자주 사용하는 데이터를 메모리까지 가지 않고 메모리 보다 빠른 cache에 저장함으로서 좀 더 빠르게 데이터를 처리하려 한다.

t1, t2 thread 가 연산을 처리하는 과정.

CPU는 cache 라인에 따라 64byte로 통째로 읽어온다. 64byte를 통째로 읽어오면 Core 1에는 num1과 num2가 있다. Core2에는 num2의 시작 위치부터 읽어 오고 64byte이내에 num2만 있으므로 사진과 같이 데이터가 저장된다.

CPU는 계산만 처리하는 기계이며, Core 1에서 num2의 계산을 하지는 않지만, 캐시 입장에선 데이터가 공유되어 무슨일이 일어나는지 알 수 없다. 따라서 만약 다른 쓰레드에서 num2의 변경이 이루어졌다면 Core 1의 연산은 중지되고, num2의 값을 다시 받아온다. num2는 쓰지도 않으면서 num2의 변화에 캐싱을 다시 하므로, 병목현상이 일어나 프로세스 성능에 영향을 미치게 된다.

이를 해결하기 위해 흔히 padding을 넣어 캐시 라인에서 읽어들을 수 있는 변수를 조정해 공유되는 상황을 막을 수 있다.

 

출처 : https://hwan-shell.tistory.com/230

 

C++ false sharing이란?(거짓 공유)

1. false sharing 이란?? false sharing은 멀티 쓰레드 환경 + CPU의 멀티 코어에서 발생됩니다. cpu 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목현상이 일어나는 것을 뜻합니다.

hwan-shell.tistory.com

 

'Computing > Operating System' 카테고리의 다른 글

Memory Fragmentation. 메모리 단편화  (0) 2021.10.13
Bottleneck. 병목  (0) 2021.10.13
Race condition. 경쟁 상태  (0) 2021.10.13
Cache line.  (0) 2021.10.13
Architecture, Blueprint  (0) 2021.10.13