EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 3명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·Sorting Algorithm Animation (2)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

Description of the 'NetBurst' micro-architecture of the Intel Pentium4 Processor
글쓴이: EzDoum 글쓴날: 2002년 04월 21일 오전 11:37
하드웨어



Description of the 'NetBurst' micro-architecture of the Intel Pentium4 Processor
김영휘 (전자공학과 4학년, 9406-007)
강대식 (기계공학과 4학년, 9402-101)
정인창 (산업 시스템 공학부 4학년, 9803-019)
오연경 (수학교육과 3학년, 9936-001)

원문 : A Detailed Look inside the intel Netburst Micro-architecture of the intel Pentium 4 processor ( ftp://download.intel.com/pentium4/download/netburstdetail.pdf)

참고문헌


IA-32 Intel Software developer's manual vol.2 : Instruction set reference

Computer System Architecture / M.Moris Mano / Prentice Hall, 1993


또다른 참조할만한 문서 : The microarchitecture of the Intel Pentium 4 Processor ( http://developer.intel.com/technology/itj/q12001/articles/art_2.htm)

저작도구


the Vim Editor for sgml editing

the jade : OASIS DocBook DTD DSSSL engine of James

the Dia : GNU diagram drawing tool for X/Open Window


이 글은 경상대학교 컴퓨터과학과 3학년 전자계산기 구조론 수업의 리포트로 작성된 글입니다. 이 글은 원문을 상기 4인이 번역한 내용에 참고문헌에서 조사한 내용을 첨가하고, 번역자들의 생각, 혹은 이해를 첨가하는 방법으로 작성되었습니다.



--------------------------------------------------------------------------------

차례
서문
1장. About this document
2장. Introduction
3장. SIMD Technology and Streaming SIMD Extensions 2
3.1절. Description of SSE and SSE2
3.2절. Summary of SIMD Technologies
4장. The NetBurstTM Architecture
4.1절. The Design Considerations of the Intel NetBurstTM Micro-Architecture
4.2절. Overview of the Intel NetBurstTM Micro-architecture pipeline
4.3절. Front End Pipeline Detail
4.4절. Execution core detail
표 목록
4-1. Pentium 4 Processor Cache Parameters
그림 목록
3-1. Typical SIMD Operations
3-2. Registers available to SIMD Instructions
4-1. The Intel NetBurstTM Micro-architecture
4-2. Execution Units and Ports of the Out-of-order Core

--------------------------------------------------------------------------------

서문
인텔의 새로운 IA-32 아키텍쳐 프로세서인 펜티엄 4 프로세서가 기존의 IA-32 프로세서들과 차별되는 특성으로써 인텔 측에서 내세우는 것이 'NetBurst' 아키텍쳐이다. NetBurst 아키텍쳐는 결론적으로 말해서 보다 나은 prefetch 기능과, 분기예측 기능, 또, 가외의 캐쉬와 128비트 레지스터를 제공하는 Streaming SIMD Extension 2(SSE2) 를, 대중에게 보다 어필하기 위해 만들어낸 말인 것 같다. 이 글에서는 펜티엄 4 에서 새로이 소개된 기술인 SSE2 아키텍쳐와, 기존의 펜티엄 3 까지의 프로세서들에 사용된 SSE, SIMD 아키텍쳐들에 관한 내용들을 다루고 있다.

번역의 원문으로 이 글을 선택한 이유는 펜티엄 4 프로세서를 이전의 인텔의 프로세서들과 구분하는 '신'기술의 코어가 SSE2 라고 본 문서 작성자 4인이 생각하기 때문이다.


--------------------------------------------------------------------------------

1장. About this document
The Intel NetBurstTM micro-architecture is the foundation for the Intel Pentium 4 processor. It includes several important new features and innovations that will allow the Intel Pentium 4 processor and future IA-32 processors to deliver industry leading performance for the next several years. This paper provides an in-depth examination of the features and functions the Intel NetBurst micro-architecture


--------------------------------------------------------------------------------

2장. Introduction
많은 혁신적인 특성이 진보하는 동안(예전의 인텔 마이크로-아키텍처 세대에서 소개되어진, "모험적인 실행과는 거리가 멀고", "뛰어난 학문적 실행"을 만족하는), 인텔 펜티엄4 프로세서(인텔 넷버스트 마이크로-아키텍처를 이용한)는 새로운 기술과 가능성을 가지고 재디자인된 복잡한 프로세서이다. 이런 많은 새로운 혁신들과 진보는 프로세서 기술과 회로 설계 기술, 그리고, 이전에는 불가능했던 대량 제조 기술의 발달로 인해 가능해졌다. 그로 인해 구현 가능해진 새로운 마이크로-아키텍처의 특성들이 아래의 장(章)들에서 설명할 것이다.

단일 명령 다중 데이타 기술 (single instruction, multiple-data : SIMD technology)이 발전해 온 세가지 세대 -- SIMD, Streaming SIMD Extension, Streaming SIMD Extension 2 -- 를 각각 소개하면서 이 문서를 시작하겠다. 이 문서의 나머지 부분은 혁신적인 펜티엄 4 프로세서의 동작 원리를, 주로 그 핵심부분인 NetBurst 아키텍쳐와 그 구현 특성에 대한 소개로 채워질 것이다.


--------------------------------------------------------------------------------

3장. SIMD Technology and Streaming SIMD Extensions 2
3.1절. Description of SSE and SSE2
프로세서의 수행 성능을 증가시키기 위한 한 방법은 여러개의 연산들(computations)을 병렬로(in parallel) 수행하는 것이다. 즉, 여러개의 operation 들이 단일 instruction에 의해서 수행되도록 하는 것이다.


--------------------------------------------------------------------------------

3.1.1절. SIMD
이러한 유형의 병렬처리를 구현하기 위한 방법으로는 대표적으로, pipeline 을 이용한 것이 있는데, 이러한 파이프라이닝은 M.J.Flynn 에 의해 소개된 네가지 유형으로 분류하는 것이 일반적이다. Flynn 은 컴퓨터 시스템의 구성을 동시에 처리되는 인스트럭션의 갯수와 데이터 아이템의 갯수에 따라 분류했다. 일반적인 컴퓨터의 operation 은 메모리에서 instruction 들을 fetch 해 와서 그것을 프로세서가 수행(execute)하는 것으로 이루어져 있다. 메모리에 들어이쓴 instruction 들은 instruction stream을 이루고, 또한, 프로세서 내의 데이터를 처리하는 오퍼레이션들이 수행되는 것도 data stream을 이룬다.

병렬 처리(parallel processing)는 소개한 두개의 스트림 중에서 instruction stream을 대상으로 하여 이루어질 수도 있으며, data stream 을 대상으로 하여 이루어질 수도 있고, 또, 그 둘 모두를 대상으로 하여 이루어질 수도 있다. Flynn 은 병렬 처리를 하는 컴퓨터 시스템을 다래의 네가지 주된 그룹으로 분류하였다 :


Single instruction stream, single data stream SISD

Single instruction stream, multiple data stream SIMD

Multiple instruction stream, single data stream MISD

Multiple instruction stream, multiple data stream MIMD

이들 중에서 인텔의 펜티엄 계열의 프로세서에 사용된 유형은 SIMD 방식이다. SIMD 방식의 병렬 처리 방식은 여러개의 프로세싱 유닛이 하나의 컨트롤 유닛의 제어 하에 동시에 동작하도록 설계한 방식이다. SIMD 방식으로 하드웨어를 설계했을 경우, 프로세싱 유닛들은 모두 동일한 instruction 을 제어장치(Control-unit)로부터 전달받아서, 각각 다른 데이터에 대해서 동작을 하게 된다.

보다 구체적인 SIMD 프로세서의 구조 및 동작방식은 각자의 공부할 몫으로 남겨 두기로 하고, 다음 단락으로 넘어가겠다.


--------------------------------------------------------------------------------

3.1.2절. SIMDs of Intel Pentium Processors
그림 3-1은 전형적인 SIMD 연산을 보여준다. 여기에 보여진 각각 짝지워져 묶여진 데이터들인 X1 과 Y1, X2 와 Y2, X3 와 Y3, X4 와 Y4 는 각각 동시에 각각의 프로세싱 유닛에서 실행되는 동일한 operation 인 'op' 에 전달된다. 그리고, 이처럼 동시에 수행된 operation 들의 결과 또한 4개의 데이터 스트림으로 출력(?)된다. 바로 앞 절에서 설명한 SIMD 의 개념과 동일한 이야기가 되겠다.


그림 3-1. Typical SIMD Operations
http://www.ezdoum.com/upload/NetBurst/fig1.gif



그림 3-1에서 보여준 것과 같은 SIMD 연산들은 인텔이 MMXTM 기술을 채택하기 시작한 아키텍쳐인 IA-32 아키텍처를 통해 소개되어지고, 처음 사용되어졌다. 인텔 MMX 기술은 MMX 레지스터 (그림 3-2 참조)라고 불리우는 여덟개의 64비트 레지스터에 담겨진 데이터들을 input data stream 으로 하여 SIMD 방식의 병렬 처리를 할 수 있는 기능을 제공한다.


그림 3-2. Registers available to SIMD Instructions
http://www.ezdoum.com/upload/NetBurst/fig2.gif



인텔의 펜티엄 계열 프로세서가 Pentium III 에 이르렀을 때에 비로소 앞서 소개한 기본적인 SIMD 병렬 연산 기술에 streaming 기술을 적용한 '확장' SIMD -- Streaming SIMD Extenssion : SSE 이라는 방식의 SIMD 기술을 채용하게 된다.

SSE(Streaming SIMD Extension)를 도입하면서, 오퍼랜드들은 네개의 단정도 부동소수점으로 표현된 숫자까지 될 수 있게 확장되었다. 이러한 오퍼랜드들은 메모리에 존재할 수도 있고, 또한 SSE 아키텍쳐에서 새로이 도입된 128비트 크기의 XMM 레지스터들에 저장되어 존재할 수도 있다.(그림 3-2 참조) 또한 SSE 아키텍쳐는 이에 더하여 기존의 64-bit MMX 레지스터들도 사용할 수 있다.

펜티엄4 프로세서는 이에 더하여 보다 확장된 개념의 SIMD 연산 모델인 SSE2 기술을 새로인 선보였다. SSE2의 확장은 메모리나 XMM 레지스터에 있는 operands에 의해 작동한다. SSE2는 배정도의 부동소수점 숫자 데이터들과 128비트 정수형 데이터에서 작동하는 SIMD 연산으로 확장한다. 이러한 SSE2 아키텍쳐를 지원하기 위한 인스트럭션 세트는 144개가 있다. 그 중 몇가지 예를 들면,


DIVPD(Packed double-precision floating point devide),

DIVSD(Scalar double-presision floating point devide),

CVTPI2XXXX 인스트럭션들,

FXRSTOR(Restore x87 FPU, MMX, SSE, SSE2 state),

FXSAVE(Save x87 FPU, MMX, SSE, SSE2 state)

등의 인스트럭션들이 있다. 자세한 내용은 IA-32 Intel architecture software developer's manual vol.2 : instruction set reference manual ( http://download.intel.com/design/pentium4/manuals/24547103.pdf) 을 참조하라.

IA-32 SIMD 기술들의 모든 집합(인텔 MMX 기술, SSE 확장들, SSE2 확장들)은 프로그래머가 packed 64, 128-bit integer, 단일·이중-정밀 부동-소수 operands에서의 연산들을 조합할 수 있는 알고리즘을 발달시킬 수 있는 능력을 가질 수 있게 한다.

이 SIMD 기능은 아래의 특성들을 가지는 작업들인 3D 그래픽의 수행, 음성 인식, 영상(image) 처리, 과학계산, 그리고 멀티미디어 작업들의 수행 능력에 지대한 개선을 가져온다.


본질적으로 병렬 처리가 가능한 특성

규칙적이고 순환하는 메모리 접근 방식의 특징

데이터상에서 수행되는, 어떤 범위에 국한된 순환하는 연산

자료-독립적 통제 흐름


IA-32 SIMD 부동-소수 명령들은 전체적으로 이진 부동-소수 연산을 위해 IEEE 표준 754를 지원한다. 모든 SIMD instruction들은 모든 IA-32 실행 모드 들로부터 억세스할 수 있다 : protected 모드, real 모드, 그리고 가상 8086 모드

SSE2, SSE 확장들과 인텔 MMX 기술은 IA-32 인텔 아키텍처에서의 아키텍처적인 확장들이다. 모든 기존의 소프트웨어는 이러한 기술들로 설계된 IA-32 마이크로 프로세서에서, 그 프로세서가 MMX 기술을 적용하든지, 혹은 SSE 나 SSE2 기술들을 적용하든지에 상관 없이 변화 없이 정확하게 실행된다. 즉, backward-compatibility 가 있다는 것이다. 또한 SIMD 기술들을 이용하는 인스트럭션들을 이용해 만든 새로운 소프트웨어들이 SIMD 유닛들을 이용해서 프로세서에서 동작하고 있는 경우에도 기존의 SIMD 인스트럭션을 사용하지 않은 소프트웨어들이 정확하게 실행된다.

또한 SSE와 SSE2의 인스트럭션 세트는 캐시 사용과 적용 과정을 개선할 수 있는 캐쉬 컨트롤 인스트럭션 세트와 메모리 재배치 인스트럭션 세트를 제공한다.

SSE2명령에 대한 더 많은 정보를 얻기 위한다면, IA-32 Intel architecture software developer's manual Volume1 의 11장과 Volume2 의 3장을 참조하라. 이들 매뉴얼들은 ( http://developer.intel.com/design/pentium4/manuals/에서 구할 수 있다.)


--------------------------------------------------------------------------------

3.2절. Summary of SIMD Technologies
아래 단락은 연대순의 순서(chronological order)에서 IA-32에 추가된 3가지 SIMD기술들(MMX 기술, SSE, SSE2)의 새로운 특징들을 요약한다.


--------------------------------------------------------------------------------

3.2.1절. MMX Technology


64비트 MMX 레지스터의 도입

packed 바이트, 워드, 더블워드 정수에서의 SIMD 연산을 위한 인스트럭션 지원


MMX 명령들은 멀티미디어와 통신 소프트웨어에서 유용한다. MMX 기술에서 더 많은 정보를 얻고자 한다면, IA-32 Intel architecture software developer's manual Volume1을 참조하라. ( http://developer.intel.com/design/pentium4/manuals/에서 구할 수 있다.)


--------------------------------------------------------------------------------

3.2.2절. Streaming SIMD Extension


128비트 XMM 레지스터 도입

4개의 packed 단일-정밀 부동-소수 operands에 의한 128비트 데이터 유형 도입

data prefetch 인스트럭션 제공

일시적이 아닌 store 명령들과 다른 cache 관련 인스트럭션, 메모리 배치 인스트럭션 제공

부가적인 임시의 64비트 SIMD 정수형 지원


SSE 명령들은 3D 기하학, 3D 표현, 음성 인식, 영상 인코딩과 디코딩에 유용하다. MMX 기술에서 더 많은 정보를 얻고자 한다면, IA-32 Intel architecture software developer's manual Volume1을 참조하라. ( http://developer.intel.com/design/pentium4/manuals/에서 구할 수 있다.)


--------------------------------------------------------------------------------

3.2.3절. Streaming SIMD Extension 2


two packed 배정도 부동-소수 오퍼랜드들을 위한 128비트 자료 유형을 추가

16-바이트, 8-워드, 4-더블워드, 또는 2-quadword (모두 128비트의 크기임을 주목하라!) 정수에서 SIMD 정수 연산을 위한 128 비트 자료 유형을 추가

64비트 정수 operands에서의 SIMD 연산을 위한 지원 추가

새로운 자료 유형과 존재하는 자료 유형 사이의 변환을 위한 명령들 추가 : 이러한 인스트럭션은 CVTP... 으로 시작하는 이름을 가진다.

자료 뒤섞음(또는 조작 : data shuffling)을 위한 지원 확장

cacheability와 메모리 배치 연산을 위한 지원 확장


SSE2 명령들은 3D 그래픽, 과학적 처리, 영상 디코딩/인코딩, 암호화에 유용하다.

더 많은 정보를 위해 IA-32 Intel Software Developer's Manual Volume1 을 참조한다. ( http://developer.intel.com/design/pentium4/manuals/에서 다운받을 수 있다.)


--------------------------------------------------------------------------------

4장. The NetBurstTM Architecture
Pentium 4 프로세서 는 intel NetBurst 마이크로 아키텍처라고 불리는 새로운 마이크로 아키텍처가 실현된 첫번째 하드웨어 이다. 이 새로운 아키텍처의 이해를 돕기 위해 아래의 사항들을 세부적으로 살펴보고자 한다.



Intel NetBurst micro-architecture 설계 고려사항

새로운 마이크로-아키텍처를 구성하는 블락(기본 유닛들 : building blocks)

Pentium 4 프로세서의 구현에 근거한 마이크로-아키텍처의 핵심 기능을 하는 유닛들의 동작


Intel NetBurst 마이크로-아키텍처 는 아주 높은 클럭에서 정수와 floating-point의 고속 연산을 수행하기 위해서 디자인 되었는데, 다음과 같은 특징을 가지고 있다 :



높은 클럭을 가능하게 하는 Hyper pipelined technology 와 1 GHZ 이상의 클럭을 낼 수 있는 frequency headroom (반복출력을 가능하게 하는 공간)

단순한 정수 연산을 하는 인스트럭션들의 대기시간을 줄이기 위해 빠르게 수행하는 엔진

높은 수행력과, 400 MHZ Intel NetBurst 마이크로-아키텍쳐 버스 시스템과 연결된 quad-pumped bus interface(4채널 버스 인터페이스)

branch(프로그램 분기) 의 지연을 줄이는 execution trace cache

64 그리고 128 바이트 의 캐시 라인 사이즈

하드웨어 prefetch(프리페치) (역자주 : 프리페치 : 실제 데이터나 인스트럭션이 프로세서에 의해 실행 혹은 사용되기 전에 미리 메모리로부터 fetch 해 오는 동작)

파이프라인의 지연을 최소로 하기위한 치밀한 분기(branch) 예측

parallelism( 병렬계산 ) 을 위한 비순차적 수행( out of order )

병렬계산을 가능하게 하는 superscalar issue

레지스터 name space 의 한계를 극복하기 위한 hardware name remaining.



--------------------------------------------------------------------------------

4.1절. The Design Considerations of the Intel NetBurstTM Micro-Architecture
인텔의 넷버스트 아키텍쳐의 디자인의 목적은


오래된 IA-32 코드 와 높은 프로세싱 속도에서 SIMD 기술에 기초한 애플리케이션을 수행하는 것.

높은 클럭 주파수에서의 수행, 미래에 실현될 보다 더 높은 클럭 주파수와 더 높은 퍼포먼스를 요구하는 사양에서의 수행을 위한 확장 가능성.

이상과 같은 디자인의 목적을 달성하기 위해 Intel NetBurst Micro- architecture 는 Pentium pro processor micro-achitecture 에 비해 향상된 여 러가지 특징들을 가지고 있다.

높은 수행력과 빠른 클락을 위한 Intel NetBurst Micro-architecture 의 디자인시의 주된 고려사항은 아래와 같다.



어떤것은 아주 빠르고 , 어떤 것은 일반 4채널 클락(frequency)프로세스 보다 느린, 즉 다른 클락에서 칩의 부위별 수행으로 높은 클락을 가능하게 하는 deeply pipelined design을 이용한다. 이것들이 1기가 이상의 클락을 성공시키는 것을 가능하게 했다

파이프라인은 반복적으로 수행되는 명령에서 자주 나타나는 일반적인 유형의 인스트럭션 패턴에 대해 최적화 시킴으로써 높은 수행력을 제공한다. 즉, 일반적인 환경에서 가장 자주 나타나는 인스트럭션 혹은 오퍼레이션들 (cache hit 와 같은)은 효율적으로 해석이 되고, 지연이 짧게 수행되는 것을 말한다. 그결과 반복적으로 마주치는 코드의 흐름은 아주 높은 처리량(throughput)을 보여주었다.

Stall penalties(칸막이의 단점?)을 숨기기 위해 많은 기술들이 집약되었다. 병렬처리, 버퍼링 그리고 speculation 중에서도 Intel NetBurst Micro-architecture는 명령들을 동적으로, 비순차적(out-of-order) 으로 수행한다. 그래서 각 명령들을 수행하는 시간은 항상 일정한 것이 아니다. code 의 수행력은 이 코드가 입력될 때 기계의 상태에 따라 아주 다르다.



--------------------------------------------------------------------------------

4.2절. Overview of the Intel NetBurstTM Micro-architecture pipeline
인텔 넷버스트 아키텍쳐의 파이프라인은 세개의 섹션으로 구성되어 있다 :


The in-order issue front end : 순차적으로 실행되는 명령들을 위한 프론트 엔드

The out-of-order superscalar execution core : 비순차적인 superscalar 인스트럭션의 수행코어

The in-order retirement unit


Front end 는 프로그램 순서에 따르는 명령을 비순서적인 core에 제공한다. 이것은 직접 IA-32 명령어를 해석한다. 해석된 IA-32명령어들은 micro-operations(uops)로 번역된다. Front end의 주된 임무는 uops의 지속적인 입력을 원래의 프로그램되어진 순서대로 실행부(the execution core)에 공급해 주는 것이다.

그러면 실행부(the core)는 마이크로 프로세서의 사이클마다(per cycle) 여러개의 uops 을 생성(issue)하고, 적극적으로 uops의 순서를 다시 정렬한다. 그 결과 입력값이 준비되고, 가용한 실행소스가 준비된 uops는 즉시 수행될 수 있다. 회수 섹션(retirement section) 은 uops의 수행이 원래프로그램 순서에 따라 수행되었음을 보증한다. 또한 알맞은 아키텍처 상태가 업데이트 된 것을 보증한다.

그림 4-1은 Intel NetBurst Micro-architecture 파이프라인과 관련된 중요 기능 블럭들의 block diagram을 보여주고 있다. 아래에는 파이프라인의 세 부분(front-end, core, retirement)에 대한 설명을 한다.


그림 4-1. The Intel NetBurstTM Micro-architecture
http://www.ezdoum.com/upload/NetBurst/fig3.gif




--------------------------------------------------------------------------------

4.2.1절. The Front End
Intel NetBurst Micro-architecture 의 front end 는 아래 두 부분으로 구성되어 있다 :


Fetch/decode unit

Execution trace cache

Front end 는 아래의 여러 기본 기능을 수행한다 :

실행될 것 같은 IA-32명령들을 prefetch 한다.

아직 로드되지 않은 명령들을 로드한다.

명령들을 uops로 해석한다.

특수 목적의 코드 와 복잡한 명령을 컨트롤 유닛이 이해할 수 있는 마이크로코드(micro-code)로 매핑한다.

Execution trace cache (실행 추적캐시)로부터 해석된 명령들을 전달한다.

첨단의 알고리즘을 이용해서 분기를 예측한다.

Intel NetBurst Micro-architecture 의 Front end 는 높은 속도와 pipelined 된 마이크로 프로세스에서 공통적으로 발생하는 문제점 중 일부를 해결할 수 있도록 디자인 되었다. 이들 문제들 중 두가지가 특히 프로세스의 수행 속도 지연에 커다란 원인을 제공하는데, 이들 두가지 문제는 다음과 같다.

Target(인스트럭션 레지스터 등)으로부터 페치된 인스트럭션들의 해석을 위한 시간

캐쉬 라인의 중간에서 발생하는 분기 혹은 캐쉬 라인에 있는 곳으로의 분기에 기인한 인스트럭션 디코딩 시간지연으로 인한 instruction-fetch cycle 대역폭의 낭비


execution trace cache 는 해석된 AI-32 명령어들을 저장함으로 발생하는 이런 문제들을 언급한다. 명령들은 번역엔진(TRANSLATION ENGINE)에 의해 로딩되어 해석된다. 번역엔진은 traces 들에 의해 호출되는 uops 순서로 해석된 명령들을 만든다. 이것들은 execution trace cache 에 저장된다. execution trace cache는 uops들을 프로그램 실행흐름 경로로(in the path of program execution flow) 저장한다. 이 경로는 코드에 있어서 분기의 결과가 같은 캐시 라인안에 통합된 경로이다. 이것은 캐시로부터 명령어들의 흐름을 증가시키고, 캐시의 저장공간들을 효율적으로 사용할 수 있게 만든다. 왜냐하면, 수행되지 않거나 분기가 되는 명령들은 저장하지 않기 때문이다. execution trace cache 는 매 클락당 3 uops 를 수행부(core)에 전달할 수 있다.

execution trace cache 와 번역기는 상호 분기 예측 하드웨어(cooperation branch prediction hardware)를 가지고 있다. 분기 타캣(branch target)은 분기 예측 로직을 이용하는 linear address 에 기초해서 예측이 되어지고, 곧 로딩(fetch)이 된다. 분기 타갯이 execution trace cache에 저장이 된다면 execution trace cache 로부터 로딩이 된다, 그렇지 않은 경우 매모리 계층으로부터 로딩이 된다. 번역 엔진의 분기 예측 정보는 가장 가능한 경로를 형성하는데 사용된다.


--------------------------------------------------------------------------------

4.2.2절. The Out-of-order Core
The core 의 비순차적 명령어 처리 능력은 병렬처리를 가능하게 하는데 핵심이다. 이 특징은 명령들을 재정렬하게 한다. 그래서 경쟁하는 자원이나 data를 기다리는 동안 하나의 uops 가 지연된다면, 프로그램 순서에서 나중에 나타날 uops들은 이후에 처리 된다. 그 프로세스는 uops 의 흐름을 원활히 하기 위해 여러 개의 버퍼들을 사용한다. 즉, 다시말하면, 전체 프로세서 파이프라인중에 한 부분이 지연 된다면, 이 지연은 다른 작업 수행을 병렬로 처리함으로써 만회 됨을 의미한 다. 혹은 버퍼에 먼저 들어온 uops를 처리함으로 만회할 수 있다.

여기에서 말하는 지연은 다음과 같은 것이다. The core 는 병령수행을 촉진하 기 위해 디자인되었다. 많은 수학적 논리단위(ALU) 명령들은 매 사이클당 2 개, floating point 명령들은 매 두사이클당 1개를 시작(start)한다. 결국, uops 는 입력들이 준비가 되고, 가용자원이 있을 때 곧바로 비순차적으 로 수행할 수 있다.

대부분의 실행유닛은 매 클럭 사이클마다 하나씩의 새로운 마이크로 오퍼레이션의 실행을 시작할 수 있다. 그래서, 여러개의 인스트럭션들이 동시에 각각의 파이프라인에서 실행중일 수 있다. 또한, ALU 와 관련된 인스트럭션들은 매 사이클에 두개씩 실행이 시작될 수도 있다. 그리고, 다수의 부동 소숫점 인스트럭션은 매 2사이클마다 하나씩 실행된다. 끝으로, 마이크로오퍼레이션들은 그에 오퍼랜드로 필요한 데이터들이나 리소스가 가용할 경우, 순서에 관계없이 실행될 수도 있다.


--------------------------------------------------------------------------------

4.2.3절. Retirement
Retirement section 은 execution core 로부터 실행된 uops의 결과를 받고, 그 결과를 프로세싱한다. 그결과 원래 프로그램의 순서에 따라 적당하게 architectural state 를 업데이터 한다. For semantically-correct execution (의미상으로 올바른 수행은), IA-32명령들의 결과가 제거되기 전(retire) 에 원래 프로그램 순서에 따라 처리 되어야 한다.(committed). 명령들이 retired 되었을 때 예외가 발생할 수 있다. 그러므로, 예외는 이론적 으로 발생할 수 없다. 그것들은 이상과 같은 순서로 발생하므로, 기계는 예외 이후에 알맞게 새로 시작할 될 수 있다.

하나의 uops가 완료되고 결과를 저장할 때, 이것은 retire 된다. 3개 uops 까지 매 사이클에 retire 될 수 있다. 기록 버퍼(ROB) 는 버퍼가 uops 를 완료하고, 순서에따라 아키텍처 상태를 업데이터 하며, 예외(exception)의 순서를 조절하는 프로세서 내부의 단위이다.

Retirement section 역시 분기 정보를 얻어낸다. 그리고 분기 히스토리 (branch history)를 갱신하기위해 Branch Target Buffer(BTB)에 갱신된 branch target information 을 보낸다. 그림 4-1 은 Intel NetBurst Micro-architecture 내부에서 가장 반복적으로 실행되는 패스(pass, 경로) 들을 나타낸다. 예를들면 다중레벨 케시 계층과 상호작용하고, 시스템버스와도 상호작용하는 실행루프 (an execution loop) 이다.

이어지는 내용들에서는 front end 와 execution core 의 수행을 더욱 구체적으로 설명하고 있다.


--------------------------------------------------------------------------------

4.3절. Front End Pipeline Detail
다음에 설명할 front end 의 동작에 대한 내용은 프리페칭 기능과 분기 예측, 실행 추적캐쉬(execution trace cache)들의 동작과 관련된 소프트웨어들의 튜닝에 많은 도움이 될 내용이다.


--------------------------------------------------------------------------------

4.3.1절. Prefetching
Intel NetBurst micro-architecture는 다음의 3가지 Prefecthing 구조를 지원한다.


첫째, instruction 전용

둘째, 데이터 전용

셋째, instruction 및 code 공용


첫 번째 것은 자동적으로 명령어를 불러오는 하드웨어 명령어 페처(fetcher)이다. 두 번째의 것은 prefetch instruction을 사용하여 캐쉬안에 있는 데이터를 가져오는 소프트웨어 제어 구조이다. 세 번째는 단일화된 두 번째 레벨의 캐쉬에서 명령어와 데이터를 자동적으로 가져오는 하드웨어 구조이다.

하드웨어 인스트럭션을 페치하는 유닛은 BTB 에 의해 예견된 경로에 있는 인스트럭션을 인스트럭션 스트리밍 버퍼에 읽어들인다. 데이터는 타겟 어드레스에서 시작하여 32바이트를 단위로 하는 하나의 청크(chunk)의 단위로 읽혀진다. 두 번째와 세 번째 구조는 뒤에 나올 Data Prefetch 섹션에서 자세히 다루도록 한다.


--------------------------------------------------------------------------------

4.3.2절. Decoder
Intel NetBurst micro-architecture의 프론트 엔드(front end)는 단위 클럭 (clock)당 디코딩 할 수 있는 최대 명령어 디코딩 율의 속도로 인스트럭션들을 디코딩 해 낸다. 복잡한 인스트럭션의 해석은 마이크로코드 롬(microcode ROM)의 도움을 받아야만 한다. 디코더의 동작은 다음에 설명하는 실행 추적 캐쉬(Execution Trace Cache)와 관련된다.


--------------------------------------------------------------------------------

4.3.3절. Execution Trace Cache
실행 추적 캐쉬(execution trace cache : TC)는 인텔 넷버스트 마이크로 아키텍처의 주요한 명령 캐쉬이다. TC 는 디코드된 IA-32명령어 혹은 마이크로 오퍼레이션을 저장한다. 이것은 branch 미선언으로 명령어를 번역하는 템플릿 제한과 extra latency등과 같은 자주 실용되는 코드의 디코딩 손실을 줄인다.

펜티엄 4 프로세서 임플리멘테이션에서, 추적캐쉬는 12K μops로 유지되고, 단위 클럭당 3 μops를 전달할수 있다. 추적캐쉬는 실행코드에서 실행되기위핸 필요한 모든 μops를 유지할 수는 없다. 어떤 경우에는, 추적 캐쉬에 저장된 μops trace대신에 실행 코어가 마이크로 코드 플로(flow)를 실행하기 위해 필요할 수 있다.

펜티엄 4 프로세서는 추적 캐쉬로부터의 가장 빈번이 사용되는 IA-32명령어를 충분히 그리고 계속해서 최대한 활용한다. 그 반면에 마이크로코드 롬과 관련된 명령어는 사용을 자주 하지 않는다.


--------------------------------------------------------------------------------

4.3.4절. Branch Prediction
브랜취 프리딕션은 정교하게 파이프라인된 프로세서의 실행에서 가장 중요하다. 브랜취 프리딕션은 프로세서가 브랜취 결과가 확실한값을 갖기 전에 명령어를 시작하게 할수 있게한다. 브랜취 딜레이(Branch Delay)는 정확한 선언이 일어나지 않았을 때 일어나는 패널티(Penalty)이다. 펜티엄 4 프로세서의 경우, 정확하지 않은 명령어의 선언으로 인한 프렌취 딜레이는 zero clock cycles만큼의 적은 값을 가질수 있다. 잘못선언된 브렌취의 경우 브렌취 딜레이는 많은 싸이클을 가질수 있다. 일반적으로 이것은 파이프라인의 깊이와 상응한다.

인텔 넷버스트 마이크로 아키텍쳐에서 브렌취 선언은 조건부,비조건적 Call & Return과 비방향 브렌취(indirect branch)를 포함하는 모든 주위 브렌취 선언한다. 이것은 예를 들어, far calls, irets와 소프트웨어 인터럽트와 같은 far transfer를 선언하지 않는다.

덧붙여, 좀더 정확한 브렌취를 선언하고, 브렌취를 갖기위한 손실을 줄임을 돕기위해 여러 가지 구조가 구현된다.


BTB(branch tatget buffer)를 사용하여 명령어의 선형 주소에 근거를 두어 브렌취의 방향과 목표를 동적으로 선언한다.

만약 동적 선언을 활용할수 없거나, 혹은 잘못 선언되었다면, 타겟의 옵셋에 근거를 두어 결과를 정적으로 선언한다.

리턴 어드레스는 16-entry return addrdss stack를 사용하여 선언한다.

명령어의 추적은 프렌취 패널티를 피하기 위해 선언된 취해된 브렌취에 거쳐 만들어진다.


The Static Predictor 일단 브렌취 명령어가 번역되면, 브렌취의 방향(전방 혹은 후방)을 알 수 있다. 만약 브렌취에 대한 BTB에서 정확한 입력이 없다면, static predictor가 브렌취의 방향에 근거하여 선언한다. loop-closing 브렌취 같은 static prediction 구조는 후방 조건적인 브렌취를 선언한다. (음의 변위를 갖는) 전방으로 선언된 브렌취는 취하지 않는다.

Branch Target Buffer 일단 브렌취 히스토리를 활용하면, 펜티엄 4 프로세서는 브렌취 명령어가 번역되기 전에 previously-encountered 브렌취의 히스토리에 근거하여 브렌취 결과를 선언할 수 있다. 그것은 브렌취 히스토리 테이블과 공동적으로 BTB라고 불리는 브렌취 타켓 버퍼를 명령어의 선형주소에 근거하여 브렌취의 방향과 목표를 선언하기 위해 사용한다. 일단 브렌취가 소멸되면, BTB는 목표의 주소를 업데이트 한다.

Return Stack 리턴은 항상 사용하지만, 순서가 여러개의 콜(Call) 위치에 좌우되기 때문에, 단일 선언된 타켓은 충분하지 않다. 펜티엄 4 프로세서는 순서 호출의 씨리지를 위한 리턴 주소를 선언할수 있는 리턴 스택을 가지고 있다. 콜함수를 포함하는 언롤링 루프의 이익을 증가시킨다. 이것은 또한 프로시져 콜 오버헤드의 리턴 패널티 부분을 경감시키기 때문에 어떤 함수를 inline 으로 선언해야하는 필요를 완화한다.

비록 브렌취의 방향과 주소가 미리 정확하게 선언되었다고 하더라도, 일반적인 프로세서에서의 활용할수 있는 병렬처리를 취해진 브렌취는 경감할수 있다. 이것은, 만약 브렌취가 라인 끝에 없거나, 타겟이 라인에 시작하지 않으면, 디코드 대역폭(bandwidth)이 즉각적인 브렌취 흐림이나 타켓 수행의 명령어를 낭비하기 때문이다.


--------------------------------------------------------------------------------

4.3.5절. Branch Hints
펜티엄 4 프로세서는 그들의 실행을 향상시키기 위해 trace formation hardware와 브렌취 선언을 위한 힌트를 제공하는 소프트웨어를 허락하는 특징을 제공한다. 그러한 힌트는 조건적인 브렌취 명령어에 접두사 형태를 취한다. 그러한 접두사는 pre-펜티엄 4 프로세서 임플리멘테이션에 영향을 주지 않는다. 방향성의 힌트는 BTB 선언을 활용할수 없는 경우 정적인 선언(forward-taken, backward-not taken)를 무효로 한다.

브렌취 힌트는 코드 크기를 약간 증가시키기 때문에, 코트 정렬에 의한 방향성의 힌트를 제공하는 preferred approach는


있을수 있는 전방 브렌취가 not-taken 경로에 있어야 하고,

있을수 있는 후방 브렌취가 taken 경로에 있어야한다.

추적이 일어났을 때, 활용할 수 있는 브렌취 선언 정보는 코드가 사용되는 동안 경로와 추적을 선언하기 위해 사용하고, 방향성의 브렌취 힌트는 가장 비슷한 경로를 따라 추적하는 것을 도울 수 있다.


--------------------------------------------------------------------------------

4.4절. Execution core detail
익스큐션 코어는 가장 효율적인, 가장 일반적인 경우를 조작함으로써 전체적인 실행을 극대화 하기 위해 디자인된다. 하드웨어는 가능한한 가장 빠르게 가장 일반적인 상황에서 가장 자주 사용되는 오프레이션을 실행하기 위해 디자인되고, 드문 경우의 드문 오프레이션의 손실을 줄이기 위해 디자인된다. 코어의 어떤 부분은 더 빠른 실행을 위해 일반적인 조건을 찾을수 있다. 만약 그렇지 않으면, 기계는 멈춘다. 이것의 예를 들면, 발송(forwarding)을 저장하는 것이다. 만약 로드가 스토어에서 독립적으로 선언이 되면, 그것은 스토어로부터 데이터를 가져오고, 임시로 처리한다. 만약 로드가 스토어에 의존적인 것이 아니라면, 로드는 실제 데이터가 메모리 로부터 불려질때까지 딜레이 되고, 그 다음 수행된다.


--------------------------------------------------------------------------------

4.4.1절. Instruction Latency and Throughput
어긋난 코어인 슈퍼스칼라는 μops 병렬처리로 다중실행할수 있는 다중 실행 하드웨어 리소스를 포함한다. 활용 가능한 병렬처리를 사용할 수 있는 코어의 능력은 다음에 의해 향상될 수 있다.


4μops보다 적은 번역된 IA-32 명령어나 보다 짧은 지연을 가지는 IA-32명령어를 선택함

최소화된 긴 의존의 체인과 긴 명령어 지연은 커버링함으로써 활용할수 있는 병렬처리를 유지하기 위해 IA-32 명령어를 명령함

스케쥴러에 도착했을 때, 오프랜드가 준비되고, 그것에 상응하는 이슈 port와 실행 단위를 자유롭게하는 명령어를 명령함


이 하위 부분은 명령어 실행하는 순서의 기본을 형상하는 port 제한, 결과지연과 이슈지연 (소위 처리량이라 불려지는)을 설명한다. 그 스케줄링은 명령어가 프로세서의 코어로 나타내어지는 방법에 영향을 미친다. 그러나 ever-changeing machine state와 더 빠른 실행을 위한 명령어를 재수행하는 것 혹은 그것을 지연시키는 것을 재실행하는 실행 코어이다. 따라서 인스트럭션의 명령은 하드웨어에 더욱 제안적이다.

인텔 펜티엄 4 프로세서 최대화된 참조 매뉴얼은 그러한 경우와 관련된 지연, 이슈 결과, 관련된 실행 단위에 관해 IA-32 명령어를 기록하고 있다. 단위 클럭당 1보다 적은 결과와 연석적인 싸이클의 신속한 처리를 하지 못하는 약간의 μops 처럼, 어떤한 실행 단위는 파이프 라인되어 있지 않다.

각각의 명령어와 관련된 μops는 명령어는 생성하기 위한 선택에 기본을 제공한다. 특히, 마이크로 롬 없이 실행된 μops는 extra overhead를 수반한다. 펜티엄 2와 3 프로세서의 경우는, 디코더의 실행을 극대화 하기 위해,(1μops를 가지는 두 명령어 각각은 4μops을 가지는 명령어를 따른다) 그리고, 각 IA-32 명령어의 μops 수를 파악함으로써 4-1-1 시컨서에 주시한다. 이것은 또한 매우 중요하다. 펜티엄 4 프로세서의에서, 디코더 템플릿은 문제가 아니다. 따라서, IA-32 명령어의 μops 정확한 파악에 대한 자세한 목록이 더 이상 필요하지 않다. 일반적으로 4 혹은 보다 적은 μops로 구성되는 IA-32명령어를 사용은 명령어 의 선택을 돕기 위해 인텍 펜티엄 4 프로세서의 극대화 참조 매뉴얼에 제공한다.


--------------------------------------------------------------------------------

4.4.2절. Execution Units and Issue Ports
각각의 사이클마다 execution core 는 마이크로 오퍼레이션들을 하나 혹은 그 이상의 'issue port' 로 디스패치한다. 마이크로 아키텍쳐 레벨에서 store 오퍼레이션들은 두가지 부분으로 나뉘어지게 된다. 그 두가지 부분이란, 데이터를 저장하는 오퍼레이션과, 주소를 저장하는 오퍼레이션이다. 아래의 그림 4-2 에 여러가지 마이크로 오퍼레이션이 디스패치되어서 각각의 실행 유닛으로 분배되거나 load 혹은 store 오퍼레이션을 수행하게 되는 4개의 'port' 를 보였다. 어떤 포트는 매 클럭당 두개의 마이크로 오퍼레이션을 디스패치해 낼 수 있는데, 이는, 해당하는 마이크로 오퍼레이션을 실행하는 유닛이 클럭 스피드의 두배의 속도로 마이크로 오퍼레이션을 수행할 수 있는데에 기인한다. 그리고, 이러한 류의 execution unit 은 'double speed' 라고 특별히 표시된 실행 유닛이다.


그림 4-2. Execution Units and Ports of the Out-of-order Core
http://www.ezdoum.com/upload/NetBurst/fig4.gif



Port 0. fetch-execution cycle 의 전반부에 관련되었을 때, 포트 0 는 하나의 부동 소수점 숫자의 move 연산을 수행하는 마이크로 오퍼레이션이나 혹은 하나의 ALU 와 관련된 마이크로오퍼레이션을 수행할 수 있다. 사이클의 후반부에 관련되었을 때에는, 포트 0 은 ALU 와 관련된 마이크로 오퍼레이션 하나를 수행할 수 있다.

Port 1. 사이클의 전반부에서는 포트 1 은 부동 소숫점의 move 를 제외한 마이크로 오퍼레이션이나 혹은, 일반적인 정수의 곱셈, 시프트, rotate 와 같은 동작을 수행하는 마이크로 오퍼레이션 혹은 산술, 논리, 브랜치의 ALU 연산을 수행하는 마이크로 오퍼레이션을 수행할 수 있다. 후반부에서는 역시, 전반부와 흡사한 ALU 와 관련된 마이크로 오퍼레이션을 수행할 수 있다.

Port 2. 포트 2 는 매 사이클마다 하나의 load 오퍼레이션을 디스패치하는 기능을 수행한다.

Port 3. 포트 3 은 매 사이클마다 하나의 store 오퍼레이션을 디스패치하는 기능을 수행한다.

따라서 이러한 기능들을 지원하는 포트들 4개를 고려한다면, 최종적으로 결정되는 사이클당 실행되는 마이크로 오퍼레이션의 bandwidth 는 0개 에서 최대 6개 까지가 된다. 각각의 파이프라인은 여러개의 execution unit 을 포함하고 있다. 마이크로 오퍼레이션들은 그 유형에 적합한 파이프라인으로 디스패치된다. 예를 들어서, 정수형 숫자의 산술 연산을 하는 유닛과 부동 소숫점 연산을 하는 유닛은 하나의 파이프라인을 공유할 수 있는 것이다.


--------------------------------------------------------------------------------

4.4.3절. Caches
인텔 NetBurst 마이크로 아키텍쳐는 최대 3레벨까지의 온칩 형태의 캐쉬를 제공한다. 그들 중 펜티엄 4 프로세서에는 두개의 레벨만 구현되어 있는데, 이것은 데스크탑 환경을 위한 것이다. 레벨 1 캐쉬는 프로세서에서 execution core 와 가장 가까운 곳에 구현되어 있는데, advanced 레벨 1 캐쉬로써, 동작한다. 이 캐쉬는 인스트럭션과 데이타를 위해서 분리된 캐쉬 영역을 따로 마련하고 있는데, 즉, 레벨 1 데이터 캐쉬와 트레이스 캐쉬가 그것이다. 이것들이 레벨 1 캐쉬를 구성하는 것이다. 다른 레벨의 캐쉬들은 모두 데이타와 인스트럭션을 구분하지 않고 저장하도록 사용되고 있다. 캐쉬들의 레벨은 상호 '포함적'이지 않다. 즉, 캐쉬의 라인 하나가(64바이트) 레벨 i 캐쉬에 속하면서, 동시에 레벨 i+1 에도 속하는 일은 없다는 뜻이다. 다시 말해서 mutual exclusive 하게 구현되어 있다는 뜻이다. 모든 캐쉬들은 의사LRU(pseudo-LRU : least recently used) 알고리즘을 바탕으로 설계되어 있다. 아래의 표 4-1 은 모든 캐쉬 레벨들의 파라미터들을 나열해 두었다.


표 4-1. Pentium 4 Processor Cache Parameters

Level Capacity Associativity (ways) Line Size (bytes) Access Latency (clocks), Integer/floating-point Write Update Policy
First 8KB 4 64 2/6 write through
TC 12K u-ops N/A N/A N/A N/A
Second 256KB 8 128 7/7 write back


레벨 2 캐쉬의 데이터 미스는 시스템 버스 인터페이스로부터 메모리 서브 시스템으로의 버스 트랜잭션을 발동시킨다. 시스템 버스 인터페이스는 scalable bus clock 을 이용하여 매우 효과적인 스피드를 달성해 내는데, 이 스피드는 scalable bus clock 의 네배의 속도가 된다. 이 버스는 프로세스 사이클 12번의 시간동안 버스의 내용을 프로세서 내부로 가져오고, 또한, 버스 congestion(포화)이 일어나지 않을 경우, 6 - 12 사이클동안의 시간에 메모리를 액세스할 수 있다. 각각의 버스 사이클은 프로세서의 명령어 실행 사이클에 비해서 몇배는 느리다. 프로세서 클럭 스피드와 scalable bus 클럭 스피드의 비율을 'bus ratio' 라고 불나. 예를 들어서, 100MHz 의 클럭 주파수를 가지는 버스의 사이클은 1.5GHz 의 클럭 스피드를 가지는 프로세서의 프로세서 사이클에 비해서 15배 느리다고 생각하면 된다. 버스의 속도는 구현하기에 따라 달라지기 때문에, 주어진 특정 시스템에 대한 자세한 내용은 해당 제품의 스펙을 참조해야 할 것이다.


--------------------------------------------------------------------------------

4.4.4절. Data Prefetch
펜티엄 4 프로세서의 파이프 라이닝을 통한 streaming SIMD(Single Instruction Multi Data)의 구현에 결정적으로 중요한 것이 바로 이 Data Prepatch 와 Instruction Prepatch 인데, 그 중 데이터의 prepatching 과 관련된 메커니즘을 알아 보도록 하자. 펜티엄 4 프로세서는 데이터를 prepatch 하기 위한 두가지 메커니즘을 가진다. 하나는 software-controlled prepatch 이고, 또 하나는 automatic hardware prepatch 이다.

먼저, software controlled prepatch 는 SSE(Streaming SIMD Extension) 를 위해 제공되는 인스트럭션을 이용하여 가능하게 된다. 이들 instruction 들은 캐쉬 라인에 들어갈 데이터를 캐쉬 구조의 적절한 레벨에 미리 패치해 넣는데에 있어서 '힌트'의 역할을 한다. 그러나, 이러한 프리패칭 코드를 사용하면 SMP 등의 멀티 프로세서 시스템에서 심각한 데이터 inconsistency 를 초래할 수 있으므로 주의해서 사용해야 할 것이다.

software controlled 프리패치 방식은 몇가지 상황에서 상당히 이로운 점들을 제공해 준다. 그러나, 다른 상황에서도 반드시 그러하다는 보장은 없다. software controlled 데이터 프리패치 방식으로부터 잇점을 얻을 수 있는 상황은 다음과 같다.


메모리에 접근하는 오퍼레이션들이 프로그래머로부터 메모리의 속도를 감출 수 있는 경우

현재 실행되고 있는 라인의 뒤에 있는 캐쉬 라인들이 몇개나 되는지에 대한 정보를 정확히 알 수 있는 경우

사용될 프리패치의 타입을 적절하게 선택할 수 있는 경우. 소프트웨어 프리패치에는 네가지 타입이 있는데(지원되는 인스트럭션이 4개이다), 이들은 각각 프로세서 구현 방식에 따라 업데이트 되는 캐쉬 레벨이나, 수행성능의 특성 등에서 각각 상이한 동작을 보인다. 예를 들면, 프로세서는 데이터를 프로세서 코어에서 가장 가까운 캐쉬레벨로 돌려줌으로써만 일시적이지 않은 캐쉬를 구현할 수 있다든지 하는 것이다. 이러한 접근 방법은 다음과 같은 효과를 가진다 :


다른 캐쉬 레벨들에 있는 임시 데이터들에 가해지는 장애를 최소화한다.

칩 외부의 캐쉬에 접근해야 하는 필요성을 최소화 한다.



software controlled 프리패치 방식이 불리할 수 있는 상황은 다음과 같다.


밴드위쓰가 이미 제한되어 있는데도 불구하고, 프리패칭이 밴드위쓰의 요구량을 늘이려고 시도하는 경우.

너무 앞선 프리패치는 미리 패치된 캐쉬 데이터를 실행 유닛이 실행하거나 혹은 데이터를 사용하기도 전에 캐쉬의 내용이 다른, 보다 시급한 데이터에 의해, 캐쉬에서 퇴출(?)될 수도 있다.

프리패치 방법에 의해 미리 캐쉬된 내용이 실제로 사용될 수 있는 유용한 위치에 놓여질 가능성은 희박하다. 프리패치는 프로세서의 리소스를 소모하며, 너무 많은 프리패치는 프로세서의 효율성을 감소시키는 효과를 가질 수 있다. 이러한 경우의 예는 루프 내에서 참조되는 변수를 루프 바깥 에서 사용하기 위해 미리 프리패치 하는 경우이다. 이럴 때에는 심중팔구 프리패치된 데이터는 쓸모가 없어지게 된다.

automatic hardware 프리패치는 펜티엄 4 프로세서의 새로운 특성이다. 이러한 방식은 캐쉬 라인들을 앞전의 참조 패턴들에 근거한 통합된 2차 캐쉬라인에서 사용가능하게 해 준다.

소프트웨어와 하드웨어 프리패치의 장/단점 비교 : 소프트웨어 프리패치는 다음과 같은 특성을 지닌다 :


정형화 되어 있지 않은 접근 패턴들을 다룰 수 있다. 하드웨어 방식은 이러한 정형화되지 않은 접근 패턴을 인지할 수 없다.

짧은 배열 등의 프리패치를 다루면서, 하드웨어 프리패치가 회로를 발동시키는데 걸리는 딜레이를 피할 수 있다.

새로이 작성되는 코드에 첨가되어야 효과를 발생한다. 이러한 인스트럭션이 포함되어 있지 않은 기존의 코드는 이 방식을 사용할 수 없다.

하드웨어 프리패치는 다음과 같은 특성을 가진다.

기존의 코드와도 호환성을 가지며 동작한다.

정형화된 액세스 패턴을 요구한다.

하드웨어 프리패칭 서킷이 초기화되고 발동되는데 다소의 시간이 걸린다. 그래서, 매우 적은 길이의 배열과 같이 적은 데이터를 액세스하는데 사용된다면, 필요없는 캐슁까지 해버릴 수 있다. 그러나, 소프트웨어 프리패치는 이러한 경우를 페치 밴드위쓰를 사용하여서 최적화하여 프리패치를 할 수 있다. 그러나 이러한 비효율성은, 만약 보다 긴 배열을 액세스한다면, 사라지게 된다.

인스트럭션과 issue port 의 대역폭 오버헤드를 감소시킨다.



--------------------------------------------------------------------------------

4.4.5절. Loads and Stores
펜티엄 4 프로세서는 메모리 접근 연산의 실행 속도를 높이기 위해서 다음의 기술들을 사용한다.


주의깊은 load 인스트럭션의 실행

load 와 store 연산들의 순서를 고려한 load 인스트럭션들의 재배치

multiple outstanding misses (번역이 참 애매합니다. -_-)

write 버퍼링

store 와 연관되는 load 데이터들의 포워딩 (?)


메모리 연산의 실행이 주어진 대역폭(bandwidth)과 프로세서의 버퍼 리소스의 한계를 넘어서지 않도록 함으로써 괄목할 만한 프로세서의 퍼포먼스 향상이 이루어진다. 하나씩의 load 와 store 연산은 매 사이클 마다의 메모리 포트의 예약 상태를 발생시킬 수 있는데, 이러한 메모리 포트 예약 상태(reservation station ?)를 적절히 처리하기 위해서는 해당하는 메모리 연산과 관련된 버퍼가 필요하다. 펜티엄 4 프로세서에서는 48개의 load 연산을 위한 버퍼와 24개의 store 연산을 위한 버퍼가 마련되어 있어서 메모리 접근과 관련된 오버헤드를 줄였다. 이 버퍼들은 해당하는 인스트럭션의 실행이 완료될 때까지 마이크로 오퍼레이션과 주소 정보를 가지고 있다가, 인스트럭션이 실행되면, 가지고 있던 정보를 invalidate 시킨다.

펜티엄 4 프로세서는 메모리 오퍼레이션들의 실행을 실행되는 각각의 인스트럭션의 순서에 따라서 재배치 하는 기능을 가지고 있다. load 연산은 매우 주의해서(speculatively?)실행되는데, 즉, 모든 선행하는 branch 연산이 모두 해석된 다음에야 실행이 되는 것이다. 그러나 이러한 방식의 load 는 페이지 폴트 예외상황을 발생시키지 못한다.(?) 이처럼 load 연산을 재배치 하는 것은 다음번 로드의 로드 미스 발생을 방지할 수도 있다. 다른 주소를 액세스하는 load 나 store 연산을 고려한 load 의 재배치는 보다 나은 병렬처리를 가능하게 해 준다. 즉, 프로세서가 입력이 준비되었을 때 보다 많은 연산을 즉시에 처리하도록 하여 준다는 것이다. 반면, 메모리에 쓰기 동작을 수행하는 것은, 프로그램의 consistency 를 보장하기 위해서 load 와는 달리, 프로그램에서 쓰여진 순서대로 실행된다.

load 연산의 수행에 있어서의 캐쉬 미싱은 다른 load 연산들의 수행에는 아무런 영향을 미치지 않음을 주지하라. 펜티엄 4 프로세서는 최대 네개까지의 load 연산들의 캐쉬 미스를 메모리를 통해서건, 캐쉬를 통해서건 처리할 수 있도록 설계되었다.

store 연산에 사용되는 버퍼들은 프로세서가 인스트럭션을 수행함에 있어서 메모리 혹은 캐쉬에 쓰기가 완료되기까지 기다릴 필요 없이 계속 인스트럭션을 수행할 수 있도록 하여 준다. 메모리 쓰기를 수행하는 인스트럭션들은 일반적으로 의존성 체인(dependency chain)의 실행 경로에 크리티컬하지 않은 것들이다. 따라서, 종종 메모리 쓰기 동작을 보다 효율적인 메모리 액세스 버스 사이클이 활성화 되는 시기까지 늦추는 것이 효율적이다.


--------------------------------------------------------------------------------

4.4.6절. Store forwarding
load 연산들은 보다 앞에 출현한 store 연산들이 load 가 수행되어야 할 동일한 linear address 에의 수행이 아니라면, 그 store 연산보다 먼저 수행되어도 상관이 없다. 만약 그러한 두개의 load 와 store 연산이 동일한 linear address 를 타겟으로 실행되는 것이라면, 그러한 load 연산은 store 가 데이터를 메모리에 쓰기까지 기다린 다음에 수행되어야 한다. 그러나. store forwarding 기법을 사용한다면, 그렇게 기다릴 피룡가 없어진다. store 에 의해서 수행될 데이터들은 곧바로 load 연산으로 포워드되어지기 때문인데, 이러한 것은 아래의 조건이 만족할 때 이루어지게 된다.


순서 : 로드에게로 포워드 될 데이타가 프로그램 상에서 보다 빨리 출현해서 이미 실행이 된 store 에 의해 생성된 것일 때

크기 : 로드되는 주소의 바이트들이 store 되는 데이터의 서브셋일 때 (작거나 같을 때 : bytes of loaded data <= bytes of stored data)

배열 : store 데이터가 캐쉬라인의 경계를 초과할 때, 그리고 load의 linear address도 그와 같을 때

  • 첨부 파일: TheMicroarchitectureofthePentium4Processor.pdf TheMicroarchitectureofthePentium4Processor.pdf (224 KiB(229,671 Bytes))

  • 관련 링크
  • [분류: 하드웨어 인쇄용 페이지 본문 email로 보내기 ]

    <  PC Processor Microarchitecture | 응용프로그램 속도 올리기!!  >

    답장 쓰기
    글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

    검색
    Google

    분류
    ·공지 (6)
    ·인터넷 (87)
    ·하드웨어 (260)
    ·C/C++ (65)
    ·어셈블리 (7)
    ·리눅스 (136)
    ·리눅스 커널 (67)
    ·윈도우즈 (25)
    ·데이터베이스 (20)
    ·보안 (16)
    ·.NET (25)
    ·그래픽 (13)
    ·책소개 (42)
    ·호기심 천국 (80)
    ·잡담 (111)
    ·사랑 (3)

    전체 본문수: 963
    전체 답장수: 525


    분류 : 하드웨어
    최근글
    최근글
    가장 많이 읽은 글
    ·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
    뜨거운 감자
    ·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

    EzDoum투표
    이지도움 어때요?
    이게 뭐야. 다시 안올란다. --;
    아이 좋아라~ +_+;
    관심없다.
    먼가는 있는거 같은데 뭐하는 곳이지?
    기타 (자유게시판에 글로 남겨 주세요)
    [ 결과 | 투표 ]

    랜덤 링크
    http://kldp.net


     Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
     Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum