똑똑 해진 디코딩 : 매크로/마이크로 퓨전

매크로 Op 퓨전(Macro Ops Fusion)

그렇다고 해서 코어의 디코더 부분이 P6에서 단순히 디코더 수를 늘린 것은 아니다.

코어 아키텍쳐는 각 명령어가 Micro-Op으로 디코딩 되기 전에 몇몇 특정 종류의 명령어를 묶어서 하나의 Micro-Op으로 만드는 기능을 구비하고 있다. 매크로 퓨전(Macro Fusion)이라는 이름의 이 기능은 비교 명령인 cmp(Compare)와 조건 분기 명령인 Jne(Jump if Not Equal)을 하나의 Micro-Op으로 만들어 연산 유닛에 보낸다. 즉 매크로 퓨전 없이는 각기 명령어마다 1개의 디코딩 과정을 거지고 또 각기 연산 유닛에 보내졌던 것을 하나의 Micro-Op, 위의 예에서는 cmpjne,으로 만들어 연산 유닛에 보내게 됨으로써 디코딩 유닛에서 전체적으로 디코딩 해야 할 명령어 수가 줄어들고, 결과적으로는 더 많은 명령어를 (같은 사이클 내에) 디코딩할 수 있다는 것을 의미한다. 즉 코어가 가진 4개의 디코더(1개 콤플렉스, 3개 심플)에서 한 사이클에 4개의 명령어 디코딩이 가능한 것을 매크로 퓨전으로 최대 5개까지 한 사이클에 할 수 있다는 것이다.

이 예제는 일반적인 x96 명령어가 디코딩 되는 과정을 그린 것이다.

만약 디코더 유닛이 4개가 붙어 있다면 아래서부터 차례로 대기열에 대기중인 명령어들이 4개가 디코딩 되고 5번째 명령어는 다시 “디코더 0”에서 2번째 사이클에서 디코딩 된다.

그러나 매크로 퓨전이 적용된 코어 아키텍쳐는 cmp와 jne를 하나의 Micro Op으로 디코딩 가능, 결국 해당 예제에서 1사이클만에 명령어 5개를 디코딩할 수 있다는 것을 보여주는 것이다.

인텔에서는 x86 명령어(Instruction)-즉 디코더에서 이보다 작은 단위의 연산인 Micro Op으로 쪼개기 전까지 명칭-를 Macro Op이라고 부르는 것으로 보인다. 실질적으로 매크로 퓨전이 궁극적으로 의미하는 바는 각기 다른 Micro Op으로 쪼개질 명령어(Instruction, 즉 Macro-Op)을 하나의 Micro Op으로 디코딩을 할 수 있다는 의미이다.

그렇다면 실질적으로 컴퓨터를 사용시에 프로세서에서 이 매크로 퓨전으로 실질적인 성능 향상은 어느 정도 될까? 이는 전적으로 혼합, 즉 퓨전의 대상이 되는 cmp, jne의 사용빈도에 달려 있는데 애플리케이션 구동시 전체 총 디코딩되는 Micro-Op의 전체 수를 약 15%선까지 줄일 수 있다고 한다.

이는 단순히 디코딩 되는 명령을 줄여 성능을 끌어올리는 이점만을 제공하는 것은 아니다. 디코더가 처리해야할 명령의 수가 준다는 것은 바로 전력 소모량을 낮출 수 있다는 결과 역시 가져온다.

마이크로 Op(Micro-Op) 퓨젼

위의 매크로 퓨전이 명령어의 2개의 명령어를(코어 아키텍쳐의 경우 Cmp와 Jne가 되겠다) 하나의 Micro-Op으로 디코딩할 수 있는 명령어(cmpjne)로 만드는 과정을 거치는 것이라면 마이크로 퓨전은 이미 인텔이 요나에서 선보였던 것으로 이미 명령어(Instruction)에서 디코더를 지나 Micro Op으로 쪼개진 상태에서 하나로 묶을 수 있는 Micro Op들의 쌍을 찾아서 묶어서 연산 유닛으로 보낸다는 것을 의미한다. 이 기술도 근본적으로 처리할 Micro-Op의 수를 줄여줌으로써 성능 향상과 동시에 전력 소모량 절감의 효과를 가져온다. 인텔은 마이크로 퓨전으로 전체 파이프라인에서 처리해야할 Micro Op의 수를 약 10% 정도 절감할 수 있다고 밝힌 바 있다.  

한편 이러한 Micro-Op 절약하기 테크닉만이 코어 아키텍쳐의 디코딩 유닛에서 유일한 장점은 아니다. 넷버스트 아키텍쳐의 경우 1개의 대형 디코딩 유닛을 갖추고 있지만 (이 자체가 하나의 거대한 콤플렉스 디코더로 봐야 한다) 사이클당 3개의 Micro Op 만을 트레이스캐쉬를 거친 히후에 연산 유닛으로 보낼 수 있다. 그러나 코어의 경우 총 4개( 3개 심플 + 1개 콤플렉스)로 사이클당 7개의 Micro Op을 연산유닛으로 보낼 수 있다


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기
 
 
 

디코딩 유닛 : 변화의 바람

넷버스트가 이전 P6 아키텍쳐에서 가장 많은 차이점으로 부각했던 것은 바로 매우 많은 단계의 파이프라인, 즉 클럭 속도를 끌어올릴 수 있다는 것이었다. 그러나 시스템 전체 측면에서 프로세서 클럭을 높에 끌어올릴 수 있다는 것이 전체적인 성능향상을 의미하지는 않는다. 현재 펜티엄 프로세서의 최고 클럭은 3.8GHz이며 반면 메인 메모리의 클럭 속도는 667MHz에 지나지 않는다. 더 정확히 하자면 내부 데이터 버스의 폭과 어드레싱 능력, 그리고 대역폭을 비교해야 겠지만, 일단 프로세서 클럭을 끌어올리는 것, 그리고 깊은 단계의 파이프라인은 결국 이를 받쳐주는 메모리 기술과 데이터 수집/캐쉬/재정렬 기술이 없으면 실질적인 성향 향상을 도모하기는 어렵다.

때문에 인텔은 넷버스트의 주요 기능으로 트레이스 캐쉬(Trace Cache)를 도입했다. 트레이스 캐쉬는 Micro-Op (프로세서 연산 유닛에서 처리하기 위해 명령(Instruction)을 단순 연산자, 일례로 덧셈이나 곱셈으로 쪼갠(Decoding) 것을 의미하며 이러한 x86의 특징으로 인해서 RISC와 CISC의 경계가 모호해졌다고 해도 무방하다)을 캐쉬에 담아놓고 프로세서 연산 유닛이 이를 필요로 할 경우 명령어를 불러서 다시 디코더를 통해서 나온것을 기다리지않고 바로 디코딩된 Micro-Op을 가져올 수 있도록 저장해놓은 캐쉬 공간이다.

트래이스 캐쉬의 도입으로 인해서 인텔은 트레이스 캐쉬 이전 단계에 거대한 디코더 유닛을 넷버스트에서 필요로 했다. 그리나 이전 요나의 경우 디코더를 심플 디코더 2개, 콤플렉스 디코더 1개 (심플 디코더의 경우 1개의 Micro Op으로 변환할 수 있는 명령어(Instruction)을 변환하며 콤플렉스의 경우 1개의 명령어가 1-4개의 Micro Op들로 변환되는 명령어에 대한 디코딩을 진행한다)를 갖추고 있으며 트래이스 캐쉬 같은 별도의 보조 캐쉬없이 바로 재정렬 버퍼(Redorder Buffer) 공간을 통해서 연산 유닛으로 데이터가 공급되게 된다.

그러나 코어 아키텍쳐의 경우에는 넷버스트 대비 상대적으로 파이프라인 단계가 14단계로 짧다(아직 각 파이프라인 각각 단계에 대한 자세한 정보는 인텔이 공개하지 않았다). 파이프라인 개수가 줄어든 것도 한 가지 이유이고, 진보된 캐쉬 기술을 도입한 것도 이유이겠지만 일단 넷버스트가 자랑스럽게 내밀었던 하이퍼파이프라인(높은 단계의 파이프라인)과 트레이스 캐쉬는 코어 아키텍쳐에서는 자취를 감추었다. 대신 P6에서 사용했던 디코더 수를 늘렸으며 심플 디코더가 3개, 1개의 컴플렉스 디코더를 갖추고 있다. 이외에 바로 중간 캐쉬(트래이스 캐쉬) 없이 연산 유닛으로 공급되는 구조를 갖춘 것은 P6와 유사하다.  


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기
 
 
 

코어, 그 뿌리를 찾아서

인텔은 코어 아키텍쳐를 백지상태에서 완전히 설계를 다시 한 것이라고 밝혔다. 외형상으로 현재 출시되는 넷버스트 아키텍쳐와 그리고 배니어스, 펜티엄III 아키텍쳐(P6) 와 비교하자면 단연코 펜티엄III와 더 근접한 모습을 취하고 있다는 것을 알 수 있다. 사실상 인텔이 넷버스트 아키텍쳐의 펜티엄4를  출시할 때 내새웠던 기능들은 이번 코어 아키텍쳐에서는 찾기가 어렵다.

한 인텔 관계자에 의하면 코어 아키텍쳐 설계시에 이전 펜티엄4에서 가져온 것은 프리펫칭(Pre-Fetching)과 관련된 부분이 전부였고 실질적으로 밑바탕이 된 것은 현재 코어 듀오란 이름으로 출시되는 요나(Yonah) 프로세서였다고 한다. 현재의 버스 구조, 그리고 몇몇 알고리듬부분을 제외하고는 펜티엄4와 공통점을 찾을 수 없고 펜티엄III를 기반으로 한 요나의 후예이기에 코어 아키텍쳐는 펜티엄III와 많은 부분에서 공통점을 피할 수 없다.

이렇게 때문에 코어 아키텍쳐는 P6(펜티엄 프로~ 펜티엄 III)의 후예인 P8로 불리기도 한다. (물론 인텔은 이렇게 부르기를 거부하겠지만). P6의 후속버전, 즉 P7격은 현재 펜티엄 M인 배니어스와 요나(사실 요나 프로세서의 아키텍쳐는 인텔이 정식 명칭을 부여한 바 없다)이고 ,그리고 이의 후속 버전으로 코어 아키텍쳐가 P8이 된다는 것.

일단 펜티엄4의 근간을 이루었던 넷버스트 아키텍쳐와 코어 아키텍쳐, 그리고 P6 아키텍쳐의 간추린 다이어그램을 보면서 근본적인 차이를 이해하도록 하자.  


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기
 
 
 

코어式 철학 : 무어의 법칙은 건재하다

“더 높은 성능을 구현하기 위해서 더 높은 전력을 소모할 필요는 없다“

이는 인텔이 지난 개발자 포럼에서 코어 아키텍쳐를  위와 같은 발언으로 소개했다.

인텔의 새로운 마이크로아키텍쳐에 대한 고민은 특정 부분이 아니라 데스크탑, 모바일, 서버 전 분야에 대한 고민에서 출발한 것이다. 데스크탑 부분에서 인텔은 높은 파이프라인 단계(31 단계)의 넷버스트 아키텍쳐 펜티엄4로 클럭을 끌어올리며 성능을 높이는데 성공했다. 그러나 클럭 속도를 끌어올릴 수록 높은 전력소모량과 발열도 같이 증가, 결국 이러한 방법으로 성능 향상은 한계에 도달했다.  펜티엄4는 0.25>0.18>0.13>0.09 미크론으로 제조 공정의 미세화에도 불구하고 결국 전력 소모량을 낮추지는 못했다. 클럭 경쟁을 종료한 인텔은 결국 멀티 코어와 캐쉬 크기를 끌어올리는 방법을 선택하게 되는데, 여전히 현 넷버스트 아키텍쳐에서는 클럭을 낮추더라도 코어수를 늘리고 캐쉬를 늘리는 만큼 전력 소모량이 그대로 증가했기 때문에 본격적인 멀티 코어 시대에 맞는 아키텍쳐가 절실히 필요하게 된 것이다.

모바일 부분에서는 넷버스트의 이런 구조 때문에 펜티엄4M 이라는 모바일용 데스크탑 프로세서를 내놓고도 또 다른 아키텍쳐의 펜티엄M까지 내놓게 된다. 노트북의 특성상 배터리 수명이 성능 이상으로 중요한 인자이며 휴대성을 강화한 슬림형 노트북의 경우 작은 크기의 냉각 솔루션 역시 필요했기 때문이다. 또한 24시간 무결성 동작이 필요하고 블레이드 서버와 같이 높은 설치 밀도를 요구하게 된 서버 환경에서도 마찬가지이다.

결국 인텔은 데스크탑과 서버 부분에서는 넷버스트 아키텍쳐의 프로세서, 그리고 모바일 프로세서에서는 펜티엄M의 배니어스 코어 아키텍쳐로 2개의 아키텍쳐 라인을 동시에 운용하게 되는데 코어 아키텍쳐의 등장은 그동안 분리되었던 각 분야에서 아키텍쳐를 통합하는 것과 동시에 앞으로 성능향상의 주요 지침이 될 멀티 코어 프로세서 전략에 있어 핵심이 된다.

코어 아키텍쳐는 인텔 이스라엘팀이 개발한 것으로 이 팀은 현재 펜티엄M 프로세서의 아키텍쳐를 개발한 팀으로 알려져 있다. 코어가 발표되면서 가장 논쟁거리가 되었던 것은 과연 이것이 “넷버스트를 포기한 인텔이 펜티엄 3로 회귀”하였냐는 것인데 코어 자체적으로는 P6 아키텍쳐에 기반을 둔 배니어스부터 출발했지만 펜티엄3로 회귀로는 보기 어렵고 그렇다고 펜티엄3에다가 단순히 넷버스트에서 배운 것을 몇 개 적용했다고 보기에도 어렵다. 코어는 위 언급한 아키텍쳐들의 장점을 가지고 왔지만 백지에서 출발해서 설계한 완전히 새로운 차세대 아키텍쳐로 보아야 한다.

물론 뒤의 코어 아키텍쳐에 대한 설명에는 P6 , 그리고 넷버스트와의 비교를 통해서 차이점을 위주로 언급하게 될 것이지만, 이것은 코어가 이 아키텍쳐들에서 시작했다기 보다는, 인텔의 진화 선상에서 이전 세대의 아키텍쳐와의 관계를 설명하기 위한 것으로 보는 것이 옳다.  

멀티 코어가 프로세서 업계에서 대세가 되면서 x86 프로세서이외에도 RISC 프로세서, 그리고 여타 아키텍쳐의 프로세서들도 모두 멀티 코어로 진화하고 있다. 그러나 인텔의 멀티 코어 전략은 여타 업체와는 많은 차이점을 보인다.

현재 8개의 코어를 장착한 썬 마이크로시스템즈의 나이아가라(T1)이나 IBM, 소니, 도시바의 합작인 셀 프로세서의 경우 멀티쓰레드, 즉 다수의 쓰레드를 동시에 처리하도록 하는 연산의 병렬화, 즉 코어수를 늘림으로써 병렬연산 기능 강화에 치중한 대신, 싱글 쓰레드 성능은 어느 정도 포기한 구조를 택하고 있다. 이는 멀티 코어 프로세서를 구성하는 각 코어에 수퍼스케일러 프로세서의 대표적인 특징인 비순차적 실행(Out Of Order Execution)을 없앤 특징(즉 반대로 초기 프로세서의 특징인 순차적(In-Order Execution) 실행 구조를 택하고 있다)에서 잘 드러난다. 즉 각 코어구조를 최대한 단순화 시키고 여러 개의 코어 구동을 통해서 연산 병렬화에 주력하겠다는 것.


<셀 프로세서의 기본구조. 간단한 구조의 SPE로 구성되어 있다>

인텔의 코어 아키텍쳐는 이 부분에서 여타 업체의 ‘멀티 코어’전략과는 확연히 다른 모습을 보여주며 오히려 비순차적 실행 범위를 더 넓히고 하나 코어 자체의 성능을 높이는 방향으로 설계되었다. 코어 아키텍쳐는 기존 싱글 쓰레드 기반의 프로세서의 특징, 비순차적 실행 유닛을 그대로 고수하면서도 이를 개선시켜, 각 코어에서 성능을 양보하지 않겠다는 의지가 반영된 것이다. .

즉 이와 같은 접근 구조는 결국, 앞으로 멀티쓰레드 성능이 보장된 애플리케이션에서 높은 성능을 내도록 한 것 이외에도 현재 주류를 이루고 있는 싱글 쓰레드 애플리케이션에서도 탁월한 성능을 낼 수 있도록 한 것이다. 성능에 대해서는 이후에 언급하겠지만 현재 주류를 이루는 싱글 쓰레드 애플리케이션, 특히 게임등에서 컨로가 높은 성능을 낼 수 있는 이유가 여기에 있다.  이러한 이유로 코어 아키텍쳐의 각 코어는 비순차적 실행에 필요한 연산 유닛과 회로를 줄여 다이 크기를 줄이기 보다는 이 특성을 고스란히 유지하면서도 전력 효율이 높도록 구조를 갖추는 방향으로 설계되었다.

그렇다면 펜티엄4와의 넷버스트와 기본적인 차이점은 무엇인가? 넷버스트는 깊은 파이프라인 구조로 클럭 속도를 끌어올리는 것으로 성능향상을 도모할 수 있게 되었지만 코어 아키텍쳐는 칩에 코어수를 늘리는 것으로 성능향상을 도모할 수 있도록 설계되었다. 매 약 18개월마다 트랜지스터 집적수가 2배, 그에 따라서 성능 향상도 이루어진다는 매우 ‘무어의 법칙’스러운 설계이다.  


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기
 
 
 

1.펜티엄? 펜티엄!

인텔이 P5, P6등의 세대별 이름을 붙인 아키텍쳐 명칭을 사용하다가 펜티엄4를 내놓으면서 발표한 ‘넷버스트’ 아키텍쳐도 발표된지 무려 5년이 지났다. 인텔은 올해 3분기부터 본격적으로 출시될 데스크탑 프로세서, 코드명 ‘컨로(Conroe)’를 시작으로 이제 넷버스트를 보내고 새로운 마이크로아키텍쳐 코어(Core)를 도입한다. 코어는 넷버스트의 한계를 인식하고 이전 펜티엄 3로 회귀하려는 것일까? 아니면 코어는 동네에 새로 이사 온 낯선 무서운 아이일까?  인텔이 코어 아키텍쳐의 핵심으로 부상시키고 있는 와트당 퍼포먼스(Performance per Watt)는 과연 무엇일까?

펜티엄? 펜티엄!

인텔은 넷버스트 아키텍쳐 도입시이전 486 이후 586이라 불렸었던 P5 아키텍쳐의 프로세서부터 사용했던 펜티엄(Pentium)의 이름을 버리고 새 이름을 사용할 것을 고민했었다. 이전 P6 대비 완전히 바뀐 넷버스트 아키텍쳐 이미지를 강화하기 위해서는 펜티엄 브랜드를 유지하기 보다는 무엇인가 새로운 이름이 필요했다는 것이다. 하지만 인텔은 결국 펜티엄4라는 이름으로 결국 펜티엄 브랜드를 지속하게 되는데, 이는 컴퓨터용 프로세서로써 펜티엄의 인지도가 그만큼 막강했다는 것도 한 가지 이유지만 인텔 프로세서 아키텍쳐가 세대를 거듭하면서도 결국 이전 펜티엄 프로세서(P6)의 장점을 계승하면서 성능 도약을 위한 새로운 부분이 추가되었다는 특징도 고스란히 넷버스트에서 승계되었기 때문이다.

펜티엄(Pentium)이란 이름 자체는 5세대(Pent-) 프로세서란 이름을 강조하기 위해서 만들어진 것이다.  사실 286, 386, 486이란 이름으로 대변되던 프로세서 세대를 펜티엄이라는, 다소 직관적이지 못한 이름으로 바꾼 것에는 AMD, 사이릭스등의 x86 프로세서 경쟁 업체들이 586, 686 시리즈등으로 이 이름을 그대로 프로세서에 적용하기 시작하면서 이를 피하기 위해 사용한 것인데, 이후 P6 아키텍쳐에서는 그러면 섹시움(Sexium)을 사용할 것이냐는 장난기 어린 비판도 있었지만 결국 인텔은 P5 이후에 P6, 그리고 넷버스트를 거치면서 10년이 넘는 기간 동안 펜티엄 브랜드를 유지해 왔다.

    

<펜티엄의 변천사>

인텔은 현재 출시되는 넷버스트 아키텍쳐의 듀얼 코어 프로세서(프레슬러)에도 펜티엄 브랜드를 사용하고 있으며 모바일 부분에서 펜티엄4M과는 다른, 배니어스(Banias) 코어의 프로세서에도 펜티엄M 브랜드를 여전히 사용하고 있다. 그러나 코드명 요나의 배니어스 기반 모바일 듀얼 코어 프로세서에는 펜티엄 브랜드를 드디어 떠나서 코어 듀오(Core Duo) 프로세서를 사용했으며 이제 본격적으로 언급하기 될 코어 아키텍쳐의 프로세서에서도 마침내 펜티엄 이름을 버리고 ‘코어’라는 이름을 프로세서 공식 브랜드명으로 사용하게 된다.

10년을 넘게 유지해온 펜티엄을 버리고 새 이름을 사용한다는 것은 그만큼 인텔이 코어 마이크로아키텍쳐에서 많은 혁신을 이루어내었고 인텔이 이 프로세서가 전세대와 밑바탕부터 다르다는 것을 보여주는 것이기도 하지만 여전히 코어 아키텍쳐는 P5, P6, 넷버스트, 배니어스 아키텍쳐의 진화를 거치는 동안 각 세대의 장점을 융합시킨 새롭지 않지만 새로운 아키텍쳐로 보는 것이 옳다.  


댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기