Inside Machine을 읽다가 "90nm 공정을 사용하게 되면서부터 높은 클럭 속도와 높은 전력 소모에 의존하는 넷버스트 마이크로아키텍쳐에 문제에 생기기 시작했다."
넷버스트 마이크로 아키텍쳐에 의해서 전력소모의 증가가 일어나 인텔도 방향을 바꿨다는 이야기가 있어서 공정과 관련되어 생각할 수 있을 것 같아서 글을 옮겨봅니다.
인텔의 HT에 대해서 보다 이해를 높이기 위해서는 우선 이 넷버스트 아키텍쳐에 대한 간략하나마의 이해가 필요합니다.
CPU의 아키텍쳐는 보통 인스트럭션 셋 아키텍쳐(ISA : Instruction Set Architecture)와 마이크로 아키텍쳐(Micro Architecture)로 구분합니다.
넷버스트의 ISA상으로의 구분은, 역시 기존 IA32 x86 명령어 셋을 계승한 그대로입니다. 마이크로 아키텍쳐의 경우, 기존 p6(펜티엄pro ~ 펜티엄3)코어의 뒤를 잇는 아키텍쳐로서, 상당한 정도의 변화를 내포하고 있습니다.(혹자에 따라서는 p6에서 넷버스트로의 진화를 크게 변화하지 않은 것으로 보기도 합니다.)
많은 하드웨어 전문 사이트들이 넷버스트가 등장했을때 모두 제각기 비슷비슷한 넷버스트에 대한 분석과 설명을 겯들인 기사를
포스팅했었기 때문에, 이러한 넷버스트 아키텍쳐를 마치 금방 등장했듯이 자세하게 기존 기사들과 똑같이 다루는 것은 시간낭비밖에
되지 않을듯 합니다. 따라서, 이번 강좌에서는 요약정리식(?) 정도로만 넷버스트 아키텍쳐를 소개할까 합니다.
우선 간단한 요약은 다음과 같습니다.
①20stage에 이르는 하이퍼파이프라인(Hyper Pipeline)의 도입 ②하이퍼파이프라인에 따른 역작용을 최소화 하기 위한 장치요소들의 추가 ③신규 SIMD추가 (SSE2) ④그외의 의미심장한 변화들
그럼 이제 하나하나 간략하게 살펴보겠습니다.
①하이퍼파이프라인(Hyper Pipeline)의 도입
이미 알려졌다시피, 넷버스트에서는 기존 p6의 10stage나 AMD의 K7의 12stage에 비해 무척 긴 20stage에 이르는 파이프라인을 도입했습니다. 그리고 여기에 Hyper Pipeline이라는 다소 거창한 명칭을 부여했습니다.
파이프라인의 스테이지가 길어지면 개발자입장에서는 해당 CPU의 동작클럭을 높이는데 유리한 장점이 있습니다. 단순히 산술적인 비교를 한다면, 10stage 파이프라인의 경우에 하나의 명령어를 실행하는 시간에 비해 파이프라인이 20stage로 늘어나게 되면 그보다 절반의 시간이면 다음 stage로 통과 가능하기 때문입니다.
반면 이렇게 파이프라인의 stage가 많아질수록 생겨나는 역작용역시 생각해보아야 합니다.
첫번째는 IPC(Instruction Per Clock : 클럭 당 실행명령어)가 낮아진다는 것입니다. 앞의 10stage파이프라인과 20stage파이프라인의 경우를 비교해보면, 20stage파이프라인은 10stage파이프라인에 비해 하나의 stage에서 걸리는 처리시간은 절반으로 줄일 수 있지만, 반면에 하나의 stage에서 할 수 있는 일 역시 절반으로 줄어드는 것 이라고 간단히 생각해볼 수 있습니다.(물론 이와 같은 비교는 설명을 위한 단순 비교이므로, 실제 CPU에 그대로 적용할 수는 없는 문제입니다.)
이러한 낮은 IPC의 문제는 펜티엄4가 발표된 이후 AMD사가 PR마케팅을 도입하면서 대대적으로 문제를 삼았던 부분이기도 합니다. 가
령 동일한 클럭, 예를 들어서 1GHz의 펜티엄3와 펜티엄4(물론 1GHz 펜4는 없었습니다.)가 있다고 가정한다면,
파이프라인의 stage가 상대적으로 적은 펜티엄3의 성능이 높게 나올 가능성이 높습니다. 보다 높은 IPC덕분입니다. 이 때문에
많은 사용자들이 펜티엄4를 두고 "구라클럭"이라고 빈정대기도 했습니다.
두번째 생각해 볼 수 있는 역작용은, 분기예측(Branch Prediction)이 실패할 경우 깊은 파이프라인 때문에 리셋(Reset : 파이프라인을 비움)에 따른 손실이 크다는 점입니다.
이문제는 펜티엄4가 처음 출시되었을때 제각각 리뷰를 내놓은 많은 하드웨어 사이트들이 가장 먼저 우려했던 문제이기도 했습니다. 기존에 비해 훨씬 늘어난 stage로 인해서 그만큼 리셋에 따른 위험부담 역시 커진셈입니다.
②하이퍼파이프라인에 따른 역작용을 최소화 하기 위한 장치요소들의 추가
여기서 언급되는 "역작용"은 앞에서 말한 두가지 역작용 중 후자(분기예측실패에 따른 위험)를 위한 것에 가깝습니다. 전자인 IPC효율에 관한 문제는 다음 강좌에서 다루도록 남겨두고, 이 파이프라인 리셋에 따른 위험부담을 줄이기 위해 인텔이 어떤 방안을 도입하였는지 살펴보겠습니다.
첫번째로 기존의 인텔의 아키텍쳐서에는 찾아볼 수 없었던 독특한 캐쉬가 도입되었습니다. 바로 ETC(Excution Trace Cache : 실행추적캐쉬)입니다.
기존의 L1, L2캐쉬(데이터, 명령어캐쉬를 합친)의 경우, 디코딩 이전의 데이터와 명령어를 저장했던 것에 비해서 이 ETC의 경우 디코딩 이후의 Micro Ops를 저장한
다는 것이 가장 큰 차이점이라고 할 수 있습니다. 이렇게 ETC를 가지게 되는 경우, 기존의 아키텍쳐가 파이프라인 리셋이
일어나면 또 다시 디코딩과정을 거쳐야 했던것에 비해 프로세서 타이밍이 크게 효율적이어 질 수 있는 것입니다.
두번째 살펴 볼 부분은 ADE(Advanced Dynamic Execution : 향상된 동적 실행)의 도입입니다.
이 ADE는 기존의 인텔의 아키텍쳐에도 존재하고 있던 부분을 더욱 향상시킨 것으로, 무분별하게 명령어들이 실행되지 않고 프로세서가 원하는 순서에 따라 명령어들을 정돈시킬 수 있는 풀(Pool : Instruction Window라고 부릅니다.)을 둠으로서 분기예측실패의 확율을 줄여주는 방법입니다.
또한 ADE에 포함된 또 하나의 분기예측실패를 줄이기 위한 방안으로, 명령어가 실행되는 과정을 저장하는 4KB의 Branch Target Buffer를 두었습니다.
즉, 이러한 여러가지 기술과 장치를 도입함으로서 인텔은 우선 분기예측성공율을 높이고, 또한 실패했을때의 피해를 최소화하려는 시도를 한 것으로 정리할 수 있습니다.
③신규 SIMD추가 (SSE2)
인텔은 과거 펜티엄 MMX에서의 MMX, 펜티엄3에서의 SSE에 이어서, 세번째로 선보이는 SIMD명령어set인 SSE2를 펜티엄4에 도입하였습니다.
이러한 SIMD(Single Instruction Multiple Data)기술은 소프트웨어가 지원을 해야만 득을 볼 수 있는 것이
기 때문에, 펜티엄4가 처음 출시되었을때 여러 하드웨어 사이트들은 "펜티엄4가 낮은 IPC효율로 인해서 다소 실망스러운 성능을
보이긴 하지만 시일이 지나서 SSE2를 지원하는 소프트웨어들이 속속 출시되면 상황은 많이 달라질 것이다"는 식으로 이 SSE2에
다소 기대를 거는 평가를 많이 내리곤 했습니다. (저 역시도 그랬었습니다만... 지금와서 결론을 생각해본다면 '글쎄?'가
되겠군요 -_-;)
④그외의 의미심장한 변화들
우선 QDR(Quadruple Data Rate)가 적용된 외부버스가 눈에 띕니다. 당
시에 DDR기술조차도 일반 유저들에게선 생소하던 차에 인텔이 QDR이 적용된 외부버스를 들고 나오자 병목현상해소라는 명분에 다소
반기는 입장도 있었습니다만 너무 숫자를 통해서 사용자들에게 "이거 좋은거야 -ㅂ-" 식으로 어필하려는게 아니냐는 반감을 사기도
했습니다. 하지만 필자가 생각하기에는 이 역시 HT기술과 연계해볼 수 있는 발전의 한 부분으로서 기존의 인텔의 AGTL+ 셰어드방식 버스의 단점을 보강하는 의도가 있었다고 생각됩니다. 이에 대해서는 다음 강좌에서 자세히 언급하도록 하겠습니다.
두번째로, 고속실행엔진(Rapid Execution Engine)을 들 수 있습니다.
이것은 정수연산에 국한해서 ALU가 실행클럭의 두배 속도로 동작하는 기술을 말하며, IPC의 희생을 바탕으로 이루어낸 기술입니다. 초기에는 이 기술에 대해서 그다지 주목하는 곳은 별로 없었으며, B모 사이트의 경우 ALU두개가 내장되었다는 식으로 잘못 리뷰를 싣기도 했습니다.
세번째는 ATC(Advanced Transfer Cache)의 도입입니다.
이 ATC는 펜티엄3시절 카트마이에서 코퍼마인으로 진화할때 도입되기도 했으며, 이번 넷버스트 아키텍쳐에서의 ATC는 기존보다 더욱더 발전된 것이라고 보시면 되겠습니다. ATC는 코어와 L2캐쉬간의 BSB(Back Side Bus : 자세한 내용은 이전의 FSB강좌 참고) 대역폭을 늘이는 기술입니다. 기존의 코퍼마인과 같이 256bit버스인것은 같지만, 클럭 효율을 1:1로 높여서 두배의 대역폭을 확충할 수 있게 된 것입니다.