벤치리뷰·뉴스·정보/고전 스페셜 정보

[고전 2004.11.08] Intel CPU의 미래가 보이는 PARROT 아키텍처

tware 2005. 12. 11. 03:30


고성능과 저전력을 양립

 Intel은 멀티 코어와 전력 효율 (Power Efficiency) 높은 CPU 아키텍처로 방향타를 돌렸다. 2006 ~ 7년의 CPU는 NetBurst (Pentium 4 계 CPU 아키텍처)보다 훨씬 전력 효율이 높은 차세대 CPU 코어를 복수로 탑재하게 될 것이다.
 Intel은 2006 ~ 7년의 CPU 코어로 모바일 용으로는 "Merom (메롬)"을 개발하고 있으며, 데스크탑에도 전력 효율적인 코어를 개발하고 있다 (메롬 기반이라는 정보도 있다). 이러한 CPU 코어는 현재 3명령 / 클럭 대역의 NetBurst보다 확장된 4명령 / 클락의 대역을 갖추게 될 것으로 추정된다. 즉, 클럭당 성능이 더욱 향상 될 것이다. 그리고 Merom 세대의 끝에는 더욱 공격적으로 전력 효율의 향상을 도모한 차세대 CPU 아키텍처가 계획되고 있는 것으로 보인다.

 지금에 와서 Intel은 이러한 차세대 CPU 힌트를 보여주기 시작한다. 학회나 Intel Developer Forum (IDF)에서 전력 효율을 추구한 새로운 마이크로 아키텍처의 연구 결과를 발표하기 시작했다. 특히 중요하다고 생각되는 것이 "Power AwaReness thRough selective dynamically Optimized Traces (PARROT)"이다. PARROT은 Intel의 연구 기관인 Microprocessor ​​Lab의 연구원이 발표한 전력 효율에 초점을 맞춘 참신한 CPU 아키텍처이다.

 "우리는 전력 효율이 좋은 아키텍처에 포커스하고 있다 .PARROT 바로 그 예다 .PARROT 같은 기술은 미래의 프로세서에서 성능을 높이면서 전력 효율도 동시에 높일 수 있다"고 Intel 의 Justin R. Rattner 씨 (Senior Fellow, Corporate Technology Group, Senior Director, Systems Technology Lab)는 PARROT의 중요성을 말한다.

 Intel은 Pentium M에서 전력 효율이 높고 제한된 열 설계 범위 (Thermal Envelope)에서 최대의 성능을 발휘할 수 있는 CPU 아키텍처 개발을 시작했다. PARROT은 그러한 연구의 최신 예이다.

 그러면 PARROT은 어떻게 성능 향상과 전력 절감이라는 상충되는 요구를 양립시키나?



적극적 최적화에 의한 성능 올리기

 우선 PARROT에서는 마이크로 아키텍처 상의 작업을 최대한 재사용한다. Pentium 4는 IA-32 명령에서 디코딩 한 내부 명령 (μOPs)를 캐시하여 디코딩 처리를 재사용 할 수 있도록 했다. PARROT은 그것을 더 밀어붙여 코드의 최적화 결과도 재사용 할 수 있도록한다. CPU가 명령을 실행하기 전의 작업을 최대한 줄여 효율화를 도모한다.
 CPU의 성능은 대충 말하면 "동작 주파수 × IPC ÷ (어떤 처리에 필요한)실행되는 명령어 수"에 비례한다. 기존의 Intel의 접근 방식은 동작 주파수에 집중하면서 어느 정도 IPC (1 사이클에서 수행 할 수있는 명령 수 : instruction per cycle)를 향상시키는 방향이었다. 투기적 실행에 의해 실행해야 하는 명령 수 자체는 늘어나지만, 그것은 주파수와 IPC의 향상으로 커버한다는 생각이다. 명령을 보다 많이, 보다 빠르게 실행하는 것에 아키텍처의 포인트를 두어 왔다.

 이에 비해 PARROT은 IPC의 증대와 (처리해야 할)명령 수의 감소 등에 초점한다. CPU 내부에서 실행되는 내부 명령 (μOPs)의 수를 줄이고 동시에 스케줄링 향상에 의해 명령의 병렬도를 높인다. 명령을 보다 적게하고 효율적으로 실행하는데 초점을 두고 있다. 명령을 고속으로 실행하는 것 보다 (처리해야 할)명령 자체를 삭제해 버리는 쪽이 확실히 빠르다. (같은 일을 하는데 명령수가 적다면 더 효율적이고 빠른 처리가 되죠.)

 따라서 같은 동작 주파수에서도 PARROT 쪽이 기존 아키텍처보다 성능이 올라간다. 재차 실행되는 명령 수가 줄어들며 실행 파이프 라인 자원의 소비를 줄이기 때문에 성능 당 소비 전력도 줄일 수 있다. 그 결과, 성능 향상과 소비 전력의 저감을 동시에 도모 할 수 있다.


 고성능과 저전력의 실현을 위해, PARROT에서는 기존 CPU보다 훨씬 고도로 실행 코드의 최적화를 행한다. 코드 최적화에 의해 불필요한 μOPs을 삭제하거나 μOPs를 융합 또는 SIMD화 함으로써 μOPs 수를 감소시킨다. 또한 μOPs 간의 종속성 중 해소 할 수 있는 것 (진정한 의존이 아닌 것)은 해소, 레지스터 리 네이밍을 단순화 하는 것으로 스케줄링을 향상시킨다.

 다만 이러한 고도로 코드 최적화를 모든 코드에 대해 행하려하면 엄청난 시간과 일이 걸려 오버 헤드가 커지고 소비 전력도 증가하게 된다. 그래서 PARROT에서는 코드에 의해 CPU 측의 스케줄링 방법을 바꾼다. 구체적으로는 자주 사용되는 프로그램 코드의 순서만을 최적화한다. 또 코드 최적화는 CPU의 파이프 라인 안에서 하지 않는다. 백그라운드에서 평행하게 최적화를 행하는 것으로, 포어 그라운드 파이프 라인의 동작에 영향을 주지 않도록 한다.

 "PARROT의 기본이 되는 관측은 긴 프로그램 중 실제로 중요한 부분은 적다는 사실이다 .80 / 20 규칙이 여기서도 들어맞아 극소수의 명령이 전체 머신의 실행을 대폭 슬로 다운 시키고 있다. 따라서 현명한 접근법은 그것들을 구분해 실행하게 된다 .PARROT에서는 이를 콜드 파이프 (Cold Pipe)와 핫 파이프 (Hot Pipe)라고 부른다. 80%의 (크리티컬 아닌) 명령은 낮은 성능과 낮은 전력을 타겟으로 한 콜드 파이프에 보낸다. 한편, 20% (크리티컬) 명령은 고성능과 높은 전력인 핫 파이프에 보낸다. 이것으로 효율적으로 성능을 향상 시킬수 있다 "고 Intel의 Patrick P. Gelsinger (팻 P 겔싱어) CTO 겸 수석 부사장 (CTO & Senior Vice President)은 PARROT의 기본 아이디어를 설명한다.


80 / 20 규칙을 사용해 최적화

 "80/20 규칙" 으로 Gelsinger 씨가 말하는 것은 파레토의 법칙으로 알려진 일반적인 경험법칙. 이 경우 프로그램 중 20%의 코드 세그먼트가 CPU의 실행 시간의 80%를 차지하고 나머지 80%의 코드는 실행 시간의 20% 정도 밖에 차지하지 않는다는 의미가 된다. 물론, 프로그램의 종류에 따라서 이 비율은 달라 PARROT 논​​문에서는 90% 대 10%로 되어있다. 중요한 것은 프로그램에서 자주 사용되는 코드는 극히 일부라는 점이다.
 극히 일부의 코드 세그먼트가 여러번 반복해 실행되고 프로그램의 워킹 셋트의 대부분의 시간을 차지한다. 이것은 코드의 "국소성"으로 알려져 있으며, 자주 사용되는 코드 부분은 "핫스팟 (Hot Spot)"이라 부르기도 한다. PARROT 논​​문에서는 자주 사용되는 부분은 "핫 코드 (Hot Code)"라고 부르고 있다.

 PARROT는 이 핫 코드를 CPU의 동작때에 동적으로 단계적으로 최적화하여 최적화 된 코드를 캐시해 둔다. 여기에 더욱 그 코드가 더 자주 사용된다면, 이번에는 좀더 적극적인 코드 최적화를 실시한다. 더 자주 사용되는 코드일수록 더 최적화 하게 된다. 최적화 된 코드는 보다 빨리 실행할 수 있기 때문에 자주 사용되는 코드일수록 빠른 실행이 가능하게 된다.

 80/20 규칙에 따르면, 이와 같이 20%의 핫 코드를 최적화 하면 80%의 실행 시간을 어느 정도 단축 할 수 있게 되는 것이다. 나머지 80%의 그다지 자주 사용되지 않는 코드는 PARROT에서는 콜드 코드 (Cold Code)로 부른다. 콜드 코드는 최적화 해도 의미가 얇기에 기존대로 처리한다. 80%의 콜드 코드는 실행 시간의 20% 밖에 차지하지 않기 때문에 최적화하지 않아도 성능에 영향은 적다.

 PARROT의 논문에 따르면, 자주 사용하는 핫 코드 부분의 행동은 이밖의 콜드 코드 부분과는 다른 것이 많다고 한다. 더 규칙적이며 예측 가능하고 그에 따라 명령 수준의 병렬화가 쉽다고 한다. 즉, 최적화가 쉬운 코드 부분이기도 하다는 의미다.

80-20 규칙의 코드와 실행 시간



콜드와 핫 두개의 파이프를 갖추다


 PARROT에서는 이 핫 코드를 CPU 하드웨어에서 최적화한다. 효율이 좋은 최적화를 위해 추적 캐시와 분리된 파이프 라인, 백그라운드에서 코드 최적화 수법을 사용한다. CPU의 마이크로 아키텍처 전체를 핫 코드의 최적화에 맞게 구축하는 것이다.
 PARROT에서는 먼저 파이프 라인을 콜드 파이프와 핫 파이프로 나눈다. 콜드 파이프가 기존 CPU의 파이프 라인, 핫 파이프가 PARROT에서 신설된 파이프 라인이 된다. 이 파이프 라인의 분리가 PARROT의 큰 특징이다.

 개념적으로는 아래 그림과 같이된다. 콜드 파이프와 핫 파이프는 병렬로 동작하고 각각 실행 파이프 라인의 프론트 엔드와 백엔드를 갖는다. 프론트 엔드에서는 명령 스케줄링이나 명령 발행 등을 행한다. 백엔드 실행 엔진이 발행된 명령을 실행한다.

 다만 두 파이프는 각각의 용도에 맞게 튜닝되어 있다. Gelsinger 씨가 설명했듯이, 핫 파이프에 보다 CPU 자원을 할당해 고성능으로 하는 비대칭 파이프가 된다. 싱글 파이프 보다 핫 파이프 쪽이 명령의 병렬도도 높아지기 때문에 더 많은 명령 발행이 가능하게 된다. 따라서 핫 파이프 쪽의 대역을 넓히는 것이 가능해 진다.

 실제 구현에서는 백그라운드 실행 유닛군은 두 파이프에서 공유 될 가능성이 있다. 공유 실행 코어 쪽이, 다이 사이즈 (반도체 본체의 면적)를 축소할 수 있기 때문이다. 그러나 파이프 라인 중 프런트 엔드 (페치 및 스케줄링 등의 부분)는 완전히 분리되게 된다.

 또 두 파이프는 기존의 포어그라운드 실행 파이프 라인 이외에 백그라운드 파이프를 갖는다. 콜드 파이프에서는 백그라운드 단계에서 실행을 마친 코드 중에서 자주 사용되는 부분을 추출하여 그것을 핫 파이프에 보낸다. 한편, 핫 파이프 백그라운드 단계에서는 실행된 코드 중에서 가장 자주 사용되는 코드를 찾아 더 최적화를 실시한다. 즉, 자주 사용하는 코드의 선택과 최적화는 실행 파이프 라인 백그라운드에서 처리되어 실행 파이프의 처리를 막지 않는다.

콜드 파이프와 핫 파이프



추적 캐시를 중심으로 구축

 PARROT에서는 추적 캐시를 기반으로 핫 파이프를 구축하고 있다. 추적 캐시는 Pentium 4에서도 채용되고 있는 명령 캐시 방식으로 프로그램 중 실제로 사용되는 코드의 추적 (실행되는 경로)에 따라 명령을 캐시한다. 프로그램 명령 순서에 따라 캐시하는 기존의 명령 캐시보다 효율이 좋다.
 Pentium 4에서는 IA-32 코드가 아니라 일단 디코딩된 내부 명령 (μOPs)을 추적 캐시에 저장하고 있었는데, PARROT에서도 마찬가지로 μOPs를 추적 캐시에 저장한다. 즉, 추적 캐시에 히트한 명령을 다시 디코딩은 필요가 없다. 또한 가변 길이의 IA-32 명령어가 아닌 고정 길이 μOPs를 캐시하기 때문에 캐시에서 페치나 디코딩도 용이하게 된다.

 PARROT에서는 콜드 파이프는 단순한 명령 캐시, 핫 파이프는 추적 캐시로 2개의 캐시를 구분해 쓴다. 콜드 코드에 관해서는 추적을 선택하는 노력과 시간을 줄인다. 반대로, 핫 코드에 관해서는 Pentium 4보다 훨씬 똑똑한 추적 선택 메커니즘을 통해 보다 효율이 좋은 추적 캐시를 실현한다. 덧붙여, 캐시가 분리되기 때문에 분기 예측기구도 콜드 분기 예측과 핫 추적 예측으로 분리된다.

 추적 캐시에 의해 PARROT에서는 μOPs에 디코딩과 코드의 추적을 재사용이 가능하다. 캐시 효율의 향상과 디코더의 부담을 줄여 소비 전력을 낮출 수 있다. 핫 파이프에서 최적화한 경우도 정렬해 바꾼 명령 순서 및 명령 변환의 결과 등을 추적으로 캐시한다. 즉, 추적 캐시는 최적화의 결과를 캐시하는 역할도 달성한다.


PARROT 파이프 라인 개념



IDF044Fall에서 PARROT 프레젠테이션



추적 선택

 콜드 파이프 백그라운드에서는 추적의 선택 및 필터링 기구가 작동, 핫 코드를 선별한다. 추적 구축은 PARROT에서는 매우 중요하다. 이말은 PARROT에서의 코드 최적화는 추적으로 행하기 때문에, 더 큰 추적을 구축할 있다면, 잠재적으로 최적화의 폭이 넓어지기 때문이다.
 추적의 최소 단위는 분기 명령 등 컨트롤 전송계 명령 (CTI)에서 끝나는 시퀀스 베이직 블록이지만, PARROT에서는 베이직 블록을 넘은 추적을 구축한다. 추적은 최대 64μOPs로 되어 있다. 덧붙여서, 유사한 추적 구축을 소프트웨어로 행하는 Transmeta 코드 모핑 소프트웨어 (CMS : Code Morphing Software)는 Efficeon의 경우 최대 100 명령의 추적을 구축한다. PARROT은 그것에 가깝다.

 Intel이 Smart Trace Selection라고 부르는 이 단계에서는 다음과 같은 처리를 행한다.

루프 언롤링 (Loop unrolling)
프로시저 인라이닝 (Procedure inlining)
버츄얼 리네이밍 (Virtual renaming, SSA)
부동소수점 스택 플래트닝 (FP-stack flattening)
CTI 명령 ASSERT 명령으로 치환 (Replace CTI by ASSERT)

PARROT 파이프 라인 조직


 추적 선택기 / 필터 / 빌더로 구축된 추적은 추적 캐시에 저장된다. 다음 코드 부분이 실행될 때 추적 캐시에서 가져와 핫 파이프에서 실행된다. 그리고 같은 추적이 빈번하게 사용되는 경우에는 추적 최적화가 그 추적에 대해 더 적극적인 최적화를 백그라운드에서 건다.

 최적화는 범용의 최적화 및 CPU 코어에 특화된 최적화 양쪽을 한다. 이하의 최적화를들 수 있다.

로직과 연산의 간소화 (Logic, arithmetic simplifications)
값, 레지스터, 컨디션 등의 전파 (Propagation of values, registers, conditions)
데드 코드 엘리미네이션 (Dead code elimination)
마이크로 옵스 퓨전 (μOPs fusion)
복수의 비 SIMD 명령의 SIMD 명령어화 (SIMDification)
μOPs 스케줄링 (Semi-dynamic scheduling)

최적화 된 PARROT 파이프 라인 조직


 최적화에 의해 CPU 코어가 실행 μOPs를 줄이고 명령간의 의존성을 해소하고, 리네이밍을 단순화하고 스케줄링을 향상시킨다. 이것에 의해 연산 유닛, 스케줄러, 레지스터 등의 사용을 줄이고 메모리 액세스의 횟수를 감소시킨다. 자원의 사용을 줄이는 것으로, 그에 따라 성능을 향상 시키면서도 소비전력의 경감이 가능하게 된다.

 그러면 PARROT 아키텍처에서 어느정도의 효율화를 도모하는 것인가. 또한 PARROT이 채택된다면, 어떤 세대의 CPU가 되는 것인가. 다음 보고서에서는 그 부분을 설명한다.


2004년 11월 8일 기사 입니다.


[아키텍처] 전력 효율성에 초점을 둔 인텔 연구개발 (PARROT)



[분석정보] 드디어 베일을 벗은 Transmeta의 비밀 병기 Efficeon



[분석정보] CPU 고속화의 기본 수단 파이프라인 처리의 기본 1/2



[분석정보] CPU 고속화의 기본 수단 파이프라인 처리의 기본 2/2



[분석정보] 슈퍼 스칼라에 의한 고속화와 x86의 문제점은



[분석정보] 명령의 실행 순서를 바꿔 고속화 하는 아웃 오브 오



[분석정보] x86을 고속화하는 조커기술 명령변환 구조



[분석정보] CPU와 메모리의 속도 차이를 해소하는 캐시의 기초지식



[아키텍처] Core Microarchitecture 속도의 비밀은 CISC의 아름다움