Mano의 컴퓨터시스템구조

[mano의 컴퓨터시스템 구조] 9장 파이프라인과 벡터 처리

studyingalone 2025. 2. 2. 22:39
728x90

9.1 병렬 처리

  • 동시 데이터 처리 기능을 제공하는 광범위한 개념의 기술
  • SISD(단일 명령어 스트림, 단일 데이터 스트림): 기존의 단일 프로세서 컴퓨터와 유사하며, 일부 내부 병렬 처리가 포함될 수 있다.
  • SIMD(단일 명령어 스트림, 다중 데이터 스트림): 여러 프로세서가 동일한 명령을 실행하면서 각기 다른 데이터를 처리하는 방식이다.
  • MISD(다중 명령어 스트림, 단일 데이터 스트림): 이론적인 개념일 뿐 실제 구현된 사례는 없다.
  • MIMD(다중 명령어 스트림, 다중 데이터 스트림): 여러 프로그램을 동시에 실행할 수 있는 다중 프로세서 및 다중 컴퓨터 시스템이 포함된다.

9.2 파이프 라인

  • 하나의 프로세서를 서로 다른 기능을 가진 여러 개의 서브 프로세서로 나누어 각 서브 프로세서가 동시에 서로 다른 데이터를 취급하도록 하는 기법

 

Ai * Bi + Ci 연산 수행하는 파이프라인의 처리

파이프라인 처리의 예

 

  • R1 ← Ai, R2 ← Bi     Ai와 Bi의 입력
  • R3 ←  R1 * R2, R4 ←  Ci     곱셈과 Ci의 입력
  • RS ←  R3 + R4      곱셈 결과와 Ci의 덧셈

일반적인 고찰

네 세그먼트 파이프라인

 

파이프라인에 대한 공간-시간표 출처: aspirants - WordPress.com

  • k 세그먼트 파이프라인에서 n 태스크를 완료하려면  k + (n - 1) 클럭 사이클이 필요하다.
  • 위 표의 6개의 태스크가 모두 완료 되기 위해선 4 + (6 - 1) = 9 클럭 사이클이 필요

파이프라인 처리오 인한 속도의 증가율

  • tn: 각 태스크를 완료하기 위해 걸리는 시간
  • Ntn: 태스크에 대한 전체 수행 시간
  • tp: 클럭 사이클 시간

※ 이론적 최대 속도 증가율은 파이프라인의 세그만트수(k)와 같다.


9.3 산술 파이프라인

부동소수점 덧셈 및 뺄셈 파이프라인

두 개의 정규화된 부동소수점 수 X=A×2^a 와 Y=B×2^b가 입력된다.

 

연산 과정은 다음 4단계로 이루어진다.

  1. 지수 비교: 두 지수를 뺀 차이를 구하여 큰 지수를 결과의 지수로 선택한다.
  2. 가수 정렬: 작은 지수를 가진 가수를 오른쪽으로 이동시켜 정렬한다.
  3. 가수 연산: 정렬된 가수를 더하거나 뺀다.
  4. 정규화: 결과 가수를 조정하여 첫 자릿수가 0이 아닌 형태로 만든다.

 

각 세그먼트의 지연 시간이 t1=60ns, t2=70ns, t3=100ns, t4=80ns이고, 인터페이스 레지스터 지연이 tr=10ns일 때,

  • 파이프라인 클록 주기 tp = max⁡(t1,t2,t3,t4) + tr = 110ns
  • 비파이프라인 연산 시간 tn = t1 + t2 + t3 + t4 + tr = 320ns
  • 속도 향상 = 320/110 = 2.9

9.4 명령어 파이프라인

일반적인 명령어 실행 단계

  1. 명령어 페치(Fetch): 메모리에서 명령어를 가져옴
  2. 명령어 디코드(Decode): 명령어 해석
  3. 유효 주소 계산(Calculate Effective Address): 메모리 접근이 필요한 경우 주소 계산
  4. 메모리에서 피연산자를 fetch(Fetch Operands): 메모리에서 필요한 데이터 가져옴
  5. 명령어 실행(Execute): 연산 수행
  6. 결과 저장(Store Result): 결과를 적절한 위치에 저장

 

4단계 명령어 파이프라인 예제

명령어 디코드와 유효 주소 계산을 하나의 세그먼트로, 실행과 저장 단계를 하나로 통합하면 4단계 파이프라인을 구성

네 세그먼트 CPU 파이프라인

  • 네 세그먼트 파이프라인을 가진 CPU에서 명령어 사이클이 수행되는 과정

 

명령어 파이프라인의 시간 관계

  1. FI (Fetch Instruction): 명령어를 메모리에서 읽음
  2. DA (Decode & Address Calculation): 명령어 해석 및 유효 주소 계산
  3. FO (Fetch Operand): 메모리에서 오퍼랜드 가져옴
  4. EX (Execute Instruction): 명령어 실행

 

명령어 파이프라인이 정상적인 동작에서 벗어나게 하는 원인

 

1. 자원 충돌(Resource Conflicts)

  • 두 개의 세그먼트가 동시에 메모리에 접근하려고 하면 충돌 발생
  • 해결 방법: 명령어 메모리와 데이터 메모리를 분리하여 독립적으로 접근 가능하도록 설계

2. 데이터 의존성(Data Dependency)

  • 후속 명령어가 이전 명령어의 결과값을 필요로 하는 경우 실행이 지연됨
  • 해결 방법:
    • 하드웨어 인터록(Hardware Interlock): 충돌을 감지하여 필요한 만큼 대기
    • 오퍼랜드 전달(Operand Forwarding): ALU 결과를 레지스터에 저장하지 않고 직접 다음 연산에 전달
    • 지연 로드(Delayed Load): 컴파일러가 명령어를 재배열하여 데이터 충돌 방지

3. 분기 문제(Branch Hazards)

  • 조건 분기(Conditional Branch)는 파이프라인을 중단시키고, 새로운 경로의 명령어를 가져와야 함
  • 해결 방법:
    • 분기 예측(Branch Prediction): 분기 결과를 미리 예측하여 예상되는 명령어를 가져옴
    • 분기 타겟 버퍼(BTB, Branch Target Buffer): 이전 분기 정보를 저장하고 활용하여 성능 저하 방지
    • 루프 버퍼(Loop Buffer): 반복문(loop)을 메모리 접근 없이 고속으로 실행
    • 지연 분기(Delayed Branch): 컴파일러가 분기 후 실행 가능한 명령어를 삽입하여 중단 없이 연속 실행

 

 

 

728x90
반응형