CPU구조에 관한 생각을 하면서 작년쯤에 구상했던 구조 입니다.

 

CMT.gif

 

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의 프로세스 스케쥴링을 통해 성능향상을 끌어낼 수 있습니다.