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

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

tware 2008. 4. 10. 21:59

 

싱글 코어 성능을 늘리기 위한 명령어 세트 개혁

 Intel은 멀티 코어 성능뿐만 아니라 단일 CPU 코어의 성능을 앞으로도 늘인다. 그러나 전통적인 방법으로. CPU의 정수 연산과 부동 소수점 연산 성능의 균형을 잡아 새로 최적화 된 소프트웨어뿐만 아니라 기존 소프트웨어의 성능을 올리는 것이 2002 년까지의 접근. 반면, 2010 년 이후의 방향은 SIMD (Single Instruction, Multiple Data) 형의 부동 소수점 연산 성능에 포커스 명령어 세트를 크게 확장한다. 또한 2005년 이후부터 진행해온 멀티 코어화를 계속한다.

 따라서 소프트웨어는 다중 쓰레드뿐만 아니라 새로운 명령어 세트에도 적극적으로 대응해 가지 않으면 CPU의 전체 성능을 발휘할 수 없게 된다. 즉, 보다 소프트웨어나 컴파일러로 전가되어 간다. 역으로 말하면, Intel은 점점 도구와 컴파일러 및 프로그래밍 교육에 힘써 가야한다.

 아래의 Intel의 IA-32 (x86) 명령 세트 확장의 역사 차트를 보면, 아래로 갈수록 (성능의) 간격이 촘촘한 것을 알 수 있다. Intel의 명령 확장의 속도가 빨라지고 확장의 방향도 확산되고 있기 때문이다.

 이것은 우연이 아니다. Intel은 지난 4월 2일, 3일 중국 상하이에서 개최한 "Intel Developer Forum (IDF)"에서 CPU 아키텍처의 방향과 명령 확장 로드맵 관련을 명확하게 보여 주었다. 2010년 이후 CPU의 성능 향상은 명령어 세트 확장에 상당히 의존해 간다고 한다. 아래가 그 설명 슬라이드로 현재 동작 주파수의 향상과 마이크로 아키텍쳐의 개량으로 년에 15% 씩 CPU 코어의 성능을 업하고 있지만, 2010년 부터 이후로는 명령어 세트의 확장으로 성능을 올린다. 2010년에 먼저 "Intel Advanced Vector Extensions (Intel AVX)"가 "Sandy Bridge (샌디 브릿지)"에 구현되고 그 뒤의 CPU에서는 "Fused Multiply Add (FMA) '가 구현된다. (FMA는 하스웰에서 구현)

 

2010년 이후 CPU의 성능 향상은 명령 세트의 확장에 의존

 

 

 

Intel AVX의 특징

 

 

 

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


 Intel의 설명은 현재 이전, '90 년대의 오래된 트렌드까지 돌아 보지 않으면 이해할 수 없다. Intel이 이러한 방향으로 돌아서는 최대의 동기는 2003년 이전 CPU 코어 성능 향상 곡선으로 가는 것이기 때문이다.

 


2002년 말에 갑자기 멈춰 선 싱글 코어 성능 향상

 CPU 업계는 '86 년부터 2002년 사이, 약 1년에 52% 씩 싱글 CPU 코어의 성능을 향상시켜 왔다. 아래는 "Computer Architecture : A Quantitative Approach, 4th edition"의 공동 저자에서 CPU 연구자로서 유명한 David A. Patterson (데이비드 · A · 패터슨) 교수 (University of California at Berkeley)가 2006년 8월 CPU 컨퍼런스 "HotChips 18"에서 설명한 프레젠테이션이다.

 

Uniprocessor ​​성능 향상


 CPU 벤더는 16년에 걸쳐 경쟁하고 CPU 성능을 향상시키며 Intel CPU도 그 흐름에 거의 따라 있었다. 이 차트에 나와있는 것은 싱글 프로세서의 정수 연산 (SPECint)의 성능으로 주로 CPU 마이크로 아키텍처 확장과 동작 주파수의 향상으로 실현되고 있었다.

 또 메인 스트림 CPU는 그 위에 벡터형의 하나인 SIMD 연산 명령어 세트를 추가했다. Intel은 이런 MMX와​​ 각 세대의 SSE에서 이 명령 확장으로, 벡터형 특히 부동 소수점 연산의 성능도 향상을 도모해 왔다.

 이 움직임이 멈추는 것이 2002년 부터 2003년 까지. Intel을 예로 들면, 2002년 말까지 순조롭게 Northwood의 주파수를 향상시키고 있었지만, 2003년 에는 주파수의 향상이 둔화되고 마침내 멈춰 버렸다. 또한, 마이크로 아키텍처를 크게 확장하여 단일 쓰레드 성능을 끌어 올리는 것이었던 "Tejas (테자스)"는 취소되었다. 따라서 그래프 처럼 2002년에서 2003년을 경계로 단일 코어 성능 향상은 갑자기 완만하게 되었다.

 Patterson 씨에 따르면 장벽이 되고있는 요소는 3개. 명령 레벨의 병렬성인 ILP (Instruction-Level Parallelism)의 한계 "ILP 월 (ILP Wall)", 소비 전력의 벽 "파워 월 (Power Wall)", 메모리 액세스의 벽 "메모리 월 (Memory Wall)" 이다. 즉, ILP를 올리기 위해서 하드웨어를 추가해도 이전 정도의 ILP 향상은 얻을 수 없다. 따라서 ILP를 향상 시키려고 하면 전력 소비가 늘어나고 성능 / 소비 전력이 (전성비) 악화되어 버린다. 그런데 전력은 이미 PC 및 서버에 탑재 할 수있는 한계에 가까운 곳까지 올라 버렸다. 또한 CPU 코어를 빠르게 해도 메모리 액세스 대기 시간이 줄어들지 않기 때문에, 메모리가 발목을 잡고 성능이 이론값 까지 오르지 않는다.

 따라서 원리적으로 단일 CPU 코어의 성능은 올리기 어렵게 되어 버렸다. 이 상황에서 CPU 벤더는 빠짐없이 멀티 코어화로 달렸다. CPU 코어를 공정 세대마다 살찌워 가도 2003년 이후의 페이스는 5년에 2배까지 밖에 성능이 향상되지 않는다. 그런데 멀티 코어화 하면 2년에 2배의 속도로 이론적인 성능을 향상시킬 수 있기 때문이다. 이것이 지난 몇 년 동안 PC 업계가 체험한 멀티코어 턴이다.

 하지만 PC 및 서버의 일부가 여전히 싱글 코어 성능도 중요하다. 그래서 x86 CPU 벤더는 싱글 CPU 코어의 성능을 향상시키기 위해 고군분투 해왔다.

 

 

컴퓨터 아키텍처의 신구 상식

 

 

 

데자뷰 다시?

 


CPU 코어 성능 향상이 15% / 년에 둔화 현상

 Intel은 높은 주파수에 최적화된 NetBurst (Pentium 4) 마이크로 아키텍처에서 중간 정도의 주파수에 맞춘 Core Microarchitecture (Core MA)로 전환하고 성능 / 소비 전력을 (전성비) 향상시켰다. 그때문에 NetBurst의 발전형 Tejas를 취소하고 Nehalem을 일단 백지로 되돌려 다시 설계하기로 했다. NetBurst에서는 5GHz를 대상으로 설계한 CPU를, 70%의 주파수로 동작시켜 효율이 나쁘고, 일정한 TDP (Thermal Design Power : 열 설계 전력)에서는 성능이 나오지 않았다. 그것에 비해 낮은 TDP와 낮은 주파수에 맞춘 Core MA에서는 일정한 TDP 중 최고의 성능을 끌어낼 수 있었다.

 

CPU 마이그레이션 계획의 변천



 다음 Nehalem에서는 Core MA를 베이스로 튜닝을 더해, 다시 시스템 아키텍처를 변경하여 메모리 레이턴시를 단축, 메모리 대역폭을 배로 증가. 이에 따라 전체 성능이 뛰어오를 것으로 추측된다.

 그래도 싱글 코어의 성능 향상 폭은 그리 크지 않다. IDF의 설명은 현재는 CPU 코어의 성능은 년에 15% 씩 향상 정도라고. 여기서 말하는 성능의 기준은 명확하지 않지만,이 숫자는 납득할 수 있다. Patterson 씨와 John Hennesy (존 헤네시) 씨 (현 스탠포드 대학 프레지던트)가 공저한 Computer Architecture 4th edition에서 2003년 이후 속도를 20%로 견적내고 있기 때문이다. Intel의 15% / 년 보다 조금 많지만, 어쨌든 기존의 52 %에서 거리가 멀다.

 물론 Intel은 매 세대 CPU 발표때, 마케팅 메시지로 " 특정 부분의 성능이 2 배"와 같은 형태로 성능 향상을 강조. 그러나, 전체 단일 프로세서 성능의 향상은 둔화하고 있으며, IDF의 기술 세션에서는 그것을 명확하게 인정하고 있다. 그것이 현재 CPU의 성능 향상 진실이다.

 참고로, AMD는 이 벼랑 끝을 재빨리 알아채고 K8 코어는 고주파 추구로는 가지 않고 시스템 아키텍처를 바꾸고 멀티​​ 코어화도 내다 보며 모든 Intel 보다 빨리 대책을 취했다. Intel은 아키텍쳐 적으로는 Nehalem까지 뒤진 모양이다.

 

(CPU부분의 핵심 코어 아키텍처를 말하는 것이 아닌, 요즘으로 말하는 코어 이외의  언코어부까지 통틀어서 전체 결합된  시스템적인 면에서의  아키텍처가 뒤져 있다는 얘기 입니다. 인텔은 메모리 세대가 진화하는 과정에서의 유연성을 갖기 위해서 메모리 컨트롤러를 CPU에 늦게 가져갔습니다. CPU 코어측에 메모리 컨트롤러가 들어가면, 메모리도 세대에 따라서 SDR,DDR,DDR2,DDR3 등 쭉 진화를 하는데.. 아무래도 상대적으로 칩셋에 있을때 보다는 유연이 떨어지기 때문이죠. 물론 그만큼 성능에 불이익도 존재 합니다. 대표적으로 인텔이 멤컨이 CPU에 들어갔다가 내놓지도 못한 비운의 제품이 팀나죠.)


2개로 갈라진 CPU 아키텍처의 방향성

 이렇게 보면, '80년대 중반부터의 순조로운 싱글 CPU 코어 성능 향상이 2002년에 무너진 것을 잘 알수 있다. 2003년부터 지금까지의 흐름은 CPU 코어의 성능 향상이 둔화된 현실 앞에서 어떤 CPU를 설계하거나 시행 착오의 시간이었다. 그리고 그 안개가 맑아는 2010년 근처가 된다.

 2010년의 CPU 아키텍처가 보이게 된 현재 CPU 업계의 방향이 2개로 갈라진 것이 명확해 졌다.

 하나는 싱글 CPU 코어의 성능 향상은 기본적으로 포기하는 방향. 오히려 개별 CPU 코어를 심플하게 축소해, 멀티 코어로 CPU 코어 수를 늘려 멀티 쓰레드 성능을 추구한다. 이 방향은 이미 시작되고 있다. Sun Microsystems가 이 접근법의 기수로 Cell Broadband Engine (Cell BE)도 같은 방향에 있다. 이 접근방식에서는 단일 스레드 성능 향상도 의사 투기 스레드 실행으로 올린다.

 또 하나는 멀티 코어화를 계속하지만, CPU 코어 자체의 성능 향상도 계속 방향. CPU 코어에서 성능을 늘릴 여지가 있는 부분, 즉 벡터형의 부동 소수점 연산을 철저하게 늘리는 접근이다. ILP가 막힌것은 정수 연산이며, 부동 소수점 연산 SIMD에 의해 데이터 레벨의 병렬성 (DLP : Data-Level Parallelism)을 올리는 것은 아직 여지가 있다. 이것이 Intel과 AMD가 앞으로 취하려고 하는 방법이다.

 그러나 그러기 위해서는 명령 세트를 크게 확장해야 한다. 그래서 Intel은 "Intel Advanced Vector Extensions (Intel AVX) '과 'Fused Multiply Add (FMA)", AMD는 SSE5라는 방향으로 향하고 있다. AVX / FMA를 예로 들면, SSE에서 오퍼랜드 모델을 바꿔 적 적화산을 구현해, 벡터 (SIMD) 길이를 늘리는 것과 같은 방향이다. 간단히 말하면, RISC 풍의 현대적인 명령으로 전환한다. (AMD는 인텔의 SSE3 까지는 호환이 있지만, SSE4 부터는 독자적인 SSE4a & SSE5 로 방향을 잡았습니다. 다만 SSE5는 결국 최종 포기하고 (AMD의 점유율로는 독자명령으로 나가봐야 보급이 어렵기 때문에) 불도저부터 인텔 호환으로 돌아섰습니다.)

 


소프트웨어 측의 대응이 필수가 되는 2010년 이후의 실적

 이를 소프트웨어 측에서 보면 또 다른 뷰가 된다. 2002년 까지 소프트웨어 측은 메이저 변경을 하지 않아도, CPU 세대가 바뀌면 성능이 나름대로 향상 되었다. 이 "무료 점심"상태는 2002년을 경계로 끝나고, CPU의 싱글 스레드 성능은 조금씩 밖에 오르지 않게 되고 말았다. 소프트웨어는 멀티 코어에 대응해 멀티 쓰레드화 하거나,또는 멀티 태스크, 멀티 가상 머신 환경에서만, CPU의 성능을 최대한 살릴 수 밖에 없게 되었다.

 2010년부터, Intel의 설명을 믿는다면, 2003년에서 2009년 5-6 년간보다 하이 페이스로 CPU 코어의 성능이 오르게 된다. 그러나 성능 향상은 SIMD 형의 부동 소수점 연산에 집중한다. 또한 멀티 코어화를 촉진하기 위해 멀티 쓰레드화도 여전히 필요하다. Intel의 Bob Valentine (밥 발렌타인) 씨 (CPU Architect, Mobility Group)는 소프트웨어의 대응의 필요성을 다음과 같이 설명한다.

 "두가지 방향이 있다고 생각한다. 하나의 포인트는 벡터 확장에 대한 대응이다. 벡터 확장에 맞춰 (CPU가 실행하는) 코드의 일정량을 벡터라이즈 해 나갈 필요가 있다. 오늘 50%의 코드가 벡터라이즈 되어 있다면, 나머지 50%도 벡터라이즈 하고 싶다. 다음 10%를 벡터라이즈 하는 경우 벽이되고 있는 것은 로테이트 일지도 모른다. 우리는 아직 그 답을 얻지 못했으나, 그렇게 (소프트웨어) 벡터 대응을 갈 필요가 있다.

 다른 하나의 포인트는 벡터 확장과 함께, 우리가 더 많은 CPU 코어를 더해 가는 일이다. 그 때문에 소프트웨어를 멀티 스레드에 필요는 계속되고 있다. "

 이렇게 보면, CPU 설계자 측은 코드 벡터라이즈 (이 경우는 SIMD 화)가 진행될 것으로 생각하는 것으로 이해할 수 있다.

 

 

AVX의 소프트웨어 개발

 

 

 

많은 새로운 기본 명령이 FP Vectorization를 단순화하기 (1)

 

 

 

많은 새로운 기본 명령이 FP Vectorization를 단순화하기 (2)

 

 

 

FMA 내용

 

 

 

Nehalem의 블록 다이어그램

 

 

 

Nehalem의 반입 및 디코딩

 

 

20084월 10일 기사 입니다.

 

 

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

 

 

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

 

 

[분석정보] 계층화가 Nehalem MA의 특징

 

 

[아키텍처] Intel의 차기 CPU "Nehalem"의 설계 개념은 "1 for 1"

 

 

[고전 2001.02.08] Intel은 멀티 쓰레드 CPU로 향한다. Intel 겔싱어 CTO ISSCC강연

 

 

[고전 2001.02.07] 인텔 폴락의 법칙이 등장 Intel 겔싱어 CTO의 ISSCC 강연

 

 

[고전 2001.02.08] 서버용 CPU는 멀티 CPU 온 다이, PC용은 통합화? Intel 겔싱어 CTO ISSCC강연

 

 

[고전 2001.08.29] IDF에서 보이는 새로운 방향 IA-32의 장래를 담당하는 하이퍼 쓰레딩

 

 

[고전 2003.10.18] 모든 CPU는 멀티 스레드로, 명확하게 된 CPU의 방향

 

 

[고전 2004.11.05] 폴락의 법칙을 깨뜨리기 위한 멀티 코어

 

 

[아키텍처] 폴락의 법칙에 찢어지고 취소된 테하스(Tejas)

 

 

[고전 2003.02.27] Prescott,Tejas는 5GHz대, 65nm Nehalem은 10GHz이상

 

 

[분석정보] K8 이후 크게 바뀐 AMD의 CPU 개발주기

 

 

[분석정보] 수수께끼가 많은 K10 아키텍처의 방향성