컴퓨터시스템
캐시메모리와 Cache Friendly Code
캐시메모리와 Cache Friendly Code
2022.04.031. 캐시메모리는 무엇인가? 캐시메모리의 핵심 개념은 locality이다. 레지스터에 가까운 지역에 전진기지를 만들어 그 안에 자주 사용하고(temporal locality), 인접한(spartial locality) 데이터를 보관하기 위해 고안되었다. 잘 알려져 있듯이 메인메모리보다 크기가 작다. 이 작은 꾸러미를 최대한 활용하기 위한 하드웨어 알고리즘은 지금도 개발되고 있다. 허나 이것은 어디까지나 한계가 있는 이야기이다. 전 지구상에서 지금도 개발되고 있는 모든 어플리케이션의 분기를 예측하는 것은 불가능에 가깝기 때문이다. 따라서 개발자 또한 어느정도는 캐시메모리를 이해하고 코드를 짜는 것이 최적화에 매우 유리하다고 할 수 있다. 찾는 데이터가 캐시메모리에 보관되어 있다면, 캐시 히트 라고 한다. ..
CPU의 비순차적 명령어 처리(Out Of Order Execution)
CPU의 비순차적 명령어 처리(Out Of Order Execution)
2022.03.07결론부터 말하자면, CPU는 코드 즉, 기계어로 번역된 명령어를 처리할때에 순차적으로 처리하지 않을 수 있다는 것이다. 다음의 아주 간단한 코드를 보자. int A = 0; int B = 0; int WatchingA[100000000] = { 0 ,}; int WatchingB[100000000] = { 0 ,}; int main() { A = 4; for (int i = 0; i < 100000000; ++i) { //A의 카운터가 증가하며 값을 기록하기로 한다. A = i; WatchingB[A] = B; } } 실행결과는? 당연히 모든 B의 값을 기록한 WatchingB에 0이 가득 차있다. 원하는 결과가 맞다. 그럼 별 문제가 아직 없다. 무엇이 비순차적이라는 말인가? 그래 그럼 이제 멀티스레드..