기글 하드웨어 하드웨어 포럼
CPU구조에 관한 생각을 하면서 작년쯤에 구상했던 구조 입니다.
IF - Instruction Fetch
ID - Instruction Decode
Sc - Scheduler
xs - CrossShare Controller
Reg - Register
Pipe - Pipeline
여기서 2개 코어가 대칭형으로 맞붙으면서
각각의 L1캐시와 레지스터를 잇는 버스로 공유 형태를 구성하게 됩니다.
이는 애슬론 64 X2의 독립되어 있지만 공유되는 L2캐시 구성과 비슷한데,
이러한 캐시 및 레지스터 참조공유는 고스트 코어만을 위해 쓰입니다.
각 코어의 파이프라인은 대략 4개의 ALU를 가집니다.
여기서 불도저의 클러스터 구조 또한 적용할 수 있기 때문에,
극적으로 유기적인 멀티스레딩 구조가 됩니다.
FPU역시 일반 구조보다 1개를 더 가집니다.
여기서 단일코어 성능의 100%를 가질 수 있는 2개의 물리 코어와
단일코어 성능의 200%까지 가질 수 있지만, 레이턴시에서 밀리는 1개의 고스트 코어를 갖습니다.
실제 성능에서는 CPU 점유 분산이 발생하므로 단일 코어의 300%를 넘을 수 없습니다.
아톰처럼 SMT성능이 150%인 경우가 300%에 근접하겠지만, OoO에는 해당되지 않을겁니다.
여기서 특징이 하나 발생하는데, 사용 목적에 따라 스레딩 갯수를 달리함으로써 특성이 달라진다는 겁니다.
1스레드 모드의 경우 고스트 코어만을 남기고 물리 코어는 끔으로써,
1개 스레드로 최대 2개 코어의 합과 동등한 성능까지 기대(만)할 수 있는 X86계열 성능향상의 궁극적인 형태가 되며,
2스레드 모드는 고스트 코어를 끈 평범한 듀얼코어 처럼 작동하지만 놀고있는 반대편 코어의 자원을 이용할 수 있는 가변형,
3스레드 모드는 성능을 최대한으로 끌어내기 위하여 워크스테이션이나 서버에 적합한 형태가 됩니다.
하지만 사실상 고스트 스레드는 양쪽의 ALU를 다 사용하게 된다지만, 해봤자 효율은 단일코어의 100% 초중반이 한계이기 때문에
일반 PC든 어떤 용도든 3스레드로 사용하는게 맞습니다. 스레드 숫자를 조정하는것은 현실적이지 못한 방법이죠.
다만, OS가 이러한 CMT를 인식하여 무거은 프로세스를 고스트 코어에 할당할 경우 성능 이득을 볼 수 있습니다.
이는 현재의 SMT, 클러스터 형태의 CPU에서도 이러한 OS의 프로세스 스케쥴링을 통해 성능향상을 끌어낼 수 있습니다.
개인적인 평가로는 이미 Core2Duo에 와서 스케쥴링을 통한 성능향상은 한계에 도달했다고 봅니다.
Core i7에서 성능 향상이 있을 수 있는 이유는 ALU를 추가하면서 HT까지 넣었기 때문에 가능한 효율입니다.
기본적으로 ALU를 무작정 늘일수 없는 것이 아무리 스케쥴링 효율이 좋아도
효율은 이미 대략 +80%의 그래프로 점점 떨어져 갯수가 3개를 넘어가기 시작하면 효율이 많이 나빠지게 됩니다.
네할렘에서 코어당 성능 향상은 ALU를 추가를 통한 성능 향상이지만, 효율이 떨어지는 문제를 HT로 커버한것 뿐입니다.
HT(SMT)의 궁극적인 이점은 적은 추가설계로 CPU의 잉여자원을 최대한 끌어낼 수 있다는 겁니다.
여기서는 일반적인 HT의 낮은 효율(스레드가 나뉘기 때문에 문제가 됨)을 커버하기 위해서
2개 코어의 HT를 하나의 스레드로 합치는것이 중점입니다.
사실 코어2개에서 스케줄러까지의 부분은 2개 코어가 각각 따로 HT를 사용할 때보다
1개가 줄게 되니 오히려 트렌지스터(다이면적) 이득이 있고, 추가되는 부분이라고 해봤자,
L1과 레지스터를 공유하기 위한 버스, 그리고 필요할지 안필요할지 모르는 CrossShare 컨트롤러 뿐입니다.
이로써 i7같이 30%의 효율을 보이는 HT가 2개 코어의 성능향상분을 합침으로써
단일 스레드에서 약 60%의 효율을 가지고 CPU 점유분산 문제를 최소화하게 됩니다.
따라서 즉, 적은 투자로 HT를 켜면 성능이 줄어든다는 문제를 어느정도 해결하는 셈이죠.