tgool
Tgool
tgool
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Science
      • AI
      • Data Mining
      • ML(Machine Learning)
    • Computer Science
      • 자료구조
      • 알고리즘
      • 시스템 프로그래밍
      • 운영체제
      • 컴퓨터 구조
      • 컴퓨터 네트워크
      • 데이터 베이스
      • 파이썬
      • 자바
      • 아두이노
    • Math
      • 통계학
      • 확률론
      • 선형대수학
      • 수리통계학
      • 회귀분석
    • TOFEL
    • Git
    • Plan
    • Book
    • Working out
      • 영양과 생활
      • 운동 정보
      • 운동 기록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
tgool

Tgool

[CSAPP] 4.4 General Principles of Pipelining
Computer Science/컴퓨터 구조

[CSAPP] 4.4 General Principles of Pipelining

2023. 3. 1. 20:15

학습 주제

파이프라인

정리한 내용

4.4 General Principles of Pipelining

  • 파이프라인 시스템의 일반적 특징과 원리들을 알아본다.
    • 파이프라인 시스템에서 수행해야 할 일 은 여러 개의 단계의 연속으로 구성된다.
    • 아래 나올 비유에서 “고객”은 instruction이다.
    • 단계들은 instruction 실행의 일부분을 수행함을 기억하고 이해하기.
    • 식당에서 샐러드를 먼저 제공하고, 메인 음식, 디저트, 그리고 음료의 순으로 제공하는 것과 유사하다.
    • 다음 순서가 시작하기 전에 한 고객이 처음부터 끝까지 전체의 과정을 홀로 수행 하는 것이 아닌, 여러 고객이 한번에 시스템을 통해 진행할 수 있다.
    • 전통적인 식당의 줄 처럼, 고객은 일부 음식만을 원할지라도 모든 단계를 통과해 가야한다. (학교와 군대에서 배식 받는 것처럼. 일정한 간격을 두고 앞 사람이 반찬을 퍼고 이동하면 다음 사람이 그 반찬을 펄 수 있다.)
  • 파이프라인의 주요 특징
    • 처리량 증가(상단의 비유로 단위 시간당 처리하는 고객의 수 증가)
    • 지연 시간 증가(고객에게 서비스를 제공하는데 걸리는 시간)
    • 왜냐하면, 파이프라인이 아닌 일반적인 시스템에서 한 고객이 디저트를 원한다면 바로 디저트 단계로 접근하면 된다.
    • 반면, 파이프라인 시스템에서 한 고객이 디저트를 원해서 바로 디저트 단계로 간다면(새치기) 다른 고객의 분노를 살 위험이 있다.

4.4.1 Computational Pipelines

  • 아래 그림은 간단한 파이프라인이 아닌 일반 하드웨어 시스템의 예시이다.
  • 계산을 수행하는 일부 로직으로 구성되고 계산 결과는 레지스터에 저장된다.
  • 클럭 신호는 규칙적인 시간 간격으로 레지스터에 로딩되는 것을 제어한다.
  • I1, I2, I3는 instructions이고 한 instruction이 완료가 돼야 다음으로 진행 가능하다. 그리고 instruction들은 겹쳐지지 않고 서로 수직적이다.
  • 비파이프라인의 시스템의 예시로 Compact Disk(CD)가 있다.
  • 일련의 과정으로 로직은 CD표면에서 읽은 비트를 디코딩하여 오디오 신호를 생성한다.

  • 현대 논리 설계에서 회로 지연(instruction 소요 시간 or 로딩 시간)을 picosecond(ps) 또는 10^-12 초로 표현한다.
  • 위의 예시에서 조합로직은 300ps, 레지스터 로딩은 20ps를 필요로 한다고 가정하자.
  • Throughput(처리량)을 계산하는 방법은 아래 그림과 같다. (1/320 * 1000)

  • 처리량은 초당 giga-instruction 단위 또는 초당 수십억 개의 명령으로 표현된다.
  • latency(지연 시간)이란 단일 명령을 처음부터 끝까지 수행하는데 필요한 총 시간. (위 예시에서 지연 시간은 320ps)
  • 아래 그림은 파이프라인 예시

  • 그림을 보면 파이프라인 레지스터가 각 단계 별 사이에 삽입되어 있다.
  • Instruction 인 I1이 클럭이 돌면 A에서 B로 이동하자마자 I2가 A로 들어가는 형식이다.
  • 위 예제에서 클럭은 100 + 20 = 120ps마다 돌고 한 개의 Instruction을 처리하기 위해 3개의 클럭 사이클이 필요
  • 위 시스템에서 처리량은 1/120 * 1000 = 8.33 GIPS
  • 지연시간은 3 x 120 = 360ps
  • 위 파이프라인 시스템과 상단의 비파이프라인 시스템 (Figure 4.32)과 비교했을 때 처리량은 8.33/3.12 = 2.67배 증가했고 지연시간은 360/320 = 1.2배 증가했다.
  • 비파이프라인 보다 처리량은 증가했지만, 지연시간이 증가하는 이유는 추가된 파이프라인 레지스터에 의한 오버헤드 때문이다.

4.4.2 A Detailed Look at Pipeline Operation (파이프라인 연산의 상세한 고찰)

  • 파이프라인의 동작 과정을 이해하기 위해 파이프라인 연산을 상세히 볼 필요가 있다.
  • 단계 간 이동은 클럭 신호에 의해 제어되고 120ps 마다 클럭 신호가 0에서 1로 되어 다음 단계로 이동 된다.

  • 위 그림은 3번의 클럭 사이클 동안의 파이프라인 동작
    • 신호들은 파이프라인 레지스터 입력들로 전달되어 클럭이 상승하기 전까지는 대기 상태이다. 클럭이 상승하기 전까지 레지스터의 상태는 바뀌지 않는다.
    • 즉 클럭이 일어나야 파이프라인의 동작에 변화가 생김.
    • 3번 포인트에서 곡선이 의미하는 것은 각 instruction이 서로 다른 속도로 진행될 수 있음을 의미.

4.4.3 Limitations of Pipelining(파이프라이닝의 한계)

  • 지금까지 본 파이프라인 시스템인 이상적임. 실제로는 파이프라인의 효과를 감소시키는 여러 요인들이 작용됨.

Nonuniform Partitioning (비균일 분리)

  • 위의 그림은 계산을 이전처럼 세 단계로 나눈 시스템이지만, 각 단계에서 발생하는 지연 시간은 50ps에서 150 ps까지 각기 다르다.
  • 클럭이 구동되는 주기는 가장 낮은 속도의 게산 단계의 시간 소모 값에 의해 결정된다. 여기서는 150ps에 의해 결정 됨 + 20ps(파이프 라인 레지스터 로딩 등에 의한 지연 시간) (각자의 지연 시간마다 클럭을 변경시킬 수 없다. 앞에서 클럭은 일정한 규칙을 가지고 신호를 발생시킨다고 했기 때문이다.)
  • 위 파이프라인 시스템에서 클럭 사이클은 150 + 20 = 170ps
  • 문제1. 위 파이프라인 시스템의 클럭 사이클, 처리량, 지연 시간을 구하시오.
    • 위 파이프라인 시스템에서 클럭 사이클은 150 + 20 = 170ps
    • 위 파이프라인 시스템에서 처리량은 1/170 * 1000 = 5.88GIPS
    • 위 파이프라인 시스템에서 지연 시간은 150 + 20 * 3 = 510ps
  • 실제 하드웨어 설계시 지연 시간을 균일하게 타이밍을 최적화 하는 것이 중요하다.
  • 종종 ALU 또는 메모리 같은 일부 하드장치는 더 짧은 지연 시간으로 여러 장치로 나누어지기 때문에 균일하게 단계를 나누는 것이 어렵다.
  • 우리는 Y86-64 processor에서 파이프라인을 설계할 때 이러한 세부 사항까지는 고려할 필요는 없지만, 실제 시스템 설계에서 타이밍 최적화는 중요하다는 것은 알고 있자.
  • 문제2. 아래 그림 중 하나의 파이프라인 레지스터를 삽입할 때 처리량이 최대화 되는 위치는? 그때 처리량과 지연시간을 구하시오. (파이프라인 레지스터의 지연시간은 20ps라 가정)(상세 설명: C와 D사이 들어가면 두 개의 블록으로 나뉜다. 왼쪽(A,B,C)블록인 170ps, 오른쪽(D,E,F)블록인 130ps. 가장 낮은 속도 계산 단계의 시간 소모 값에 의해 클럭의 사이클이 결정되므로 클럭의 사이클은 170 + 20(파이프라인 레지스터) = 190ps)
  • 처리량이 최대화 되려면 최대화 구하는 공식인 1/? * 1000의 맥시멈을 구하면 된다. 따라서 지연 시간이 최소화 되는 위치는 C와D 사이. 이때 처리량은 1/190 * 1000 = 5.26GIPS 지연 시간은 340ps (아래 전체 합 320ps+ 삽입된 파이프 라인 레지스터 로딩 등에 의한 지연 시간 20ps)
  • 문제3. 아래 그림 중 두개의 파이프라인 레지스터를 삽입할 때 처리량이 최대화 되는 위치는? 그때 처리량과 지연시간을 구하시오. (파이프라인 레지스터의 지연시간은 20ps라 가정)
  • 처리량이 최대화 되려면 최대화 구하는 공식인 1/? * 1000의 맥시멈을 구하면 된다. 따라서 지연 시간이 최소화 되는 위치는 B와C 사이, D와 E사이. 이때 처리량은 1/130 * 1000 = 7.69GIPS 지연 시간은 360ps (아래 전체 합 320ps+ 삽입된 파이프 라인 레지스터 로딩 등에 의한 지연 시간 20ps * 2)
  • 문제4. 아래 그림 중 세개의 파이프라인 레지스터를 삽입할 때 처리량이 최대화 되는 위치는? 그때 처리량과 지연시간을 구하시오. (파이프라인 레지스터의 지연시간은 20ps라 가정)
  • 처리량이 최대화 되려면 최대화 구하는 공식인 1/? * 1000의 맥시멈을 구하면 된다. 따라서 지연 시간이 최소화 되는 위치는 A와B 사이, C와D 사이, D와 E사이. 이때 처리량은 1/110 * 1000 = 9.09GIPS 지연 시간은 380ps (아래 전체 합 320ps+ 삽입된 파이프 라인 레지스터 로딩 등에 의한 지연 시간 20ps * 3)
  • 문제5. 아래 그림 중 파이프라인 레지스터를 삽입해서 최대 처리량으로 설계할 때 최소 단계 수(block의 수)는 몇 개인가? 이때, 처리량 및 지연시간을 구하시오.(파이프라인 레지스터의 지연시간은 20ps라 가정)
  • 아래 단계들에서 가장 늦은 지연 시간은 A인 80ps 이므로 이것을 기준으로 나누어주면 A와B 사이, B와C 사이, C와 D사이, D와 E사이에 각각 파이프라인 레지스터를 삽입. → 최소 단계의 수는 5개. 이때 처리량은 1/100 * 1000 = 10GIPS, 지연 시간은 320ps + 20ps * 4 = 400ps


Diminishing Returns of Deep Pipelining(줄어드는 깊은 파이프라인닝의 효과)

  • 위 그림은 여섯 단계로 나누었고, 각각은 50ps 시간이 소모된다.
  • 이 시스템의 클럭 사이클 주기는 50 + 20 = 70ps, 처리량은 1/70 * 1000 = 14.29GIPS, 지연 시간은 420ps.
  • 파이프라인 단계의 수가 2배가 되면 파이프라인 시스템일 때 각 계산 블록에서 소요되는 시간이 2배로 줄었지만, 파이프라인 레지스터를 통과하는 지연 시간(delay)으로 인해 처리량은 14.29/8.33 = 1.71로 처리량은 2배가 되지 않는다.
  • 이 추가된 지연 시간은 파이프라인 처리량에 대한 제한 요소가 된다.
  • 최신 프로세스들은 프로세스의 클럭 속도를 최대로 올리기 위해 매우 깊은(15단계 이상) 파이프라인을 사용한다.
  • 회로 설계자는 파이프라인 레지스터를 신중하게 설계해서 지연 시간을 최소화한다. 또한, 칩 설계자는 클럭이 전체 칩에서 클럭 사이클을 정확히 균등하게 분배되도록 신중하게 설계해야 한다.
  • 이러한 모든 요소는 고성능 프로세서를 설계할 때 큰 어려움이다.
  • 문제6. 아래 그림에서 파이프라인의 개수는? 또한 몇 단계의 계산 블록으로 나누었는가?
  • 5개, 6단계

4.4.4 Pipelining a System with Feedback (피드백을 갖는 파이프라인 시스템)

  • 우리는 지금까지 독립적인 각각의 instruction을 고려했지만, 기계어 프로그램을 실행하는 시스템(Y86-64, x86-64)에서는 연속적인 instructions 간에는 잠재적인 의존성이 존재한다.
  • 예를 들어, 아래 그림에서 코드 배열은 각각의 연속되는 instructions 간에 원으로 표시한 레지스터 이름에 데이터 의존성이 존재함을 알 수 있다.
  • “피드백을 갖는다”는 아래 그림처럼 instructions 간 종속성을 갖는 것을 의미.

  • 아래 그림은 피드백을 갖는 시스템에 파이프라인을 추가할 때의 주의해야 할 점을 보여준다.
    • 피드백을 갖는 비파이프라인 시스템(a)에서 피드백을 갖는 파이프라인 시스템(c)로 전환할 때, 두 파이프라인 다이어그램의 그림(b와 d)과 같이 시스템 동작이 변경된다.
    • ISA에서는 아래 그림처럼 시스템 동작이 변경되는 것을 허용하지 않는다. 따라서 ISA에서 정의한 모델과 일치하도록 데이터를 처리하고 명령 간의 종속성을 제어해야 한다.


ISA란? (Instruction Set Architecture)

  • 하드웨어와 소프트웨어 사이의 Interface를 정의하는 것. 하드웨어와 프로그램 사이의 매개체 역할을 하는 것이다. (하드웨어와 소프트웨어를 연결)
  • 세상에는 많은 ISA가 있다. 칩을 만드는 회사마다 ISA의 종류가 다르다. 회사마다 자신만의 ISA를 가지고 있는 것이다.
  • 흔히 쓰이는 랩탑, 데스크탑, 심지어 서버 컴퓨터까지 전부 Intel, AMD 프로세서를 쓰는 아키텍처를 쓰고 있는데, 이 회사에서는 x86 ISA를 가지고 있다고 얘기를 한다. 그 외에 스마트폰에 쓰이는 ARM 프로세서가 있다.
  • 이 x86과 ARM은 서로 다른 ISA라고 말할 수 있다. 즉, 데스크탑과 스마트폰은 다른 ISA를 가지고 있다고 말할 수 있다.
  • 데스크탑에서 만든 소프트웨어를 바로 ARM 프로세서(모바일)에서 돌릴 수 없다. 왜냐하면 Interface가 다르니 말이 통하질 않는 것.
  • ISA가 바뀌어서 하드웨어가 기존의 명령어를 없애거나 바꿔버리면, 소프트웨어도 바뀌어야 할 것이다. 그러나 실제로는 컴파일러, OS가 바뀌는 부분을 잘 핸들링 해주어서 옛날 컴퓨터에서 최신 프로그램이 돌아가기도 한다.
  • Intel과 AMD는 같은 x86을 공통으로 사용하고 있는데 왜 다른 성능을 내는지에 대한 이유는 ISA를 구현하는 방법이 다르기 때문이다. ****
  • ISA를 구현하는 방법을 Microarchitecture라 한다.
  • Intel과 AMD는 똑같은 x86이라는 Interface는 똑같지만 실제로 어떻게 만드는지, 공정은 뭔지, 코어는 뭔지, 캐시는 어떻게 되는지 등등 내부적으로 구현하는게 다르다. 그래서 성능도 달라지게 되는 것이다.

CPU processor를 만들기까지

  • 실제로 Intel, AMD 이런데서 CPU processor를 어떻게 만들까?
  • 칩은 Power, Performance, Throughput, Security 등등 굉장히 많은 것들을 고려해야 한다.
  • 이것을 바탕으로 어떤 하나의 시스템을 만드는 것을 System architecture라고 한다.
  • 많은 것을 고려하기 때문에 최적화된 design point를 찾는 것이 어렵다고 한다.
  • 매번 이러한 것들을 고려하기에는 시간도 많이 걸리고 비용도 많이 걸린다.
  • 이에 대한 방안은 C/C++로 만든 Simulation을 가지고 design processor를 만들어보는 것이다.
  • Simulation은 소프트웨어이기 때문에 하드웨어를 굽는 것보단 비용이 훨씬 적게 들어간다.
  • 칩을 만드는 회사들은 자신의 Simulator를 가지고 있고, 이를 기반으로 새로운 processor를 디자인한다.
  • 이렇게 소프트웨어에서 Simulation한 뒤, 하드웨어에서 Verilog라는 HW description 언어가 있다. Verilog로 또 Simulation 한다.
  • 하드웨어에서도 검증이 된다면 실제 칩을 만드는 작업(Packaging)을 한다.

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

[CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당)  (0) 2023.03.08
[CSAPP] 4.5 Pipelined Y86-64 implementations  (0) 2023.03.01
[CSAPP] 4.3 Sequential Y86-64 Implementations  (0) 2023.03.01
[CSAPP] 4.2 Logic Design and the Hardware Control Language HCL (논리 설계와 하드웨어 제어 언어 HCL)  (0) 2023.03.01
[CSAPP] 4.1 The Y86-64 Instruction Set Architecture  (0) 2023.03.01
    'Computer Science/컴퓨터 구조' 카테고리의 다른 글
    • [CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당)
    • [CSAPP] 4.5 Pipelined Y86-64 implementations
    • [CSAPP] 4.3 Sequential Y86-64 Implementations
    • [CSAPP] 4.2 Logic Design and the Hardware Control Language HCL (논리 설계와 하드웨어 제어 언어 HCL)
    tgool
    tgool

    티스토리툴바