벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] x86에서의 탈피를 도모 Intel의 새로운 로드맵

tware 2008. 4. 7. 22:03

 

Sandy Bridge와 Larrabee가 보여주는 Intel의 명령 확장

 Intel은 향후 CPU의 명령어 세트 아키텍처를 차례로 크게 확장해 간다. Intel은 2010 년부터 앞도 포함한 명령 세트 로드맵을 4월 2 ~ 3 일 중국 상하이에서 개최한 기술 컨퍼런스 "Intel Developer Forum (IDF)"에서 보였다. 2010년 CPU "Sandy Bridge (샌디 브릿지)"이후는 주로 명령 세트를 확장함으로써, CPU 코어의 성능을 도약시켜 간다.

 Intel은 이를 위한 토대가 되는 새로운 명령어 확장 "Intel Advanced Vector Extensions (Intel AVX)"를 Sandy Bridge에서 도입한다. AVX는 SIMD (Single Instruction, Multiple Data) 연산의 폭을 기존의 128bits에서 256bits로 확장한다. 그것에 맞춰, Sandy Bridge의 SIMD 연산 유닛의 연산 폭도 256bits로 확장, 데이터 로드도 배로 늘린다. 그 때문에 이론 값은 CPU 코어당 부동 소수점 연산 성능은 2배로 뛴다.

 

 

새로운 확장 명령 "Intel AVX"의 개요

 

 

부동 소수점 연산 폭을 2 배로 확장


 Intel의 이 방침에 따라, 2010년 부터는 소프트웨어가 새로운 명령에 대응해, SIMD 부동 소수점 연산을 사용하지 않는 경우 CPU의 성능 향상을 살리는 것이 어려워진다. 또한 성능이 확장되는 것은 주로 SIMD의 부동 소수점 연산이 된다. 기존 코드 특히 스칼라 정수 연산 중심의 소프트웨어는 향후 성능 향상의 폭이 적게 머문다. 무엇보다, 현재도 싱글 쓰레드의 정수 연산 성능의 향상은 어려워지고 있다. 이번 IDF에서는 CPU 개발 방향의 변화라는 형태로 해당 기술 트렌드가 명확하게 나타났다.

 

2008년 이후의 Intel 명령 세트의 변화

 

 

Intel 명령 세트 확장의 방향성 (FMA는 하스웰에서 도입)

 

(펜린(울프데일,요크필드) 이후로 클럭 향상이 거의 멈춘 관계로 년에 성능 증가는 더욱 어려움. 예전에는 중간 아키텍처에 의한 성능 향상으로 동클럭 성능도 올렸지만, 거기에 더해서 클럭 향상에 의한 성능 향상이 성능 증가에 큰 부분. 클럭 향상이 거의 멈췄기 때문에 아키텍처 개량과 명령셋 개량으로 성능 증가로 전환.)


 Intel AVX는 CPU의 성능을 SIMD 연산에 확장하는 MMX / SSE의 연장에 있다. 그러나 MMX / SSE와는 근본적으로 다른 점이있다. 그것은 확장된 AVX 명령은 명령 포맷도 크게 바꾸는 점이다. x86 (IA-32/Intel 64) 아키텍처는 지금까지 명령의 머리에 "접두사 (Prefix)"를 추가하여 새로운 명령을 실현해 왔다. 이것은 마치 좁은 집을 차례로 증축하는 것으로, 그 결과 집 (명령 세트)은 볼품이 없는 기워진 투성이 되었다. 이러한 명령어 세트의 복잡화와 명령 길이의 늘어남은 x86 CPU의 성능 향상의 큰 벽이 되었다.

 그래서 AVX는 지금까지의 볼품이 없는 x86 명령의 확장 방식을 끝낸다. 그 대신,보다 효율적인, CPU 하드웨어가 취급하기 쉽고, 미래의 확장도 용이한 명령 포맷 시스템을 도입한다. 집 (명령 세트)를 대 개축하여 깔끔한 건축으로 고치는 것이 AVX의 방향성이다. 명령 포맷을 다시 정의하여 "전통 x86"을 벗어난 것이라 바꿔 말해도 좋다. Intel은 기존의 SSE 명령도 AVX로 전환시켜 나갈 예정이다. 따라서 AVX는 SSE 명령을 포트하기 쉽게 되어있다.

 AVX의 새로운 명령어 인코딩 시스템에 따라 Intel은 앞으로도 계속해서 대폭적인 명령어 세트 확장이 가능하다. 예를 들어, Sandy Bridge의 대상은 곱셈과 덧셈의 2 명령어를 융합시킨 "적화산 명령'을 소개한다. 또 512bits 및 1,024 bits 같은 벡터 길이의 확장도 용이해 진다. Intel이 2008년 말부터 2009년에 걸쳐 투입할 예정인 매니코어 CPU "Larrabee (라라비)"는 AVX 명령 형식 확장의 위에 타고 있을 가능성이 높다. AVX는 앞으로 매 세대 명령 세트를 크게 확장해 가는 Intel 전략의 근간을 볼 수 있다.

 

명령 형식이 근본부터 변하는 AVX

 AVX의 256bits SIMD 및 3 오퍼랜드 신택스는 큰 확장이지만, 실은, AVX에서 가장 혁신적인 부분은 따로있다. 그것은 명령 인코딩 포맷의 변경이다.

 x86 (IA-32/Intel 64) 명령은 명령에 opcode 앞에 1 바이트 길이의 접두사를 부여해 확장 할 수 있다. 새롭게 명령을 추가하거나 레지스터를 확장하는 것은 명령의 머리에 접두사를 차례로 더하는 것으로 실현해 왔다. SIMD 관련 명령을 나타내는 SIMD 접두사나 Intel 64 아키텍처에서 확장한 8 개의 레지스터에 액세스 하는 REX 접두사가 그것이다.

 IA-32/Intel 64는 접두사로 확장 할 수있는 것이 장점이지만, 부작용도 있다. 그것은 접두사에 의해 명령 포맷이 복잡해지고 명령 길이가 길어지는 것이다. 따라서 IA-32 / Intel 64 명령은 디코드가 어려워 명령 디코드가 성능의 병목을 만들거나, 명령 디코더가 비대화해 전력을 소비하는 등의 문제를 일으키고 있다. 실제로, Core Microarchitecture (Core MA)에서는 큰 성능 병목이 명령의 프리 디코딩과 팻치다. 또 명령 확장을 반복하면 접두사가 점점 늘고 명령 길이가 네버 엔딩으로 길어지고 간다는 잠재적 문제도 있다.

 "AVX 명령어 인코딩 시스템을 바꾼 이유는 지난 몇 년 SSE 명령의 진화에 있다. (IA-32/Intel 64) SIMD 명령은 처음에는 3 바이트 길이의 명령부터 시작했다. 그러나 데이터 타입을 추가하기 위해 1 바이트 접두사를 명령의 처음에 추가하고, 다음에 64 bit 아키텍처에서 레지스터 8 개를 더해 또 1 바이트를 명령 머리에 덧붙였다. 그렇게 3 바이트 길이였던 명령이 5 바이트 길이가 되어 버렸다 "고 Intel의 Bob Valentine (밥 발렌타인) 씨 (CPU Architect, Mobility Group)는 문제점을 설명했다.

 AVX는 명령 인코딩 포맷을 크게 변경함으로써 이 문제를 해결한다. 1 바이트 길이의 접두사를 계속 거듭하는 "임시 변통" 비효율적인 포맷을 끝낸다. 대신 1 바이트 "VEX (Vector Extension)"라 부르는 접두사와 VEX에 이어 1 ~ 2 바이트의 "페이로드 (Payload) '시스템을 도입한다. 기존의 접두사로 표현하고 있던 정보는 페이로드의 비트 필드에서 표현한다.

 "VEX 인코딩 시스템의 아이디어는 이들 접두사군에 포함된 정보를 압축하는 것이다. 1 바이트의 페이로드에 접두사 정보를 모두 넣어 버린다. 게다가 지금부터 도입하는 새로운 레지스터나 128bits 길이 또는 256bits 길이 등의 정보도 페이로드 안에 압축한다. "(Valentine 씨).

 

AVX는 미래를 위한 명령 형식

 

 

미래의 16way SIMD 확장까지 가능한 명령 포맷

 

 

Intel의 Bob Valentine (밥 발렌타인) 씨 (CPU Architect, Mobility Group)


 VEX에 따라 AVX는 상대적으로 명령 길이가 짧아진다. VEX의 페이로드는 1 바이트와 2 바이트의 2 종류가 있다. 1 바이트 페이로드 VEX 접두사는 "C5" , 2 바이트는 "C4" 가 된다. 1 바이트 페이로드는 동일한 명령이라도 기존의 명령 포맷과 비교하면 1 바이트 분 명령이 짧아진다.

 "실제로는 모두 1 바이트의 페이로드에 넣을 수 없다. 그래서 두 가지 버전의 VEX를 준비했다. 4 바이트 버전 (페이로드는 1 바이트)와 5 바이트 버전 (페이로드는 2 바이트)이다. 대부분의 레거시 코드는 가령, 64bits 명령이라도 4 바이트 버전 명령에 격납 시킨다. 그래서 1 바이트 분은 명령이 짧아진다. 몇 가지 새로운 명령은 새로운 레지스터를 사용하여 5 바이트 버전 명령을 하게 된다. 그래도 현재와 같은 5 바이트에 들어간다. "고 Valentine 씨는 명령 길이에서 VEX가 유리한 것을 설명한다.

 VEX 인코딩 포맷의 또 한가지 중요한 점은 향후 명령 세트의 확장도 같은 명령 길이로 용이하게 만드는 것이다. 명령을 확장하면 점점 명령 길이가 길어지는 등의 문제에서 해방된다.

 "5 바이트 버전의 두번째 페이로드는 전체가 아니다. 미래의 확장을 위해 3 비트가 남아있다. 3bits가 있으면, 1,000 개 이상의 새로운 명령을 추가 할 수 있다. 새 피쳐 새 레지스터 새로운 벡터 길이 대부분 뭐든지 추가 할 수 있다 "(Valentine 씨).

 VEX 포맷의 명령어 길이인 채로 512 비트 또는 1024 bits의 SIMD도 도입 있다고. 또 다양한 접두사를 거듭한 기존 방식과 비교하면 명령 전체의 포맷이 좁혀져 명령 길이가 예측하기 쉬워진다. 선두의 1 바이트가 C5 또는 C4 로 오피 코드까지의 길이는 정해진다. 그 때문에 하드웨어 측에서 볼 때, 명령의 프리 디코딩이 용이하게 된다고 생각된다.

 


x86 CPU의 병목 현상을 완화하기 VEX 인코딩 포맷

 AVX의 VEX 인코딩 시스템은 Intel CPU의 향후 진화에 관련이 깊다. 왜냐하면 x86 계 CPU의 가장 큰 약점이 명령 디코드에 있기 때문이다.

 Core MA는 4 명령 실행의 강력한 실행 파이프 라인을 갖지만 프런트 엔드에 약점이있다. 우선, L1 명령 캐시에서 명령을 패치 하는 포트는 16 바이트 길이로 패치 폭이 한정되어 있다. 그때문에 개개의 명령이 너무 길면 패치 할 수 있는 명령 수가 제약되는 경우가 있다. 다음 IA-32/Intel 64 명령을 반출하는 프리 디코딩에도 병목 현상이 있다. 오퍼랜드나 주소 길이를 변화시키는 명령 접두사 "LCP (Length Changing Prefixes) '가 붙으면 프리 디코딩이 현격히 느려진다. 명령 길이 마킹 알고리즘을 바꿔야 하기 때문이다.

 

 

 

 

명령어 패치 & 프리 디코딩 최적화


 Core MA의 프리 디코딩 및 디코딩 부분의 약점은 IA-32/Intel 64 명령 세트 아키텍처 자체에 관여하는 뿌리가 깊은 문제이다. 가변 길이 명령에 증축을 거듭해 현재 IA-32/Intel 64에서는 확장된 명령은 길어져 명령어 패치 대역을 압박하고 복잡한 명령 형식은 명령을 반출하기 어렵게 한다. 그것에 비해 일반적인 RISC (Reduced Instruction Set Computer) 에서는 명령 길이와 명령 포맷이 분명해, 디코딩은 훨씬 용이하다. x86 계 CPU 업체들은 이 문제를 풀려고 하면 자원이 필요해, 전력 효율을 떨어 뜨린다는 딜레마를 안고 있다.

 그리고 사실, 최신 Nehalem에서 조차 Core MA의 이러한 약점은 어느 정도 계속되고 있다. 명백한 약점이므로 Nehalem에서는 개량된다고 추측했으나, 16bytes 패치 및 프리 디코딩 시스템 등은 거의 그대로 라고 한다. 왜냐하면 개량하려고 하면 방대한 트랜지스터가 필요해, 전력 소비를 늘리기 때문이라고 한다.

 

 

 

Nehalem의 패치 및 디코딩

 

 Nehalem의 이 설계의 선택에 의문이 있었지만, VEX 형식 사양을 보면 의도는 뻔하다. Intel은 CPU 측의 프리 디코딩 및 디코딩 하드웨어를 만지기 보다는 명령 포맷 자체를 개혁하는 것이 상책이라고 판단했다고 생각된다. 즉, 문제의 근원부터 손을 쓴다고  판단한 것이다. 명령어 패치 폭의 좁음도 명령 마킹 알고리즘의 복잡성도 명령 포맷 측이 개량되면 자연스럽게 줄어든다.

 Intel은 CPU 하드웨어 측의 이런 설계를 생각하고, VEX 포맷을 개발했다고 추측된다. IDF에서 VEX 포맷의 설명을 행한 Valentine 씨가 Core MA의 프런트 엔드 페치에서 디코딩까지의 부분을 개발한 수석 아키텍트인 것으로 그것을 증명하고 있다. IA-32/Intel 64 명령의 디코더 설계의 스페셜 리스트가 VEX로 명령 포맷의 개혁을 선도했다고 추측된다.

 

Nehalem 블록 다이어그램

 

 

 

Core Architecture 블록 다이어그램



 이처럼, AVX 확장 명령어를 살펴보면 Intel의 CPU 개발의 전체 흐름이 보인다. Intel은 예전과 비교하면 더 과감하게 명령 세트 아키텍처를 개혁하려고 하기 시작했다. 왜냐하면 같은 코드의 소프트웨어가 마이크로 아키텍처의 개량에 의해 새 CPU에서는 보다 빨리 달린다는 구도가 이제 통용되지 않기 때문이다. CPU 성능을 높이기엔 이제 소프트웨어 측의 대응을 촉구하는 수 밖에 없다. 그렇다면 명령 세트를 하이 페이스로 진화시켜가고 아울러 명령 포맷도 변혁해 버리는 것이 Intel의 현재 방향이다.

 AVX 확장 명령은 SSE를 포함하는 것으로, AVX로의 이행을 촉진하는 것으로 오늘날의 SSE도 VEX 포맷으로 대체 하려 한다. "전체를 보면, Intel AVX는 서서히 오늘날의 응용 프로그램 속의 기존의 SSE 명령을 대체 할 것으로 예상하고 있다"고 Intel의 Benny Eitan 씨 (CPU Architect, Mobility Group)는 말한다.

 Sandy Bridge의 디코더 하드는 기존의 IA-32/Intel 64 접두사 형 포맷과 새로운 VEX 포맷 양쪽을 디코딩 할 수 있다. 그러나 VEX 쪽이 명령 길이에서 유리하기 때문에 1 사이클에서 디코딩 할 명령 수는 원칙적으로 많아진다. 또 프리 디코더가 VEX를 보다 효율적으로 마킹할 수 있다면 거기서도 VEX 쪽이 유리하게 된다. Sandy Bridge 세대에선 아직 차이가 나지 않을지도 모르지만, 언젠가는 그렇게 될 것이다.

 

Intel 명령 세트 확장의 변천

(성능 향상을 위한 방법으로 말하면 130nm 노스우드에는

하이퍼쓰레딩이 들어갈 수 있겠죠.)

 

 

2008년 4월 7일 기사 입니다.

 

[분석정보] 5W 이하의 저전력 프로세서의 개발로 향하는 Intel

 

 

[분석정보] 왜 인텔은 샌디브릿지에 AVX를 구현하는가?

 

 

 

[분석정보] Intel의 Larrabee에 대항하는 AMD와 NVIDIA

 

 

[분석정보] 정식 발표된 라라비(Larrabee) 아키텍처

 

 

[분석정보] IDF에서 공개된 "Nehalem"의 내부 구조