http://arstechnica.com/cpu/02q2/ppc970/ppc970-1.html
Inside the IBM PowerPC 970
Part I: Design Philosophy and Front End by Jon "Hannibal" Stokes
10월 15일, 화요일 IBM은 PowerPC 970을 발표했다. 맥 사용자는 맥 사용자대로, 리눅스 사용자는 물론, 데스크탑 컴퓨팅에 관심이 많은 사용자들 모두 빅블루가 자기네 서버에서나 사용하던 64비트 RISC 컴퓨팅 칩을 공격적으로 주류 데스크탑으로 발표하는 광경을 지켜보았다.
그동안 데스크탑 아키텍쳐로는 32 비트 아키텍쳐가, 64 비트용 데스크탑으로는 IA-64만이 알려져 있었던 반면, 인텔은 그 사이의 간격을 전혀 못채우고 있었다. 아이태니엄 2에서만 가능한 소프트웨어나 높은 가격을 낼 필요 없이 부드럽게 64비트로 이주하고픈 소비자는 어떨까? PowerPC 970은 마이크로프로세서 포럼 2002 웹사이트에서 히트를 쳤고 이제 64비트를 원하는 사용자들은 x86용 64 비트 프로세서 시리즈인 AMD의 Hammer와 함께 새로운 선택을 가지게 됐다. 2003년 출하 예정과 실제상의 퍼포먼스에 따라서, 데스크탑 컴퓨팅은 이제 굉장히 흥미로워졌다.
당연히, 애플이 970의 분명한 고객이지만, IBM의 새로운 칩은 그 자신도 상당한 고객으로 만들 것이며, 이점은 잠시 후에 밝히겠다. 또한 같은 측면에서 970은 현재까지 주요 PPC 데스크탑에 쓰이지만, 계속 비틀거리고 있는 모토로라의 G4와 불확실한 루머로 남아있는 G5 칩이 남겨놓은 간격을 채우는 역할도 할 것이다.
PowerPC 970의 고객이 애플만 있진 않다. 리눅스에 거대한 투자를 벌이고 있는 IBM 자신이 높은 퍼포먼스의 970 기반 4-way, 혹은 8-way SMP 리눅스 데스크탑으로, 90년대 후반부터 윈텔 하드웨어로 스위칭하고 있던 64비트 유닉스 웍스테이션 사용자들을 다시 끌어올 수 있다. 다시 말하지만 가격과 성능에 따라서 970은 매우 경쟁력있는 리눅스 데스크탑/웍스테이션 머신의 기반이 될 수도 있다.
본 기사에서 필자는 970 파이프라인의 단계와 인스트럭션 페칭(fetching), 디코딩, 이슈잉(issuing), 디스패칭(dispatching), 실행과 완성 등에 대해 다룬다. 또한 900MHz DDR 버스와 같은 970의 다른 흥미로운 측면에 대해서도 다루겠다.
본 기사를 통해, 필자는 970과 모토로라의 MPC7455(즉, G4e, 혹은 G4+)와 인텔 P4 2.8GHz Northwood와의 비교도 행한다. 적어도 내년이나 되어야 나올 64비트 프로세서와 지금 시장에 나와있는 주류 32비트 프로세서를 비교하는 것이 공정하지 못한 구석이 있지만, 970에 대해 올바른 평가를 내리기 위해서는 필요하다고 본다. 최근 중단된 알파칩이나 아이태니엄 2, MIPS와 같은 64비트 칩과의 비교를 해야 옳다는 말도 있지만, 970 칩은 애플이나 리눅스 데스크탑용 칩이며, P4의 후계칩과 직접적인 경쟁에 들어가기 때문에, P4와의 비교가 소비자 측면에서 좀더 유용하리라고 생각한다.
오히려 본 기사에서 AMD의 Opteron을 누락시켰다는 비난이 더 그럴 듯 하다. 앞으로 나올 옵터론과 970의 비교가 좀더 어울리리라는 점은 사실이지만, P4와 G4e와의 비교까지 펼친 마당에 필자로서는 IBM의 새로운 칩에 대해서 같은 맥락으로 인텔칩과의 비교를 싣는 쪽이 더 편하다. 물론 970과 옵터론의 비교를 앞으로 안하겠다는 말은 아니다.
Preliminaries: die size, power consumption, and clock speed
| | Process | Die Size | Transistors | Core Voltage | Power Dissipation |
| PowerPC 970 1.8 GHz | 0.13um | 121 mm2 | 52 million | 1.3v | 42 Watts |
Pentium 4 2.8 GHz | 0.13um | 131 mm2 | 55 million | 1.525v | 68.4 Watts |
G4e 1 GHz | 0.18um | 106 mm2 | 33 million | 1.6v | 30 Watts |
위 표에서 보듯, 1.8GHz 970은 전력 소모면에서 2.8GHz P4보다는 G4e에 더 가깝다. 즉, 애플은 이 칩을 혁신적인 케이스 디자인에 채용할 수 있음을 의미한다. 또한 970 기반의 1U짜리 엑스서브도 마찬가지이다. 1.2GHz 970의 전력 소비가 19W에 불과하다는 사실을 고려한다면, 애플은 이칩을 곧바로 노트북에도 채용할 수 있으리라고 예측할 수 있다.
MPF 세미나 참석자 중 하나인 RWT의 데이빗 왕(David Wand)은 970에 대해 매우 흥미로운
정보 기사를 작성하였다. 요약하자면, PPC 970이 실제로는 자신의 큰형 뻘인 Power4 칩의 퍼포먼스를 능가한다고 한다. 970이 더 높은 클럭 속도를 갖도록 짜여졌기 때문이다. 하이엔드 서버 시장에 POWER4의 신뢰성을 배가시키기 위해, IBM은 칩 트랜지스터 상에 두터운 게이트 옥사이드(gate oxides)를 사용하였다. 결과적으로 파우4의 트랜지스터는 더 느린 스위칭 속도를 가졌지만 신뢰성을 높였다. 반면 970은 데스크탑용이기 때문에 그정도의 신뢰성은 필요 없으며, 따라서 POWER4보다 훨씬 높은 클럭 속도를 낼 수 있다는 논리이다. 즉, 970은 더 저렴하면서 더 빠르게, 하지만 POWER4보다 신뢰성은 없게(물론 이 말에 오해없기 바란다. POWER4의 매우 두터운 게이트 옥사이드는 대부분의 주류 CPU보다 훨씬 신뢰성있는 "서버"용 CPU이기 때문이다) 만들어졌다는 의미이다.
Overview: design philosophy
P4와 G4e의 디자인 철학에 대한 비교에서, 필자는 각 프로세서의 실행 리소스 조직에 대한 접근 방법을 비교했었다. 그때, G4에 대해서는 "넓고 얇다"고 묘사하였다. G4e는 9 개의 기능 유닛을 포함하는 "넓은" 실행 코어를 가졌기 때문에, G4의 프론트 엔드는 주기당 네 개의 인스트럭션(3개의 인스트럭션과 한 개의 브랜치)을 기능 유닛으로 처리해보낼 수 있다. 각 기능 유닛은 짧은 파이프라인을 갖고 있기 때문에 인스트럭션은 실행 완성까지 몇 번의 주기만 거치면 된다.
G4는 한 번에 칩 상에서 몇 개 안되는 인스트럭션에 집중해서 이 인스트럭션을 직렬로 처리하도록 넓히고, 될 수 있는 한 주기를 적게 해서 해결하여한다. 따라서 실행의 다양한 단계를 통해 G4e는 대부분 인스트럭션 16개 정도를 처리하며, P4나 PPC970과 비교하면 꽤 적은 수에 속한다.
반면, P4는 "깊고 좁은" 접근 법으로 나타낼 수 있다. 대규모의 인스트럭션을 더 짧은 주기 내에 역시 소수의 기능 유닛에 쑤셔넣기 때문이다. P4의 20단계 파이프라인은 다양한 실행 단계의 인스트럭션 126개를 담을 수 있다(G4e는 16개였다). P4의 처리속도와 조합해보면, P4는 인스트럭션을 매우 많이 처리할 수 있다.
퍼포먼스에 대해서 P4가 "깊고 좁게" 접근하고, G4e가 "넓고 얇게" 접근한다면, 970은 "넓으면서 깊게"로 요약할 수 있다. 달리 말해서, 극도로 넓은 실행코어와 16 단계의 (인티거) 파이프라인을 갖고 있는(P4만큼 깊지는 않다) 970의 목적은 단연 속도라 말할 수 있다. 간단히 언급하겠지만 특별한 기술로 970은 칩 상에서 다양한 단계의 실행 인스트럭션 200개를 처리할 수 있다. 이 수는 G4e의 16개보다는 물론 P4의 126개보다도 많은 수이다.
물론 대가가 없지는 않다. "다다익선"에 대한 대가는 970의 인스트럭션 디스패칭과 아웃오브오더(out-of-order: OOO) 실행에 나타난다.
970이 얼마나 넓은지 감각만 주기 위해서, 우선 970 핵심 주 기능 블럭 그림을 소개한다.

그림 1: PowerPC 970
이전 기사에서 필자는
G4e와
P4용으로 비슷한 그림을 소개했기 때문에, 브라우저의 다른 창으로 잠시 비교해보기 바란다. 970의 모든 부분이 바로 들어오지 않더라도, 본 기사를 다 끝내면 다 이해할 수 있으니 걱정말기 바란다.
마지막으로, 970의 파이프라인이 P4의 파이프라인보다 약간 짧은 이유에 대해 지적하고자한다. 970의 파이프라인에는 "드라이브" 단계가 없다. P4는 칩에 신호의 보급을 허용하기 위해 드라이브를 삽입하였다. 드라이브 삽입 디자인은 극도로 높은 클럭 속도의 디자인에서나 필요한 디자인이다. 따라서 PowerPC 970의 최고 GHz는 P4보다 훨씬 낮을 수도 있다.
클럭 속도의 차이점은 PPC 970과 Pentium 4의 근본적인 접근 차이 때문에 나온다. 고속에 따르는 대량의 전력 공급을 위해 P4는 싱글-데스크탑 시스템만을 목표로 하고 있다. 당연히 인텔은 P4 제온을 서버 셋업용으로 2웨이, 혹은 4웨이용으로도 판매하지만, 이들 서버의 가격이나 전력 소비량은 인텔의 경쟁력을 제한시키고 있다. 반면 PowerPC 970은 근본부터 다중 프로세서용 디자인이며, IBM은 970을 포웨이, 혹은 더 높은
데스크탑 SMP 시스템에 채용하려하고 있다. 따라서 IBM은 초고속 클럭 스피드를 사용하여 데스크탑과 서버의 퍼포먼스를 증가시키기보다는 더 강력한 다중 CPU을 고도의 광대역 연결을 통해 해결하려하고 있다. (사실, 이런 접근 방식은 플레이스테이션3의 Cell 프로세서-
역시 IBM 제작이다-와 동일하다고 볼 수 있다. 두 개의 프로젝트가 직접 관계를 갖는지는 모르겠지만, 근본적으로 같은 디자인을 취하고 있다고 말할 수 있다.)
Caches and front-end
970과 P4, G4e의 캐시를 살펴보도록 하자. 다음 표로 대충의 정보를 알 수 있다.
| | L1 I-cache | L1 D-cache | L2 Cache |
| PowerPC 970 | 64KB, direct-mapped | 32KB, 2-way assoc. | 512KB,
|
| Pentium 4 |
12K uops*
| 8KB, 4-way assoc. | 512KB, 8-way assoc. |
| G4e | 32KB, 8-way assoc. | 32KB, 8-way assoc. | 256KB, 8-way assoc. |
* 인텔은 트래이스 캐시의 정확한 바이트 수치를 발표하지 않고서, 역시 규명하지 않은 크기로 얼마나 많은 uops가 있는가만을 말하고 있다.
잘 알려진 바와같이 세 칩의 L1 캐시는 모두 인스트럭션 캐시(I-캐시라 부른다)와 데이터 캐시(D-캐시라 부른다)로 나뉜다. 현재, P4 트래이스 캐시는 970이나 G4e의 좀더 전통적인 인스트럭션 캐시와 직접 비교가 힘든 상황이기 때문에 970과 G4e에 대해서는 L1의 I-캐시만을 비교하겠다.
위 표는 970이 G4e보다 더 큰 인스트럭션 캐시를 탑재했음을 보여준다. 이는 970의 파이프라인이 G4e의 두 배이기 때문으로서, I-캐시에서의 캐시 미스 현상이 발생할 경우 P4나 970의 퍼포먼스가 G4e보다 더 떨어질 수 있음을 말해주기 때문이다. (여기에 대해서는 필자의 첫 번째
P4, G4e 비교 기사의
파이프라인 그림에서 확인할 수 있다. 이 그림은 길다란 파이프라인의 거품이 얼마나 자원을 낭비할 수 있는 지를 보여준다. 파이프라인 깊이와 캐시 미스 현상에 대해서는 이 기사를 확인하기 바란다.) 간단하게 말해서, 970의 I-캐시 64KB는 칩 파이프라인에서 발생하는 거품을 거둬들이기 위해서 존재한다.
크기를 바꿀 수 있는 512KB의 L2 캐시와 900MHz DDR 프론트사이드 버스, 데이터 여덟 개 프리페칭 스트림 지원, 32KB의 D-캐시를 합치면, 이 칩이 플로팅-포인트 연산과 SIMD 기반의 미디어 애플리케이션을 위한 칩임을 알 수 있다. 위 기능만으로도 AltiVec(혹은 "VMX") 연산을 G4e보다 더 잘해낼 수 있음은 물론이다.
Branch prediction
파이프라인의 깊이와 실행코어의 너비 때문에, 970은 칩 자원의 상당수를 브랜치 예측에 투입하였다. 인스트럭션 캐시의 히트 비율처럼, 파이프라인을 계속 채우고 실행 자원을 끊임없이 활용하려면, 정확한 브랜치 예측은 중요하다. 970의 매우 강력한 브랜치 예측 로직은 970의 최대 장점 중에 하나이며, 본 장에서 970 프론트 엔드의 절반과 함께, 인스트럭션 스트림을 통해 일어나는 브랜치 예측의 역할에 대해 알아보도록 한다.
아마도,
970의 그림에서 두 개의 파란색 브랜치 예측 블럭이 점선에 연결됐음을 볼 수 있으리라. 브랜치 예측의 이해를 위해 이 그림에서 두 개의 블럭은 인스트럭션 스트림에서 브랜치를 다루는 하나의 커다란 기능 블럭으로 간주하도록 하겠다. 이 블럭이 970만의 특별한 테크닉에 중대한 역할을 맡고 있다.
Branch prediction on the P4 and G4e
간단히 말해서, 프론트엔드가 브랜치를 만날 때, 칩의 프론트엔드는 브랜치의 상황이 어떻게 나오는 가에 따라서 인스트럭션 스트림 상의 다른 지점(혹은 브랜치 목표점)으로 옮겨가지만, 실행 코어가 이를 평가할 때까지 실행을 멈추려하진 않는다. 이경우, BPU는 학습에 따라(혹은 "추측") 브랜치를 받아들일 지, 안받아들일 지를 결정하고, 브랜치 평가의 결과를 기다리는 동안 추측한 인스트럭션의 실행을 시작할 수 있도록 인스트럭션 스트림 상에서의 적절한 지점으로 프로세서를 조작한다.
이전 기사에 있는 다음 그림은 P4가 특별한 트레이스 세그먼트를 구축하고 있음을 보여주지만, 위에서 말한 바를 실행하기 위해, 프론트 엔드가 실행하는 파란색 인스트럭션 스트림으로서 이해하고, "트레이스 세그먼트"라는 단어는 넘겨도 좋다.
P4의 브랜치 프레딕터는 4096-(branch history table: BHT)를 이용해서 이전 사이클에서 실행할 때 받아들일 지 안받아들일 지를 기록하는 프로그램 안에서 예측치를 추적해놓는다. 매우 높은 정확도의 브랜이 예측 알고리즘과 BHT의 조합으로 P4는 각 브랜치를 받아들일 지 안받아들일 지를 결정한다. 브랜치를 받아들이기로 하면, BHT에 첨부된 4K-엔트리(혹은 4096-엔트리) 브랜치 타켓 버퍼(branch target buffer: BTB)가 추측 실행을 어디서 시작할 지 P4를 돕는 역할을 맡는다.
G4e도 브랜치 예측에 비슷한 일반 접근법을 이용하지만 훨씬 적은 2K-엔트리 BHT와 128-엔트리 BTIC(branch target instruction cache)를 이용한다. (BTIC는 P4의 BTB의 역할과 동일한 역할을 한다) 실행코어 대신 프론트엔드의 부분으로서 G4e의 BPU는 970의 브랜치 유닛 기능 블록의 모든 기능과 조합되어있다.
PowerPC 970은 G4e나 P4를 합친 것보다도 많은 브랜치 예측 자원을 갖고 있다. 앞서 언급했듯이, 970은 각 브랜치마다 둘 중에 하나의 브랜치 예측 스킴을 사용하며, 각 브랜치 실행시마다 어떤 스킴이 퍼포먼스가 좋은지를 기록해서 결정을 내린다. 어떻게 작동하는지 알아보겠다.
Branch prediction on the PPC 970
970의 인스트럭션 펫치 로직은 L1 I-캐시로부터 인스트럭션 큐까지 주기당 인스트럭션 8개를 페치시키고, 두 개의 브랜치 중에서의 선택을 위해 인스트럭션 여덟 개를 프론트엔드가 조사한다. 두 브랜치 스킴 모두 맞는다면, 브랜치 예측 유닛은 상황의 결과(즉, 받아들이느냐, 받아들이지 않느냐)나, 한 스킴을 이용할 때의 타겟 어드레스를 예측한다.
970이 채용한 첫 번째 브랜치 예측 스킴은 위에 언급한 바와 같은 표준 BHT-기반의 스킴이다. 970의 BHT는 16K-엔트리로서 P4보다 네 배가 많고, G4보다는 여덟 배가 많다. 16K 엔트리로 1-비트 플래그가 브랜치를 받아들일 지 안받아들일 지를 말해준다.
역시 16K-엔트리 테이블을 갖고 있는 다른 스킴은 global predictor table이라 불린다.이전의 11개 펫치 그룹이 받아들이는 실제 실행 경로를 기록하는 11-비트 벡터와 이 스킴의 각 엔트리가 관련이 있다. 이 벡터는 브랜치를 받아들일 지 안받아들일 지를 규정하는 1-비트 플래그에 대한 최신 정보를 계속 업데이트한다.
그런데, 970의 프론트엔드에는 각 브랜치에 어떤 스킴을 적용시켰는 지를 기록하는 또 하나의 16K-엔트리 테이블이 존재한다. 각 브랜치를 최정 평가하면, 프로세서는 두 스킴을 비교하여 어떤 스킴이 최적이었는 지를 기록하는 것이다.
이런 막대한 브랜치 예측 리소스에 트랜지스터를 모두 사용해버리는 것이 대단해보일 수도 있지만 꼭 그렇지는 않다. 다음 장에서 970이 파이프라인에 불필요한 거품을 완전히 멈출 수는 없음을 보여주겠다.
The tradeoff: decode, cracking, and group formation
앞서 언급한 바와 같이, IBM의 PowerPC 970은 L1 캐시로부터 인스트럭션 큐로 주기당 인스트럭션 8개를 페치하여 디코딩시킨다. 주기당 인스트럭션 네 개인 G4e보다는 좋지만, P4와의 비교는 오독할 우려가 있다. P4는 주기당 1/86 개만을 페치/디코딩하지만 트레이스 캐시가 효과적으로 실행 경로로부터 파이프라인 단계를 적절하게 페치/디코딩하기 때문에, 페치/디코딩 비율로 G4e와 970을 P4에 단순하게 비교할 수는 없다. 디스패치 대역폭을 비교하면 좀 나을 수도 있지만, 여기에도 문제는 있다.
P4와 970의 페치와 디코드 파이프라인은 한 가지 측면에서 매우 닮아있다. 두 프로세서 모두, CPU 내부 사용을 위해 좀더 작고 단순하게 네이티브 ISA 포맷 인스트럭션을 쪼갠다. P4는 각 x86 CISC 인스트럭션을 좀더 작은 마이크로-ops(uops)로 쪼개는데, 여기에서 의 인스트럭션은 RISC 머신의 인스트럭션과 비슷하다. 대부분의 x86 인스트럭션은 두세개의 uops로 디코딩하지만, 좀더 길고 복잡하지만 별로 잘 쓰지는 않는 인스트럭션 디코드로 더 많은 uops를 쪼갤 수도 있다. 970의 경우 "IOP(아마 internal operations인 듯 하다)"로 불리는 인스트럭션으로 쪼개는데, P4의 uops와 마찬가지로 이들 IOP는 실제로 970 실행 코어가 발생시킨 OOO를 실행한다. 또한 UOPS와 마찬가지로,코드 스케쥴링을 좀더 융통성있게 하기 위해, 인스트럭션을 좀더 잘게 쪼개서 별도의 인스트럭션-레벨 패러렐리즘(instruction-level parallelism: ILP)를 돕는다.
약간의 예외를 제외한 대부분의 PowerPC ISA 인스트럭션은 정확히 하나의 IOP로 번역할 수 있다. 하나 이상의 IOP로 번역하는 인스트럭션의 경우에, IBM은 다음의 두 가지 타입을 정의하고 있다.
* A cracked instruction is an instruction that splits into exactly 2 IOPs.
* A millicoded instruction is an instruction that splits into more than 2 IOPs.
인스트럭션으로 비교한 위의 비교가 멋대로 된 건 아니다. 오히려, 다양한 실행 단계에서 인스트럭션을 칩이 어떻게 기록하는 지에 대한 매우 중대한 디자인인 POWER4 디자인과의 유사성을 970이 보여주고 있기 때문이다. POWER4와 970과의 유사성을 논하기에 앞서, 우선은 프로세서의 프론트 엔드에서 실행코어로 인스트럭션이 보통 어떻게 움직이는 지를 짚어보겠다.
(본 기사에서, 필자는 이슈 큐-issue queues-를 실행 코어, 혹은 "백엔드"로 바꿔 생각하기로 하였다. G4e의 경우 여러가지 이유 때문에 실행 코어를 레지스터 리드와 실행 페이스로, 이슈 큐를 프론트엔드에서 다뤘지만 G4e와 970 논의에 더 맞추기 위해서 P4에 사용하던 단어도 약간 바꾸었음을 지적하겠다)
Dispatching and issuing on the P4 and G4e
P4, G4e의 프론트엔드는 모두 주기당 각자의 실행 코어로 인스트럭션 3개를 디스패치한다. P4의 얼로캐이터/레지스터 리네이머(renamer)는 주기당 uops 세 개를 두 개의 메인 큐로 보내고, 메인 큐는 핵심 코어의 이슈 큐 네 개로 분배한다. P4의 실행 엔진이랄 수 있는 이슈 큐에서 P4의 네 개의 스케쥴러가 실행 유닛으로 보낼 최적의 순서를 정하고 평가내린다. P4의 이슈 큐는 주기당 여섯 개의 uops를 실행 유닛으로 보낼 수 있다.
P4와 마찬가지로 G4e의 프론트엔드는 주기당 인스트럭션 3개(非-브랜치)를 이슈 큐 세 개중 하나로 보낼 수 있다. 이슈 큐에서 G4e는 주기당 전부 인스트럭션 여섯 개를 실행 유닛으로 보낸다.
P4와 G4e는 모두 이슈 큐와는 무관하게 인스트럭션을 디스패치하기 때문에 각 in-flight 인스트럭션의 원래 프로그램을 기록하려면 충분한 로직(무엇보다 리오더 버퍼-ROB-공간)이 필요하다. 실행 직전에 리오더링을 거쳐야하기 때문이다. P4에서는 코어까지 수많은 파이프라인 단계를 거치면서 인스트럭션 126 개까지를 트랙킹해야하며, G4e는 파이프라인이 더 짧기 때문에 인스트럭션 16 개까지를 다뤄야한다는 의미이다. 따라서 G4e는 P4보다는 로직이 훨씬 덜 필요하다.
Dispatching and issuing on the PowerPC 970
기사 시작에 등장한
PPC 970 그림의 중앙을 보면, 오른쪽 아래 부분의 "decode, cracking, and group formation" 부분을 볼 수 있다. 이 블럭은 IBM이 "그룹"이라고 부르고 있으며, 각 그룹은 특정 규칙에 따라 배열된 IOP 다섯 개로 이뤄져있다. 어떠한 단일 IOP도 고립되어있지 않으며 다섯 개씩 이뤄져있는데, 여기서 970은 실행 코어로 여섯 개의 이슈 큐를 디스패칭해보낸다. 적절한 이슈 큐에 도달하면, IOP는 모든 큐를 조합해서, 8 IOPs/cycle의 비율로 OOO 실행 유닛을 다룰 수 있다. 하지만, 완성시키기 전에 다시 다섯 개씩의 IOP로 조직하기 위해 각자의 그룹으로 되돌아가야한다.
이들 그룹이 왜 존재하는 지에 대해 설명해야할 필요를 느낀다. 이런 그룹으로 IOP를 조직화시켰기 때문에, 970은 각 실행단계마다 개별 IOP가 아닌, 그룹을 상대한다. 따라서 백 개의 IOP를 모두 상대하자 않기 때문에 실행코어 안의 실행 슬롯에 여유가 생긴다. 스무 개의 그룹만 추적하기 때문이다. 즉, 트래킹과 리오더링에 소요되는 자원을 낭비하지 않기에 970의 디자인은 "깊고 넓다"고 할 수 있다.
그런데 이 디자인은 동시에 개별 IOP에 기반하는 디스패치와 스케쥴, 이슈, 완성에 대한 통솔력을 줄이기 때문에 실행에의 효율성을 떨어뜨린다. 이점에 대해 설명하겠다.
970 프론트엔드는 다음과 같은 규칙에 따라서 IOP 그룹을 만든다. 첫 번째로 프로그램 오더에 따라서 그룹의 다섯 슬롯을 IOP로 채워야한다. 단 슬롯 0에는 제일 오래된 걸 채우고, 4에는 제일 새로운 IOP를 채운다. 두 번째로 모든 브랜치 인스트럭션은 슬롯 4로 가며, 슬롯 4는 브랜치 인스트럭션 전용이다. 즉, 프론트엔드가 슬롯 4를 채울 브랜치 인스트럭션을 못찾을 경우에는 주기당 하나가 빠진 인스트럭션 수만 다룰 수 있다. 이경우 프론트엔드는 noop을 그룹의 슬롯에 삽입해서 슬롯 4를 강제로 채운다. Noop은 no operation의 준말로서, "아무것도 하지 않는" 인스트럭션의 종류이다. 즉, 프론트엔드가 텅빈 실행 슬롯이나 파이프라인 거품을 삽입해서 그룹을 채우는 경우가 있다는 뜻이다.
그룹을 만드는 데 위 규칙만 사용하진 않는다. 세 번째 규칙으로, conditional register unit (CRU)은 슬롯 0과 1에만 보내는 규칙이 있다. cracked와 millicoded 인스트럭션일 때의 규칙도 있다.
IBM Power4 기술 백서에서:Cracked 인스트럭션은 한 가지 조건에 한해 인스트럭션 그룹에 집어넣는다. 두 IOP는 반드시 같은 그룹에 있어야하며, 두 IOP가 현재 그룹에 맞지 않는 경우, 이 그룹을 종료시키고, 새로운 그룹을 만든다. cracked 인스트럭션을 따르는 인스트럭션도 역시 cracked 인스트럭션과 같은 그룹에 있어야하며, 이때 이 그룹에 인스트럭션을 받아들일 여지가 있다고 가정한다. Millicoded 인스트럭션은 언제나 새로운 그룹을 구성한다. Millicoded 인스트럭션을 따라오는 인스트럭션 역시 새로운 그룹을 만든다.
끝난 게 아니다. 그룹은 코어로 디스패치시키기 전에 다음의 자원을 갖고 있어야한다. 이중 하나만 부족해도 전체 그룹은 디스패치하기 전에 이들 자원이 다 채워지기를 기다려야한다.
* Group Completion Table entry: GCT는 970의 리오더 버퍼라 볼 수 있다. GCT는 실행 코어 파이프라인에 있는 ~100 개의 실행 슬롯을 통해 나오는 인스트럭션을 구성하는 스무 개의 활성 그룹을 기록한다. 실제로 주어진 순간, 실행 코어에 인스트럭션이 몇 개를 실행시키는 지와는 관계 없이, 스무 개의 GCT 엔트리는 다 채워진다.
* Issue Queue slot: 그룹 인스트럭션 전부를 처리할 적절한 이슈 큐가에 충분한 슬롯이 없을 경우, 디스패치할 때까지 그룹은 기다려야한다. (왜 "적절한" 이슈 큐라고 했는 지 후에 밝힌다)
* Rename Registers: 이슈 큐에 디스패칭시킬 때 레지스터 리네이밍을 요구하는 인스트럭션에 필요한 충분한 양의 레지스터 리네임 자원이 필요하다.
다시 말하면, 위의 제한점들 때문에, 질나쁜 인스트럭션이 전체를 망쳐버릴 수도 있다.
970이 그룹을 이용하기 때문에, GCT안의 많은 그룹이 부분적으로, 혹은 완전히 빌 경우, 잠재적으로 불필요하게 디스패치 대역폭을 낭비하는 "internal fragmentation"은 물론, 디스패치 대역폭은 모든 요소에 민감하다.
Some preliminary conclusions
앞서, 필자는 970의 그룹 형성과 디스패칭의 입출력에 대한 내용을 다루었다. 위 장을 읽고나서, "뭔가 손해보는 것 아닌가"라는 생각이 들었다면, 여러분은 필자가 하고싶었던 말의 90%를 맞춘 셈이다. 실제로 손해이다. 하지만 970이 너비와 깊이를 동시에 추구하기에 어쩔 수 없다. 970은 긴 파이프라인과 극도로 넓은 실행 코어를 동시에 지원하기 위해 인스트럭션 이슈와 디스패치, 통솔력, 융통성 포기를 감수해야했다. 인스트럭션 스트림의 구성도와 IOP 배열에 따라서, 970은 부분적으로 비거나 완전히 빈 그룹들을 때문에 실행 자원을 멈춰버릴 수도 있다.
따라서, 이론적으로 970이 주기당 다양한 단계의 인스트럭션 200개를 처리할 수는 있지만, 실제로는 주기당 처리하는 실행 슬롯의 상당수를 "텅빈 채"로 처리할 확률이 높다. 즉, 너무나 많은 빈 슬롯 때문에 그룹에 관계된 파이프라인 거품을 완전히 처리할 수 없는 것이다. 전력이나 프로세스 기술이 허용 가능한만큼 모든 실행 슬롯을 고속으로 채우는 P4의 효율적인 디자인보다 사못 다른 접근이다.
물론 위에 적인 바대로 지금 결론은 예비적인 결론이다. 실행 코어와 이슈 큐를 좀더 알아보지 않는 한, 970의 전체 조망을 그릴 수는 없다. 970은 (어떻게 세는 가에 따라 다를 수 있다)12 개의 실행 유닛을 제공하며, 12개는 꽤 큰 수이다. 물론 단순히 실행 자원의 수보다는 실행 자원의 조직 정도가 더 유용한 정보이다.
필자의 다음 기사에서는 PowerPC 970과 P4, G4e의 실행 코어를 비교하면서, 이슈 큐와 실행 유닛, 로드-스토어 트래픽을 다루는 방법도 알아보겠다. 또한 970에서 제일 휼륭한 기능 중에 하나인 두 개의 AltiVec-호환 SIMD 유닛도 알아보도록 한다. 이 비교에서 PowerPC 970이 P4나 G4e와는 매우 다른 방식으로 실행 자원을 조직했음을 알 수 있을 것이다. 이 차이점 때문에 세 프로세서의 비교에 무리가 따르기는 하지만, 다중 프로세서 디자이너들에게는 훨씬 더 매력적인 관점을 제시할 수 있겠다.
마지막으로 다음 기사에서는, 64 비트와 32 비트 컴퓨팅의 일반론과 데스크탑 시장에서의 관계를 알아본다. 다음 기사가 곧 나오니 계속 기다려주기 바란다.
Bibliography
* Nick Stam, MPF Day One:
Incremental Advances, Extreme Tech
* Robert McMillian,
IBM Promises Muscle for the Mac, Wired News
* David Wang,
Announcement of the IBM PowerPC 970 Processor, Real World Technologies
*
Power4 System Architecture, IBM