|
지금까지는 인스트럭션의 디코딩과 연산 성능의 개선 부분에 대해서만 알아보았는데 연산이 아닌 데이터의 이동에 대해 알아보도록 하겠다.
지금까지 필자가 설명한 부분은 프로세서 내부에서 인스트럭션을 디코딩하고 이를 실행하는 부분에 대해서만 설명하였다. 이 부분은 이미 설명하였듯이 프로세서의 연산 성능의 대부분을 차지할 만큼 상당히 중요한 부분이지만 이 동작에는 필히 없어서는 안될 부분이 있다.
바로 데이터를 가져오고 내보내는 것인데 이미 기존에 발표되어 있는 마이크로아키텍쳐들도 재배치 실행이 가능하다.
이 재배치 실행은 디코더를 통해 Micro-op 코드로 변환된 인스트럭션이 버퍼에 저장되면 스케쥴러가 최적의 순서로 인스트럭션이 실행될 수 있도록 재배치 하는 것을 말하것으로써 데이터를 불러오는 부분에도 재배치를 통한 데이터 전송의 지연을 최소화 할 수 있는 기능이 코어 마이크로아키텍쳐에 적용됐다.
순서를 바꾸면 빨라진다, Smart Memory Access
일반적으로 연산에 필요한 데이터는 L1 캐쉬에서 찾게 된다. L1 인스트럭션 캐쉬에 저장된 데이터를 가져와서 사용하지만 L1 캐쉬에 해당 데이터가 없으면 L2 캐쉬에서 데이터를 가져와야 하고 L2 캐쉬에도 데이터가 없으면 프로세서의 외부인 시스템 메모리로부터 데이터를 가져와야 한다.
그러나 모든 데이터 처리에서 시스템 메모리에 저장된 데이터가 사용되게 된다면 프로세서는 상당한 사이클을 허비하기 때문에 시스템 메모리에 저장된 데이터는 Prefetcher에 의해 L2 캐쉬로 미리 가져오게 되며 L2 캐쉬에 저장된 데이터 중에서 해당 연산에 바로 필요한 데이터도 L1 캐쉬로 가져오게 되어 있다.
하지만 진짜 L1 캐쉬에도 데이터가 없고 L2 캐쉬에도 데이터가 없으면 어떻게 될까? 이때는 어쩔수 없이 프로세서의 연산은 지연될 수밖에 없는데 데이터의 로드를 재배치함으로써 이 문제를 해결할 수 있다.

위의 이미지를 통해 설명하도록 하겠다. 두 이미지는 모두 Store1, Load2, Store3, Load4의 명령을 처리하도록 되어 있으며 기존 방식의 경우 처음 Store1부터 차례대로 명령이 처리된다. 그런데 마지막 Load4 명령을 통해 가져올 데이터가 L2 캐쉬에도 없고 외부 시스템 메모리에 있어 2 사이클이 소비되야 한다면 기존 방식(좌)의 경우 두 번째 Store3 명령이 처리된 이후 Load4를 위해 2 사이클이 지연된 이후에 해당 데이터를 처리할 수밖에 없다.
하지만 마지막 Load4 명령을 가장 먼저 실행하면 어떻게 될까? 마지막 Load4 명령을 가장 먼저 실행시키면 Load4 명령에 필요한 데이터가 전송되어 오는 동안 Store1과 Load2 그리고 Store3는 순차적으로 실행될 것이고 Store3 명령이 처리되면 Load4의 데이터는 이미 내부로 전달되어 있는 상태가 된다.
따라서 Load4 명령으로 불러올 데이터를 기다리지 않고 바로 사용할 수가 있게 되는데 이런 재배치를 통해 데이터 전송의 지연을 최소화 하도록 만든 것이 Smart Memory Access 기술이다. 이 기술은 해당 Load 명령의 전단계에 있는 Store 명령에 따라 저장될 메모리 주소값이 Load 명령으로 불러올 데이터의 주소값과 동일하지 않을 경우에만 적용된다
향상된 캐쉬 메모리 기능, Advanced Smart Cache
지금까지는 코어 마이크로아키텍쳐의 단일 코어기준으로 모든 것을 설명하였지만 이번 기능은 듀얼 코어에서만 이득이 되는 기능이기에 듀얼 코어를 기준으로 설명하겠다.
현재 넷버스트 마이크로아키텍쳐 기반으로 만들어져서 출시되어 있는 듀얼 코어 프로세서 제품들은 경쟁사가 주장하듯 진정한 듀얼 코어 프로세서가 아니라고 볼 수도 있다. 경쟁사인 AMD의 듀얼 코어 프로세서의 경우 코어0과 코어1이 하나의 다이에 설계되어 있고 서로 데이터 전송이 가능하지만 이미 시장에 출시된 INTEL의 Smithfield나 Presler 코어는 두 개의 코어가 직접 데이터를 전송할 수 없고 시스템 버스를 공유하는 방식을 사용하고 있어 독립적인 코어 두 개가 있는 것으로 볼 수 있다.
따라서 경쟁사에서는 이부분의 홍보를 통해 자사 제품만이 진정한 듀얼코어 프로세서 제품이고 AMD 프로세서가 사용한 방식의 우수성을 홍보하고 있는데 코어 마이크로아키텍쳐의 듀얼 코어 프로세서는 경쟁사인 AMD의 듀얼 코어 프로세서와 거의 동일한 방식을 사용한다.
오히려 이번에 설명할 캐쉬 메모리 방식 때문에 더 우수한 방식으로 인정받고 있는데 INTEL이 코어 마이크로아키텍쳐에 사용한 캐쉬 메모리 기능은 다음과 같다.
1. L2 캐쉬 메모리의 공유

위에서 설명하였듯이 지금까지의 넷버스트 마이크로아키텍쳐 기반 듀얼 코어 프로세서(Smithfield나 Presler 코어)들은 모두 시스템 버스를 통해 데이터를 전달해야 했다. 만약 Core1과 Core2가 동시에 필요한 데이터가 Core2의 L2 캐쉬에 저장되어 있으면 이 데이터는 시스템 메모리에서 Core1의 L2 캐쉬로 불러와야 한다.
이 경우 Core1은 데이터가 전달될 때까지 몇사이클을 허비하게 되고 시스템 메모리를 사용하게 됨으로 그다지 효과적인 시스템 구조가 되지 못했지만 코어 마이크로 아키텍쳐는 L2 캐쉬를 Core1과 Core2가 공유하게 설계되었다.
이 방식에서는 Core1과 Core2과 L2 캐쉬를 공유하고 있음으로 이 두 코어가 필요한 데이터를 동시에 접근할 수 있다. 기존 방식과 비교해보면 시스템 버스를 경유하여 데이터를 가져올 필요가 없음으로 Core1의 지연 문제는 발생되지 않는다.
경쟁사의 경우 L2 캐쉬가 각각에 코어에 고정된 용량이 할당되어 있음으로 이와 같은 상황이 발생한다면 코어 마이크로아키텍쳐보다 약간 지연이 될 수도 있다.
2. L2 캐쉬 메모리를 동적으로 배분한다.
일반적으로 캐쉬 메모리의 용량이 높으면 성능 향상에 도움이 된다. 왜냐하면 더 많은 데이터를 시스템 메모리에서 캐쉬 메모리로 가져올수 있기에 시스템 메모리까지 가서 데이터를 가져와야하는 시간이 단축될 확율이 높아지기 때문이다.
이처럼 더 높은 용량의 캐쉬 메모리는 시스템 성능에 향상에 도움을 줄수 있는데 코어 마이크로 아키텍쳐의 L2 캐쉬는 두 개의 코어가 하나의 L2 캐쉬를 공유하도록 설계되었어 코어의 부하에 따라 L2 캐쉬의 용량을 적절하게 배분하여 사용하도록 만들어 놓았다.

위의 이미지를 통해 간단히 설명하면.. 기존 방식과 코어 마이크로아키텍쳐의 방식으로 만들어진 듀얼코어 프로세서가 있다 그리고 둘다 2MB의 L2 캐쉬를 가지지만 기존 방식은 Core1과 Core2가 1MB씩 나눠서 사용하도록 고정되어 있고 코어 마이크로아키텍쳐는 2MB를 공유해서 사용할 수 있다
이때 양쪽 Core1에 동일한 부하의 작업이 진행되면 기존 방식은 1MB의 L2 캐쉬 공간에 시스템 메모리의 데이터를 가져다 놓지만 코어 마이크로아키텍쳐는 최대 2MB까지 Core1의 L2 캐쉬 메모리로 사용할 수 있다.
이렇게 되면 기존 방식은 L2 캐쉬에서 필요한 데이터가 없는 경우 시스템 메모리에서 데이터를 찾아서 불러와야 하지만 코어 마이크로아키텍쳐의 경우 더 많은 용량의 L2 캐쉬를 사용하고 있음으로 시스템 메모리에서 데이터를 불러올 확률이 줄어들게 되어 데이터 전송 지연의 감소로 인해 보다 빠른 데이터 처리가 가능하게 된다.
이번에 알아본 기술은 이미 배니아스 마이크로아키텍쳐 기반의 코어인 Yonah 코어의 Core Duo 프로세서에 적용되어 있는 기술이다.
|