최근 수정 시각 : 2024-04-08 06:27:38

인텔 넷버스트 마이크로아키텍처


인텔® 펜티엄® 시리즈
Intel® Pentium® Series
<colbgcolor=white,#191919>{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px"
{{{#!folding P5 라인 [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -11px"
<rowcolor=white> 마이크로아키텍처 이름 제품명 코드네임 등장 시기
P5 펜티엄 P5 1993년 3월
P54C 1994년 3월
P54CQS 1995년 3월
데스크톱: P54CS
랩톱: P54LM
1995년 6월
펜티엄 MMX 데스크톱: P55C
랩톱: P55LM
1997년 1월
랩톱: 틸라무크 1997년 9월
P6 펜티엄 프로 P6 1995년 11월
펜티엄 II 데스크톱: 클라매스 1997년 5월
데스크톱: 데슈츠
랩톱: 통가
1998년 1월
랩톱: 딕슨 1999년 1월
펜티엄 III 카트마이 1999년 2월
코퍼마인 1999년 10월
투알라틴 2001년 6월
인핸스드 P6 펜티엄 M 베니아스 2003년 3월
도선 2004년 5월
넷버스트 펜티엄 4 윌라멧 2000년 11월
노스우드 2002년 1월
프레스캇 2004년 2월
시더밀 2006년 1월
펜티엄 D
펜티엄 XE
스미스필드 2005년 5월
프레슬러 2006년 1월
인핸스드 P6 펜티엄 듀얼코어
→ 펜티엄
랩톱: 요나 2007년 1월
코어 데스크톱: 콘로
랩톱: 메롬
2007년 6월
데스크톱: 울프데일
랩톱: 펜린
데스크톱: 2008년 8월
랩톱: 2009년 1월
네할렘 (출시되지 않음)
펜티엄 데스크톱: 클락데일
랩톱: 애런데일
2010년 1분기
샌디 브릿지 샌디 브릿지 2011년 2분기
데스크톱: 펜티엄 G
랩톱: 펜티엄 M, U
아이비 브릿지 2012년 3분기
하스웰 데스크톱: 펜티엄 G
랩톱: 펜티엄 M, U
하스웰 데스크톱: 2012년 3분기
랩톱: 2013년 3분기
데스크톱: 펜티엄 G 하스웰 리프레시 데스크톱: 2014년 2분기
서버: 펜티엄 D
랩톱: 펜티엄 U
브로드웰 서버: 2015년 4분기
랩톱: 2015년 1분기
스카이레이크 데스크톱: 펜티엄 G
랩톱: 펜티엄 U
스카이레이크 2015년 3분기
카비레이크 2017년 1분기
데스크톱: 펜티엄 골드 G
랩톱: 펜티엄 골드 U
커피레이크 2018년 2분기
커피레이크 리프레시 2019년 2분기
코멧레이크 2020년 2분기
코브 데스크톱: 펜티엄 골드 G
랩톱: 펜티엄 골드G
}}}}}}}}}
{{{#!wiki style="margin: 0 -10px -5px; min-height: 26px"
{{{#!folding 아톰 라인 [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -11px"
<rowcolor=white> 마이크로아키텍처 이름 제품명 코드네임 등장 시기
실버몬트 데스크톱: 펜티엄 J
랩톱: 펜티엄 N
베이 트레일 2013년 3분기
에어몬트 브라스웰 2016년 1분기
골드몬트 아폴로 레이크 2016년 3분기
골드몬트 플러스 데스크톱: 펜티엄 실버 J
랩톱: 펜티엄 실버 N
제미니 레이크 2017년 4분기
제미니 레이크 리프레시 2019년 4분기 }}}}}}}}}
관련 CPU 제온
Xeon
코어
Core
셀러론
Celeron
아톰
Atom


Intel Netburst Microarchitecture

1. 개요2. 상세
2.1. 배경2.2. 특징
3. 사용 모델4. 여담

1. 개요

2000년 Intel Developer Forum 2000 봄 시즌에 처음 소개된 후, 가을 시즌에 발표된 인텔마이크로아키텍처.

2. 상세

파일:Pentium_4-Figure_4.png
  • Willamette: 코어 레벨 (P6(Pentium III) 대비)
    • 프론트 엔드
      • 분기 예측기 개선
        • 분기 대상 버퍼(Branch Target Buffer, BTB)가 512 → 4096 엔트리로 크게 증가 (8배)
        • 512 엔트리 크기의 Trace Cache BTB 추가
        • BTB에 존재하지 않는 분기는 BTFNT 방식의 static prediction 방식이 사용된다.
        • 인텔에 따르면 당대 공개된 어느 다른 분기예측기(Gshare, hybrid 등)보다 우수하여 P6 대비 예측 실패가 1/3 가량 감소하였다고 한다.
      • 명령어 캐시 삭제
      • 디코더가 3개 → 1개로 크게 감소
      • 12K µops 크기의 실행 추적 캐시(Execution Trace Cache) 추가

        • - 실행 추적 캐시가 적중한 경우 프론트엔드의 대역폭은 사이클당 최대 3 µops로 P6과 동일
          - 인텔에 따르면 8KB ~ 16KB 크기의 명령어 캐시와 비슷한 hit rate를 보인다고 한다.[1]
    • 백 엔드
      • 할당량은 3-way로 유지
      • 재정렬 버퍼(Reorder Buffer, ROB)가 40 엔트리 → 126 엔트리로 크게 확장
      • allocator와 스케줄러 사이에 마이크로옵 큐 추가
      • 통합 스케줄러(20 엔트리)가 5개의 스케줄러(각 8-12 엔트리)로 분리

        • - Fast Scheduler(x2): 각각 포트 0, 포트 1을 사용하며 2배속으로 동작한다.
          - Slow/General FP: 포트 1을 사용한다.
          - Simple FP: 포트 0을 사용한다.
          - Memory: 포트 2, 3을 사용한다.
      • 물리 레지스터 파일(PRF) 구조 도입
      • 실행 포트가 총 5개 → 4개로 감소

        • - 단, 포트 0과 포트 1은 2배속으로 동작하여 실질적으로는 5개 → 6개로 늘어난 효과가 있다.
          - Store data가 별도의 포트(포트 4)를 사용하지 않고 포트 0으로 통합됨
      • 2배속 ALU 도입 (Rapid Execution Engine)

        • - 간단한 정수 연산의 레이턴시가 1 사이클 → 1/2 사이클로 감소[2]
      • Data Speculation 도입

        • - 명령어의 issue[3]와 실행 사이의 간격으로부터 발생하는 레이턴시를 줄이는 효과
          - 이상적인 경우 load-to-use 레이턴시를 2 사이클로 낮추는 효과[4]
          - 실행 조건을 만족하지 못한 명령어는 재실행(replay)된다.
          - 실패가 많이 발생하는 경우 speculation이 비활성화된 cautious mode로 진입[5]
    • 메모리 서브 시스템
      • 로드 및 스토어 장치 (Load-Store Unit, LSU)
        • 로드 버퍼가 16 엔트리 → 48 엔트리로 증가 (3배)
        • 로드 장치의 대역폭이 클럭 사이클당 8 바이트 → 16 바이트로 2배 증가
        • 스토어 버퍼가 12 엔트리 → 24 엔트리로 증가 (2배)
        • 스토어 장치의 대역폭이 클럭 사이클당 8 바이트 → ~4 바이트로 감소
      • L1 데이터 캐시 메모리
        • 용량이 16 KB → 8 KB로 감소
        • 레이턴시가 3 → 2 사이클로 감소
        • associativity는 4-way로 유지
        • 캐시 쓰기 정책이 write-back → write-through로 변경
      • 6 엔트리 크기의 Write-combining buffer 추가
    • 기타
      • 명령어 파이프라인의 깊이가 크게 증가하였다.

        • - 이에 따라 분기 예측 실패 패널티가 10 사이클 → 20 사이클로 증가하였다.
          (Trace Cache hit 기준)
  • Northwood: 코어 레벨 (Willamette 대비)
    • 프론트 엔드/백 엔드 공통
      • 하이퍼스레딩 구현

        • - 명령어 TLB 및 리턴 스택은 복제되었다.
          - Trace 캐시 및 마이크로코드 ROM은 공유된다.
          - 명령어 큐 및 마이크로옵 큐는 정적으로 분할된다.
          - 로드/스토어 버퍼 및 재정렬 버퍼는 정적으로 분할된다.
          - 스케줄러, 물리 레지스터 및 실행 유닛은 공유된다.
          - 데이터 TLB 및 데이터 캐시는 공유된다.
  • Prescott: 코어 레벨 (Northwood 대비)
    • 프론트 엔드
      • 분기 예측기 개선
        • Trace Cache BTB가 512 → 2048 엔트리로 크게 증가
        • 특정한 조건의 역방향 분기는 이제 not taken으로 예측된다

          • - 역방향 분기의 거리가 특정한 임계치를 넘어서는 경우
            - 일반적인 루프 분기문에서 사용되지 않는 조건을 사용하는 경우
      • 실행 추적 캐시(Execution Trace Cache) 개선

        • - 레지스터를 사용하는 간접 분기 및 소프트웨어 프리페치 명령어 지원
    • 백 엔드
      • MXCSR 재명명 레지스터 추가
    • 메모리 서브 시스템
      • L1 데이터 캐시 메모리
        • 용량이 8 KB → 16 KB로 증가
        • 레이턴시가 2 → 4 사이클로 증가
        • 동시에 처리 가능한 outstanding load miss의 수가 4 → 8 로 증가
      • 로드 및 스토어 장치 (Load-Store Unit, LSU)
        • 스토어 버퍼가 24 엔트리 → 32 엔트리로 증가
        • 간단한 메모리 예측기 추가
      • Write-combining buffer의 크기가 6 엔트리 → 8 엔트리로 증가
      • 프리페처 개선
        • DTLB miss 시 page table walk를 통해 DTLB를 채운 후 프리페치 진행 (page fault시에는 drop)
    • 기타
      • 명령어 파이프라인의 깊이가 크게 증가하였다.

        • - 이에 따라 분기 예측 실패 패널티가 20 사이클 → 31 사이클로 증가하였다.
          (Trace Cache hit 기준)

2.1. 배경

지금 시점에서는 믿기 어려울 수도 있지만, 명작으로 기억되고 있는 P6 마이크로아키텍처의 한계를 극복하기 위해 설계되었다. 1990년대 중반에는 파이프라인을 더 잘게 쪼개 클럭 주파수를 높임으로써 성능을 향상시킬 수 있으리라는 생각이 널리 퍼져 있었고 인텔도 그 중 하나였다. 고클럭에 따른 마케팅 효과는 덤. 출시 시점의 기존 P6는 등장한지 이미 5년이 지난 낡은 마이크로아키텍처였는데, 180nm 공정으로 1 GHz 클럭을 돌파한 후 더 이상 클럭을 올리기 어려운 한계에 도달한 상태였다. IPC가 더 우수하면서 1 GHz 클럭까지 먼저 돌파한 경쟁사의 K7 마이크로아키텍처를 상대하기엔 벅찬 상태였던 것.

2.2. 특징

  • Hyper Pipelined Technology
    펜티엄 III의 10개 파이프라인 단계에 비해 2배 늘어난 20개를 기본으로 한다. 90nm 공정으로 제조된 프레스캇과 65nm 공정으로 제조된 시더밀에서는 31개로 증가한다. 파이프라인의 단계가 늘어나면 분기 예측 실패시 다시 처음부터 처리해야 하기 때문에 느려지지만 제대로 처리만 되면 성능 상 이득을 많이 볼 수 있다.
  • Rapid Execution Engine
    파이프라인의 강화, 그렇지만 늦어질 수 있는 명령어 처리에 있어서 보다 빠른 명령어 수행이 가능하도록 ALU(Arithmetic Logic Units)를 클럭의 두 배의 속도로 동작시키는데, 이로 인해 실행에 필요한 대기시간을 줄이고 보다 빠른 명령어를 수행할 수 있게 하는 것이다. 이는 파이프라인 구조와 함께 빠르게 처리되는 명령어들을 받아 바로 처리할 수 있게 하는 것이다.
  • Advanced Dynamic Execution
    이 기능을 통해 분기 예측 능력을 향상시키며, 길어진 파이프라인에 대응할 수 있게 된다.
  • Execution Trace Cache/Advanced Transfer Cache
    디코드 단계를 생략할 수 있게 하여 밟아야 하는 파이프라인 단계를 줄여 주는 캐시이다. L1 캐시 메모리보다도 내부에 있어서 일명 'L0 캐시'라고도 부르기도 했었다. 코어부터 네할렘 마이크로아키텍처까지는 없어졌다가 샌디브릿지 때 '마이크로옵(μop) 캐시'라는 이름으로 유사한 구조가 다시 등장하였다.
  • HyperThreading Technology
    펜티엄 4 첫 제품부터 있었던 기술은 아니고 Intel Developer Forum 2001에서 처음 알려진 기술이다. SMT의 일종으로 1코어당 2개의 스레드를 동시에 처리할 수 있었다. 그러나 당시 멀티 스레드로 처리할 수 있는 프로그램이 거의 없고 소프트웨어 개발자들이 아직 그런 개념까지 와닿지 않았을 때라 별로 유용하진 않았다. 이 기술은 나중에 등장한 개량판 P6와 코어 마이크로아키텍처 때는 없어졌다가 2008년 네할렘 마이크로아키텍처에 들어서야 다시 등장하였다.
  • FSB의 쿼드펌핑(Quad Data Rate) 기술 도입으로 버스 속도 증대.
    실제로는 100 MHz로 동작하지만 데이터 전송량은 400 MT/s로 늘릴 수 있었다. FSB 데이터 전송량이 400 → 533 → 800으로 약간씩이 아니게 뻥튀기 되는 이유가 이 쿼드펌핑 때문.
  • SSE2 지원. 프레스캇은 SSE3까지 지원.
    현재는 SSE 계열 명령어가 성능 향상을 넘어 운영 체제에서도 필수적으로 요구하는 명령어 집합이지만 당시엔 SSE를 활용하는 운영 체제는 커녕 응용 프로그램도 거의 없어서 실사용에서 별로 유용하진 않았다. 펜티엄4가 AMD 프로세서보다 벤치마크 테스트 결과값으로만 뛰어났던 이유이기도 하다.

전체적으로 클럭을 올리기 쉬운 구조로 되어 있기 때문에, 3.93 GHz 같은 클럭을 가진 익스트림 모델 같은 것도 나왔다. 그러나 이를 위하여 디코더의 수가 감소하고 파이프라인 깊이에 비례해 각종 레이턴시가 증가하여 IPC가 내려간데다 클럭을 올려도 소비전력 및 이에 따른 발열을 감당할 수 없었기 때문에, 경쟁사의 K8 마이크로아키텍처 기반 프로세서들의 점유율이 높아지는 결과를 내게 된다.

인텔은 장점을 극대화하고자 CPU 이용 효율을 높이기 위해 하이퍼스레딩을 도입하고, 클럭을 더 높이기 위해 공정을 더 미세화하고, 파이프라인 스테이지 개수를 더 늘리며, 더 많은 전력을 인가할 수 있도록 CPU 소켓까지 변경했으며, L2 캐시 메모리 용량까지 더 증설하는 등 무려 6년 동안이나 시도했지만, 동작 전압을 줄여 회로의 동작 속도를 높이는 Dennard Scaling에 한계가 찾아오면서 4 GHz의 벽이 나타나는 바람에 그간 고집을 꺾고 넷버스트를 기반으로 하는 다음 아키텍처들을 취소할 수밖에 없었다. 서버 및 데스크탑 제품군에서는 이렇게까지 장기간 삽질했지만, 모바일 제품군에서는 도저히 써먹을 수 없었기 때문에 일찌감치 포기해서 P6 마이크로아키텍처를 개량해 사용했고, 이 덕에 코어 마이크로아키텍처로 갈아탈 수 있게 됐다.

3. 사용 모델

인텔 넷버스트 마이크로아키텍처
공정/세대
코드명
파이프라인
스테이지
공정 브랜드
윌라멧
(Willamette)
20 0.18µm
(180nm)
셀러론
펜티엄4
노스우드
(NorthWood)
0.13µm
(130nm)
셀러론
펜티엄4
펜티엄4 HT[6]
갤러틴
(Gallatin)
펜티엄4 HT EE[7]
제온
프레스캇
(Prescott)
3190nm셀러론D
펜티엄4
펜티엄4 HT
펜티엄4 HT EE
스미스필드
(SmithField)
펜티엄D
펜티엄XE
시더밀
(Cedar mill)
65nm 셀러론D
펜티엄4
프레슬러
(Presler)
펜티엄D
펜티엄XE

자세한 내용은 인텔 넷버스트 마이크로아키텍처/사용 모델 문서 참조.

4. 여담

인텔은 2003년까지 분기당 170 MHz씩 클럭 주파수를 높여 2005년 4.5 GHz 이상을 달성할 수 있으리라 예상하였으나 2003년 이는 분기당 150 MHz로 수정되어 2005년 4 GHz 달성으로 목표가 변경되었고 2004년 분기당 130 MHz로 수정되었다.
[1] 훗날 샌디 브릿지에 도입된 마이크로옵 캐시는 1.5K µops 크기로 약 6 KB의 명령어 캐시와 비슷한 hit rate를 보이는데, 이를 넷버스트의 trace cache와 비교해 보면 효율이 상당히 좋지 못한 것이 드러난다. 12K µops 크기의 마이크로옵 캐시만으로 기존 16 KB 명령어 캐시의 2배 가량의 면적을 차지하는 데다가 복잡한 trace 생성 회로가 추가로 존재하여 넷버스트 코어의 면적을 늘리는 데 일조하였다.[2] staggered add라 불리는 방식으로, carry chain을 절반으로 쪼개 back to back 레이턴시를 절반으로 줄일 수 있었다. "The processor does ALU operations with an effective latency of one-half of a clock cycle. It does this operation in a sequence of three fast clock cycles (the fast clock runs at 2x the main clock rate) as shown in Figure 7. In the first fast clock cycle, the low order 16-bits are computed and are immediately available to feed the low 16-bits of a dependent operation the very next fast clock cycle. The high-order 16 bits are processed in the next fast cycle, using the carry out just generated by the low 16-bit operation. This upper 16-bit result will be available to the next dependent operation exactly when needed. This is called a staggered add. The ALU flags are processed in the third fast cycle. This staggered add means that only a 16-bit adder and its input muxes need to be completed in a fast clock cycle. The low order 16 bits are needed at one time in order to begin the access of the L1 data cache when used as an address input" (Intel Technology Journal Q1, 2001)[3] 인텔의 용어로는 dispatch[4] 넷버스트에서는 데이터 캐시 접근 시 TLB 접근을 뒤쪽으로 빼 버리고 virtual address와 virtual tag를 빠르게 비교한 다음 데이터를 forwarding하는 방식을 사용하였는데, 이때 speculation을 비활성화하는 경우 TLB 및 physical tag 비교까지 총 4 사이클 소요 후 스케줄러에서 의존 관계에 있는 명령어를 dispatch하여 dispatch에 2 사이클, 레지스터 읽기에 2 사이클이 소요되기 때문에 약 10 사이클의 load-to-use 레이턴시가 발생하게 된다.[5] 넷버스트에서 스케줄러는 cache hit을 가정하고 load 명령어의 2 사이클 뒤에 의존 관계가 있는 명령어를 dispatch 후 명령어 실행 도중 실패가 발생하면 실행 조건이 만족될 때까지 명령어를 계속 재실행(replay)하는데 이에 따라 여러 사이클동안 실행 자원의 낭비가 발생한다. 많은 작업에서는 여러 이유로 큰 영향이 없으나, 일부 작업에서는 speculation의 비활성화로 20% 이상의 성능 향상이 나타났다고 한다.[6] Hyper Threading[7] Extreme Edition