거두절미하고 귀찮으니까 빨리 쓴당


솔직히 글 읽었으면 이런 생각일 것.


"그래 뭐 알겠다. 지역성이 중요하고 템포랄, 스패셜,.... 니가 그렇다는데 그런 거겠지. "

"그런데 C 코드는 어떻게 짜야 하는데?"


캐시메모리는 모두 하드웨어에 의해 자동으로 처리되는 부분이고

프로그래머에게는 보이지 않는다.


그러나 캐시에 대한 지식이 있으면 캐시를 잘 울궈먹는 코드를 짤 수 있다!



C에서는...




1. 실행이 가장 빈번히 실행되는 코드의 부분(함수)을 찾는다

덜 실행되는 부분은 캐시에 올라가봤자 금방 빠져 나간다...


2. 그 함수에서 내부 루프에서의 캐시 미스를 줄인다

반복되는 레퍼런스는 temporal locality 측면에서 좋다

stride-1 reference pattern을 사용하면 spatial locality 측면에서 좋다.


*loop바디가 작으면 동일한 인스트럭션들에 여러번 접근할 수 있어 temporal locality 측면에서 좋다.


3. 왠만하면 지역변수를 쓰자. 성능 측면에서도 고려해 볼 측면이 있다.

C에서 지역변수는 보통 register(L0)에 을 넣어 저장한다.

그러나 전역변수는 무조건 register에 주소(참조)를 넣어 접근한다. 



* temporal locality를 이용하여 최적화하는 방식 중 가장 유명한 것이 blocking이다.


이 방식은 다음 코드를 



요렇게 만든다.


for문이 잔뜩인데 오히려 빨라진다. 왜?? 딱 캐시에 들어갈 만큼 잘라서(blocking) 계산하는 거거든...

잘 모르겠으면 CSAPP책과 이전 글에 올린 ppt를 참고하세욧 ^_^


진짜 끗. ㅎㅎㅎㅎ 힘들었으