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

[아키텍처] 정수 연산 성능을 희생해서 효율성을 거둔 AMD의 "Bulldozer"

tware 2010. 2. 5. 23:00

 

CPU 설계의 큰 턴인 Bulldozer


 AMD가 2011년 출시 할 차세대 CPU 아키텍처 "Bulldozer (불도저)". CPU 아키텍처에서 Bulldozer의 큰 포인트는 싱글 스레드의 정수 연산 성능의 추구를 멈춘 것이다. Bulldozer는 아마 현재의 AMD CPU보다 싱글 스레드의 정수 중심의 응용 프로그램의 성능이 떨어진다. CPU 구조의 단순화를 통해 CPU의 동작 주파수를 올릴 수 있으면, (싱글 스레드, 1코어당 성능) 하락 분을 만회 할 수 있을지도 모르지만, (1코어의) 클럭 당 성능은 (IPC) 내려갈 것이다. 반면 멀티 스레드 성능과 부동 소수점 연산 성능은 크게 성장. (코어는 많기 때문에 (물론 아주아주 초저성능 코어가 초고성능 코어의 2배 코어수가 된다고 멀티 성능이 높지는 않습니다. 어느정도 적당한 성능의 코어가 2배여야 싱글에서는 늦어도 멀티에서는 비슷한 또는 앞서는 성능을 낼 수 있는거죠.).  이런 이유로 불도저 시리즈는 클럭이 높음. 그래야만 싱글스레드(코어당 성능)을 만회할 수 있기 때문에요. 타사(인텔)는 둘째치고 적어도 자사의 이전 CPU보다 싱글코어의 성능이 높아야 하겠죠 (기존 소프트의 성능이 떨어지면 안되니까). 클럭을 높여서 성능을 높인다고 나쁜건 아닙니다. IPC를 높이던, 클럭을 높이던 성능이 결국 좋으면 장땡이죠. 단 전력이나 발열을 어느정도 잡을 수 있다면....)

 즉, AMD는 PC용 CPU의 불문율이었던 정수 연산 성능을 꾸준히 늘려 계속하는 과정에서 분리된다. 왜 AMD는 그런 결단을 했는가? 그것은 CPU의 성능 효율을 높이려면, 그것이 가장 좋은 방법이기 때문이다.

 CPU의 성능을 높이기위한 병렬성의 활용은 "명령 레벨의 병렬성 (ILP : Instruction-Level Parallelism)"에서 "쓰레드 레벨의 병렬성 (TLP : Thread-Level Parallelism)"이나 "데이터 레벨의 병렬성 (DLP : Data-Level Parallelism) "으로 급격히 이동하고 있다. 프로그램의 명령을 정렬 (현대의 슈퍼스칼라 + 아웃 오브 오더 CPU에서는 내부에서 정렬 여러 명령을 병렬로 실행) 병렬 실행하는 것보다 여러 개의 스레드를 동시에 실행하거나 여러 데이터를 한 명령으로 처리하는 것이 좋다는 생각이다. 이것은 지금 프로세서 업계의 일반적인 인식이다. (ILP = IPC 증가 (1코어가 계속 커져야 함, 1코어시절 CPU는 무조건 계속 코어의 크기를 늘리며 성능을 증가 시켰고, +a 로 몇년에 걸쳐서 클럭을 높여서 성능을 증가. 각 CPU마다 아키텍처 사상에 따라 다르지만, 기본적으로 IPC를 늘리려면 더 많은 명령을 병렬로 실행해야 하고, 정렬 시켜야 하기 때문에 코어가 아주 커져야 함.), TLP = 코어수 증가와 SMT(인텔표현 하이퍼스레딩), DLP = SSE,AVX 와 같은 SIMD 명령 처리.)


 그러나 의견이 크게 구분되는 포인트도 있다. 그것은, ILP를 어떻게 할 것인가에 대한 것이다. 여전히 ILP 강화를 계속하는지, 아니면 ILP는 지금에 그치게 하거나 ILP를 떨어트리거나.

 높은 ILP는 많은 자원을 필요로 한다. 따라서 높은 ILP의 CPU는 명령어 당 전력 효율이 나빠진다. CPU의 성능 효율을 추구한다면, ILP는 어느 정도까지 억제하는 것이 좋다.

 그러나, ILP를 낮추면 기존의 싱글 스레드 애플리케이션의 정수연산 성능이 떨어진다. 즉, 지금까지 사용하던 응용 프로그램의 성능이 떨어진다. 기존 응용 프로그램의 성능이 떨어지는 것은 지금까지 금기였다. 그것은 할수가 없는 위험으로, PC 용 CPU는 비효율적인 것을 알고 있어도 높은 비용을 지불 ILP를 높이는 방향으로 진행되어 왔다. 이것이 PC용 CPU의 족쇄였다. (기존 CPU보다 코어당 성능이 낮으면 쓰고 있던 많은 소프트웨어의 성능이 떨어지기 때문에 당연히 금기시. 예를 들면 내가 하는 게임이 성능이 떨어진다면 미래에 몇년 ~ 10년 뒤에 나올 게임에서나 성능 증가가 된다면 그걸 과연 누가 살건가? 이런 문제.. 그 시기가 되면 더 좋은 CPU가 중저가로 나올테고... 즉 SIMD명령 추가나 코어수를 늘리는 경우에도 각 코어의 성능은(IPC x 클럭= 코어의 성능) 절대 낮춰서는 안됨. 코어의 클럭당 명령처리 능력이 떨어지면, 클럭이라도 왕창 올려야만 판매가 가능. 이미 인텔은 펜4에서 그랬죠. 순수 x86 레거시 명령의 경우 펜3 보다 펜4가 약간 떨어졌죠. 대신 펜4는 초기제품이 펜3 최후제품의 클럭이고, 중기 이후는 훨씬 고 클럭.)

 하지만 지금 흐름은 바뀌기 시작하고있다. Intel은 낮은 가격 또는 저전력 CPU 부문에는 ILP를 낮췄다 "Atom (Bonnell : 본넬)"계 CPU 코어를 투입했다. AMD도 같은 개념의 Bobcat "(밥캣)"을 2011 년에 투입한다. 그리고 AMD는 하이엔드에서 메인 스트림 전용의 CPU 아키텍처 인 Bulldozer에도 ILP에서 DLP & TLP에 시프트를 하고 ILP를 더욱 낮춘다. 반면 Intel은 DLP와 TLP를 높이면서도 ILP를 유지하려 한다. AMD와 Intel은 결정적으로 방향이 나뉘고 있다. (인텔은 고성능 (고 IPC, 고 SIMD 성능, +a 로 하이퍼스레딩으로 논리 8코어) 대형 4코어, 불도저는 저성능 소형 (저 IPC, 저 SIMD 성능) 8코어. 인텔의 경우 데스크스탑&노트북&서버용 고성능 CPU와 저전력계의 아톰간에 IPC와 코어 크기가 큰 차이. AMD는 고성능이라는 불도저계와 저전력 CPU간에 IPC는 큰 차이는 없고 대신 클럭에의한 성능 차이. 물론 더 자세하게는 불도저계가 캐시가 훨씬 많고, 여러모로 AMD 저전력 CPU보다는 동 클럭에서도 성능이 조금 더 좋지만...)

 

 

 

AMD CPU 아키텍처

 

 

1 스레드 당 정수 파이프는 2 / 3


 AMD가 내년 (2011 년) 투입 Bulldozer는 2 개의 CPU 코어를 통합 한 CPU 모듈로 2 스레드를 실행한다. 1 개의 CPU 모듈 안에 2 개의 정수 코어 (Integer Core)와 L1 캐시가 2 스레드를 병렬 실행한다. 한편, 부동 소수점 유닛 군 (FP Units)와 명령 디코더 (Instruction Decoder), L2 캐시 등은 CPU 모듈에 1 개 (또는 그룹) 씩, 2 스레드의 공유 자원이 된다.

 

 

Bulldozer 모듈

 

 

AMD CPU는 전통적으로 정수 연산 파이프 (Integer Pipe)와 로드 / 스토어 파이프 (Load / Store Pipe)를 쌍으로 구성하고있다. 연산의 실행 파이프와 데이터를 메모리에서 로드 또는 저장하는 파이프가 1 개씩 짝을 지어있다. 이는 연산과 메모리 오퍼레이션을 포함한 x86 연산 명령을 내부 명령 "uOP (MicroOP)"분해하고 Out-of-Order (비 순차적) 실행할 때, 스케쥴링을 쉽게 하기 위해서다. AMD의 경우 실제로는 x86 명령에서 uOP로 분해하는 사이에, 복합 형 내부 명령 "MacroOP"로 변환되지만, 최종 실행시 uOP된다. Bulldozer에도 이 기본은 변하지 않는 것으로 추측된다. (x86으로 대표되는 복합명령 체계 CISC CPU는 단순명령 체계 RISC에 비해서 하나의 명령의 단위가 큼. CISC의 명령은 RISC로 환산하면 1~3명령이 되기도 함.  데이터에 대한거라 다르긴 하지만, 마치 SIMD와 스칼라 명령의 관계 같은... CISC와 RISC 차이는 데이터만에 대한게 아니라 명령 자체에 대한 것이라 조금 다르지만 말이죠. 현대의 x86 CPU는 이런 x86명령을 더 작은 단위의 (RISC의 단순 명령 같은) CPU 내부 명령 uOP로 분해해서 병렬로 처리 함.)

 Bulldozer 정수 코어는 2 개의 정수 연산 파이프와 2 개의 로드 / 스토어 파이프를 갖추고 있다. 즉, 연산 &로드 / 스토어 쌍을 2 조 갖추고 있다고 볼 수있다. 반면 AMD의 현재의 CPU 코어 "K10 (Hound : 하운드)"는 정수 유닛 3 쌍, 즉, 3 개의 정수 연산 파이프와 3 개의 로드 / 스토어 파이프를 갖추고 있다.

 uOP의 병렬 실행은 Bulldozer 정수 코어가 4 uOPs / Cycle, K10 코어가 6 uOPs / Cycle의 피크 실행 대역된다. x86 연산으로 환산하면, Bulldozer의 2 쌍의 연산 및 로드 / 스토어 파이프는 2 명령 분 (실제로는 동시에 실행되는 다른 x86 명령의 연산 uOP 및로드 / 스토어 uOP 조합)을 정점으로 병렬 실행할 수 있다. 반면 K10 코어 x86 연산에서 3 명령분을 병렬 실행할 수 있다.

 비교하면 명확하게, Bulldozer의 1 개의 정수 코어에서 실행할 수있는 명령의 피크 실행 대역은 현재 CPU 코어의 2/3가 된다.즉 명령 레벨의 병렬성 (ILP : Instruction-Level Parallelism)가 2/3로 감소했다. 정수계의 단일 스레드 "피크"성능은 Bulldozer 세대 K10의 2 / 3로 떨어지게 된다.

 덧붙여서, x86 명령의 디코딩 대역은 K10이 3 x86 명령 / 사이클인 반면, Bulldozer는 4 x86 명령 / 사이클로 Bulldozer가 높다. 그러나, Bulldozer는 2 개의 정수 코어에 명령을 작성해야 한다 (불도저는 1모듈당 1개의 디코더 1개의 FP/SIMD 유닛, 2개의 정수 코어 구성이기 때문에. 즉 8코어라면 4개의 모듈로 구성되고, 4코어면 2 모듈, 2코어면 1 모듈로 구성. 즉 다른 모든 CPU들은 CPU로서 구성 가능한 최소 단위가 코어 인데, 불도저는 최소 단위가 모듈 입니다.). 따라서 실질적으로 1 스레드가 사용할 명령 디코딩 대역은 평균적으로 절반 2 x86 명령 / 사이클이 되어 버린다. 명령 디코딩 대역에서도 K10의 2/3 이다. (이 다음 다음 개선판에서 디코더를 2배 키운다고도 하는데, 의미가 없는 얘기죠. 어짜피 2개의 성수코어에 이미 딱 맞는데, 디코더만 늘린다고 해서 뒤에서 실행할 능력이 안되는데, 성능이 오를리가 없으니까요. 결국 데스크탑으로는 나오지도 않았구요.)

 

 

 

 

AMD 아키텍처 비교 (그림을 클릭해서 보세요.)

(세부적으로 하나하나 뜯어보면 또 다른 차이들이 있을테고 1:1로 비교할 수는 없겠지만, 불도저 모듈내 1코어의 능력은 그림에서 보듯이, 이전 아키텍처에 비해서 2/3의 능력을 갖고 있습니다. AMD 말로는 구성은 2/3지만 더욱 효율적으로 만들어서 80%이상의 성능을 갖도록 했다가 되는 것 이구요. AMD의 말대로라면, 부족분 20%는 클럭을 30~40% 더 올리면 커버되고도 더 높은 코어당 성능을 낼 수 있게 되는 것이고, 여기에 그 코어가 8개니까... 현재의 프로그램은 기존 자사 제품보다 (6코어 투반) 더 높은 성능 + 향후 소프트에서 2개의 코어가 더 많으니까 더 높은 성능, 이렇게 될 수 있는거죠.)

 

 

 

10년 전 CPU 세대로 파이프 구성은 퇴보


 AMD는 3 x86 명령 디코드 6 uOPs 실행 정수 파이프 구성을 '99 년에 투입 한 K7 세대 만들어 냈다. 이후 기본 구성은 K10 (Hound)까지 변하지 않았다. AMD의 CPU에서 2 x86 명령 디코드, 4 uOPs 실행 정수 파이프이였던 것은 K6 세대 다. K6 시스템은 x86 명령을 "RISC (Reduced Instruction Set Computer) 86"라는 uOP와 같은 발상의 내부 명령으로 변환한다. 2 개의 x86 명령이 각주기에 디코딩 된 최대 4 개의 RISC86가 각 사이클에 스케줄러에 발행된다. 단순히 파이프 라인의 수만 비교하면 Bulldozer 정수 코어는 K6 계열 코어와 같다.

 재미있는 점은, Bulldozer 정수 파이프 군의 구성이 같은시기에 AMD가 출시 예정인 저전력 & 저가격 PC 용 CPU 아키텍처 "Bobcat (밥캣)"과 비슷한 것이다. Bobcat은 2 x86 명령 디코드 형의 파이프 라인에서 CPU 코어 정수 연산 계 파이프가 2,로드 / 스토어 계 파이프가 2 포함된다. 그러나 로드/스토어 파이프는 각각 로드와 저장소 전용 정수 연산 파이프도 완벽하고 완전한 기능 파이프가 2 개인지 여부 모른다. Bulldozer와 비교해 제약이있는 것으로 보인다. 또한 부동 소수점 연산 유닛 군의 피크 성능은 Bulldozer은 훨씬 위라고 생각된다.

 

 

 

불도저, K6/7/8/10 명령 대역

 

그렇다고 해도, 기본적인 구성은 Bulldozer와 Bobcat에 유사점이있다. Bulldozer 정수 코어의 구성은 기존의 PC 용 CPU 코어보다 10년 전 AMD CPU와 저전력 CPU와 공통점이있다. 여기에 Bulldozer 아키텍처의 포인트가 있다.

 덧붙여서, Intel의 Atom (Bonnell : 본넬) 계 아키텍쳐도 2 x86 명령 디코드 형의 파이프 라인이지만, 이쪽은 이야기가 꽤 다르다. Bonnell는 In-Order 실행 코어로 PC 용 CPU처럼 uOP는 분해하지 않는다. 더 절전인게 핵심이며, Bulldozer는 기본 발상이 달라 성능 범위도 다르다. (초대 아톰은 인온더 CPU. 베이트레일의 실버몬트 코어부터 아웃 오브 오더 CPU)

 


CPU 설계의 원칙에 따른 Bulldozer의 방향성


 AMD가 Bulldozer의 정수계 파이프 수를 줄이고 실행 대역을 좁게 한 것은 이미 언급했듯이, 그 쪽이 효율이 높아지기 때문이다. 전력과 트랜지스터당 성능을 높이려면 정수 파이프를 줄이는게 가장 효과적.

 원래 현재의 PC 용 CPU의 3~4 x86 명령 디코드 및 실행 파이프 라인은 실제로 오버 킬 사례가 있다. 메모리에 제약이 있는 상황에서, 명령 간의 의존성 때문에, x86 명령 환산으로 2 명령 정도 밖에 병렬 실행할 수없는 경우가 적지 않다. uOP로 분해해 실행하는 경우에도 동일 3~4 x86 명령의 병렬 실행 대역은 어디 까지나 피크이며, 평균은 이보다 적다는 게 상식이라고 한다.

 그런데 2 x86 명령어에서 3~4 x86 명령어 확장하면 보다 더 자원이 필요하다. 늘린 자원에 맞는만큼 명령 실행 효율이 오르면 좋지만 실제로는 그렇지 가지 않기 때문에, 1 명령의 실행당 전력과 트랜지스터의 소비가 증가 해 버린다. 그만큼 전력과 트랜지스터당 성능이 떨어진다.

 이것에 대해서는, Intel도 CPU 설계 경험칙 "폴락의 법칙 (Pollack 's Rule) '으로 설명하고 있다. 이 법칙은 CPU의 크기를 2 배로 해도 정수 연산 성능은 제곱근 정도 밖에 향상되지 않는다고 한다. 즉, 2 배 복잡한 CPU로 ILP 등을 높여도 성능 향상은 1.4 배 정도에 머물기 때문에, 전력과 트랜지스터 당 효율이 악화된다.

 

 

폴락의 법칙

 

 

지금까지 PC 용 CPU는 싱글 스레드의 시리얼 코드의 절대 성능을 높이기 위해 오로지 ILP를 높여왔다. 피크의 병렬 명령어 수를 늘리고, 그 결과 현재 3 x86 명령어 (AMD)와 4 x86 명령어(Intel, 엄밀하게는 조건 분기 명령이 융합되기 때문에 5 명령 실행)에 도착한. 1 ~ 2 명령만 병렬로 실행하고 마는 경우가 있어도 더 많은 명령을 병렬로 실행할 클럭당 피크 성능을 번다는 생각이다. 하지만 그 접근이 CPU를 확대하고 전력과 트랜지스터당 성능 효율을 떨어 뜨렸다.

 따라서 논리적으로는 CPU를 효율적으로 하려면 ILP를 억제하고, 동시에 실행할 수있는 명령 수를 줄이고, CPU 코어를 보다 심플하게 하면 된다는 결론이된다. 2 x86 명령 디코드 및 실행 파이프 라인으로 하면 현재보다 성능 당 소비와 트랜지스터 수를 낮출 수있다. (문제는 이렇게만 하면 전력 효율적인 CPU가 만들어지는데, 불도저는 여기에 고클럭을 달성하는 구조이기 때문에, 그에 따른 레치회로가 늘어나고 그로 인해서 전력 역시 내려가지는 않습니다. 밥캣 같은 것은 고클럭 구조가 아니기에 저전력이죠.)

 3~4 x86 명령 실행 파이프 라인의 경우 최대 성능은 높아지지만, 1 ~ 2 명령 밖에 실행할 수 없는 경우는 자원이 낭비된다. 반면 2 x86 명령 실행 파이프 라인의 경우, 1 ~ 2 명령 밖에 실행할 수 없는 경우도 낭비가 적다. 그러나 3 ~ 4 x86 명령을 병렬로 실행할 기회는 살릴 수 없으므로 정수계의 절대 성능은 떨어진다.

 


트레이드 오프에서 미래의 응용프로그램을 거둔 AMD


 2 x86 명령어로  떨어져도 효율적인 CPU 코어를 다수 올리면 칩 전체의 성능 효율이 높아진다. 전력과 트랜지스터당 칩 전체의 성능이 더 올라보다 효율적인 CPU된다. 그러나 피크의 싱글 스레드 정수 성능은 희생되고 성능 향상의 혜택을 받을 수 없는 응용 프로그램이 나온다.

 그렇게 되면, PC CPU에 있어서, 이것은 상충하는 문제가 된다. 싱글 스레드 성능을 유지하거나 멀티 스레드 성능을 중시 하는가. 피크 성능을 취하는지, 효율성을 가지고 가는가? 기존 응용 프로그램의 성능을 사수할지 미래 응용 프로그램의 성능 향상에 초점을 것인가. 그리고, AMD는 후자를 취한 것이다.

 AMD 아키텍처에서의 비교에서는 효율의 추구가 부각되는 Bulldozer. 그러나, Bulldozer 정수 파이프의 구조를 Intel 계 구조와 비교하면 또 다른 견해이다.

 Intel의 현재 아키텍처는 깔대기형 파이프 라인으로, 위가 넓고 아래가 좁은. 즉, 더 많은 명령을 페치 & 디코딩하여 그것을 비교적 좁은 파이프 군으로 흐르도록 해서 파이프의 운영 효율성을 높이려고 하고 있다. Nehalem (네할렘)에서는 최대 5 개의 x86 명령 (1 개 조건 분기의 경우)을 디코딩하여 최대 4 개의 Fused uOP로 변환한다. Fused uOP는 AMD의 MacroOP에 해당된다. MacroOP는 uOP로 분해되어, 정수계와 부동소수점계가 통합 된 실행 파이프 군에 보내진다. 명령 디스패치 포트는 총 6 개로, Nehalem에서는 2 스레드 uOP를 SMT (Simultaneous Multithreading 동시 멀티스레딩) 실행 할 수 있다.

 

 즉, Nehalem에서는 2 스레드에 파이프는 6 개. Bulldozer의 2 스레드에 대해 총 8 개의 파이프보다 단순 계산으로 좁게된다. 그러나 Nehalem에서는 1 스레드가 최대 6 파이프를 차지하는 것이 가능하다. 반면 Bulldozer는 스레드 당 최대 4 파이프 된다. (그런데 이미 네할렘의 차세대이며 IPC가 더 높고, 코어당 AVX 2유닛으로 성능이 더 높은 샌디브릿지가 불도저 보다 3분기 먼저 나왔죠)

 Intel의 SMT는, 예를 들면 메모리 액세스로 1 스레드가 중지되어 있는 경우에도 다른 스레드가 실행 파이프를 채울 수있다. 따라서 파이프 실행 효율은 높아진다.(메모리에 접급하면 시간이 오래 걸립니다. 그래서 캐쉬 메모리가 있는 거구요. 그 이전에 현대 CPU 에는 프리 패칭 기능이 있기도 하지만요. 캐쉬의 경우도 2~3차로 넘어가면 1차에 비해서 레이턴시가 길어 집니다. 물론 메모리보다는 빠르구요. 메모리에 접근해서 가져오는 동안 해당 스레드는 실행은 정지하게 됩니다. 표면적인 사람의 눈에는 계속 실행하고 있게 보이지만요. SMT (인텔식 이름 하이퍼스레딩)은 1코어안에서 2개의 스레드의 명령을 혼합해서 동시에 실행가능. 코어내의 유닛들을  2개의 스레드가 공유. SMT가 없는 단일 코어는 2개의 스레드를 실행시 번갈아 가면서 실행. SMT가 있는 단일 코어는 2개의 스레드에서 발생하는 명령을 혼합해서 동시에 실행. 다시 말하면 CPU의 코어가 3명령 동시 실행가능, 4명령 동시실행 가능 등으로 IPC를 얘기하죠. 4명령 동시 실행 가능 코어로 얘기하면, 일반 단일 코어는 1개의 스레드가 2명령을 동시에 실행할 수 있다고 할 때 2개의 명령을 실행하고, 다른 스레드가 있어도 그 스레의 명령은 그 다음에 이어서 실행이 되는데, SMT는  1스레드가 2개의 명령을 실행하느라 놀고 있는 2개의 실행 유닛에  2번째 스레드의 명령 일부 또는 전체를  1번째 스레드를 실행할 때  같이 실행한다는 얘기 입니다. 물론 순간적으로 1번째 스레드가 4명령 병렬로 실행이 가능한 때는 더 실행할 여유가 없어서 그 다음에 이어서 실행이 되겠지만 말이죠. SMT (동시 멀티 스레딩)이 없는 일반 단일 코어에서  윈도우 프로그램을 2가지 동시에 실행 한다고 하면,  번갈아 가면서 실행을 하는 겁니다. 2코어나 SMT는 동시에 실행을 하는 거구요.  프로그램 자체가 멀티 스레드면 1개의 프로그램에서도 여러 스레드로 나눠서 돌아가겠지만, 설명을 위해 단일 스레드 프로그램이라고 치구요. SMT 말고도 멀티스레드 (스레드 전환 방식에 따른 이름이 약간식 다른 SMT가 아닌 멀티 스레딩) CPU들도 있는데, 그쪽은 동시 멀티 스레딩 (SMT)이 아닙니다. 2개의 스레드를 제어하기 위한 레지스터 등은 따로 있겠지만, 실행 자체는 번갈아 가면서 실행 입니다. 일반 CPU에 비하면 더 빠르게 즉각 스레드를 전환해서 실행 할 수 있다는 장점이 있구요. SMT는 말 그대로 동시 멀티 스레딩이기 때문에, 2개의 스레드를 제어할 수 있고, 실행도 동시에 하는 겁니다.)

 

Bulldozer에는 이런 장점이 없다. 중지하고 있는 동안은 그 스레드의 정수 코어는 정체 해 버린다. 그러나 스레드 간의 자원 경쟁은 일어나지 않기 때문에 (스레드당)피크 성능은 떨어지지 않는다.

 

 즉, Intel과 AMD는 모두 다른 생각으로, 효율과 최고 성능의 균형을 잡으려 하고 있다. Intel은 Nehalem의 노선을 유지할 것으로 생각되기 때문에 양사의 차이는 앞으로 몇 세대는 계속 될 것으로 생각된다.

 

pcwatch

 

(이론적 배경으로는 나름 괜찮은데, 문제는 코어당 IPC가 경쟁사에 비해서 너무 떨어지다 보니, 코어당 성능을 늘리기 위해서 클럭을 무리하게 올려야 되고, 클럭을 더 높게 올리기 위해서 긴 파이프 라인으로 설계가 되고,  그렇게 해서 1코어당 성능을 올려도 경쟁사에 비해서 떨어지고, 비정상적으로 클럭을 올리다보니 전성비가 최악이 되고 절대 성능도 경쟁사에 미치지 못한 최악의 형태, 여러모로 프레스캇과 유사 합니다. 모 프레스캇도 나름 설계할 때의 논리는 나쁘지 않았죠. 설계시 애초에 논리가 안좋은데 만들 설계자는 없을테구요. 이론적으로는 IPC를 높이는 설계가 어렵고 비효율 적이라면, 클럭을 높이기 쉽도록 파이프 라인 단수를 늘리자 인데... (파이프 라인을 길게(깊게) 늘리지 않았다 해도#) 현실의 제조에서(공정) 그로 인한 발열을 잡을 수가 없었으니.. 성능대비 발열이 심하고, 발열 때문에 애초 6GH ~ 10GHz 까지 가려던 계획이 다 없어져 버렸죠. (# 파이프 라인 수를 늘리는 것은 IPC를 늘리는 것이고, 파이라인 길이를 늘리는 것은 IPC 증가가 아닌 고주파수를 의식한 설계.)

 

현실에서 할 수만 있다면야 (어떻게 해도 발열 전력을 잡을 수 있다면)..... 클럭은 조금 낮지만 IPC를 높여서 1코어당 성능이 100이 나오던, IPC가 적당히 높고 클럭도 적당히 높아서 1코어당 성능이 100이 나오던, IPC는 조금 낮지만 클럭이 매우 높아서 1코어당 성능이 100이 나오던 결과적으로 사용자가 쓰는 성능은 동일하니까 어떤 방법도 나쁜건 없죠 (각각의 방식은 소프트웨어와 관계 없이 성능이 정말 똑같죠, 프로그램에 영향을 받는건 코어수(SMT), SIMD 명령). 말하기 좋아하는 사람들만이 뭐 클럭빨이네(공정빨이네) IPC가 높다 등등으로 물어 뜯을지 몰라도, 모로가도 서울만 가면 된다고, 결과가 똑같은데.... 공항까지 1시간 + 비행기타고 1시간 총 2시간 걸려서 서울로 가나... KTX 타고 2시간에 서울로 가나 똑같죠. 문제는 현실에서 이동시간은 정말 차이가 없을 수 있지만, CPU는 실제로는 전력과 발열의 차이가 생긴다는 거죠. 성능 자체는 똑같을지 몰라도요. 이게 프레스캇이나 불도저가 망한 이유 중의 하나. (조금 다른 얘기지만.. 게임 그래픽 같은 경우도 이게 보기에 같아서 그렇지 눈속임으로 처리해서 부하를 낮춰서 보여주는 거고.. 저거는 진짜 오리지널 처리로 보여주는 거라서 어쩌구 하면서 뒤가 좋다고 하지만... 실제 눈으로 보기에 동일하면 가볍게 처리하는게 더 좋은거 아닌가? 어짜피 눈에 보이지도 않는게 무엇이 중요한가? 눈으로 보기에 내가 보이게 차이가 나야 뭐가 더 좋다 말다를 하지.. 차이를 못 느끼는데?)

 

불도저는 물론 멀티코어라서 프레스캇과 완전히 동일하지는 않으니.. 불도저의 경우는 프레스캇의 이유 + 프로그램 환경을 무시가(멀티스레드 지원 환경과 일반 소프트의 스레드 병렬성을 무시) 망한 이유가 되겠죠. 만약 불도저가 코어수에 연연하지 않고, 1모듈을(모듈내 소형 2코어를 거대 1코어로) 1코어로 그리고 SMT로 2스레드를 처리했다면 반대로 꽤나 성공한 CPU가 되었겠죠. 그래서 샌디브리지와 어느정도 경쟁을 했을테고, 그 다음 더 성능이 좋은 하스웰이 나오면 그때쯤 불도저계를 6코어로늘려서 대응을 한다던가 말이죠. 마치 예전의 4코어 린필드와 투반6코어가 경쟁했이 말이죠.)

 

 

[분석정보] 드디어 밝혀진 AMD의 불도저 (Bulldozer)

 

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

 

[아키텍처] AMD 불도저 제품은 4GHz이상

 

HT부분이 궁금하면 이글의 도표를 보셔도 됩니다. 펜티엄4 3.06 하이퍼쓰레딩

 

[정보분석] 모든 CPU는 멀티쓰레드로 CPU의 방향

 

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

 

[벤치리뷰] 마침내 등장 불도저 아키텍처 잠베지 AMD FX-8150 3.6GHz


[벤치리뷰] AMD FX-8150 리뷰


[벤치리뷰] 6코어와 4코어 잠베지(불도저) FX-6100, FX-4100,FX-8150

 

 

[분석정보] IDF 2010 왜 Sandy Bridge는 성능이 높은가?

 

 

[아키텍처] 트릭을 거듭한 Sandy Bridge 마이크로 아키텍처

 

 

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