CPU - 2

ㅅㅇㄱ·2024년 9월 28일

CS

목록 보기
11/19

파이프라인

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

클럭사이클 시간 = Tp, 세그먼트 = k, 태스크 = n개

  • 클럭사이클 : 클록펄스에 따른 시간
  • 세그먼트 : 정해진 부연산을 수행하는 조합회로
  • 태스크(task) : 파이프라인의 모든 세그먼트를 지나쳐 수행되는 전체동작

속도 향상

파이프 라인 처리로 인한 속도 향상

nTp(k+n1)Tp=비파이프라인파이프라인\frac{n*Tp}{(k+n-1)*Tp} = \frac {비파이프라인}{파이프라인}

태스크 수의 증가시, k+n1nk+n-1 \fallingdotseq n

이때의속도증가율=TnTp이 때의 속도 증가율 = \frac {Tn}{Tp}

파이프라인 회로가 비파이프라인 회로에서 한 태스크를 수행하는데 걸리는 시간이 같다고 가정시

kTpTp=k\frac {k*Tp}{Tp} = k

즉, 이론적 최대 속도 증가율은 세그먼트의 수(k)

실제 파이프라인이 이론적인 최대속도가 안나오는 이유

  1. 각 세크먼트들이 부연산을 수행하는 시간이 서로 다름
  2. 파이프라인 회로와 비파이프라인 회로에서 지연시간이 언제나 동일하지는 않음
  3. IF(명령어인출), OF(오퍼랜드인출) 단계 기억장치 충돌 시 지연 발생
  4. 모든 명령어들이 파이프라인 단계를 모드 거치지 않을 수도 있음
  5. 분기, 인터럽트 등이 실행시 미리 처리되던 명령어들이 무효화 될 수 있음

명령어 파이프라인

명령어 파이프라인의 비정상 동작의 원인

자원충돌

두 세그먼트가 동일한 메모리를 접근시

  • 해결법 : 명령어 메모리와 데이터 메모리를 분리

데이터 의존성

어떤 명령어가 이전 명령어의 결과에 의존해 수행하는데, 그 값이 준비되지 않은 경우

  • 주소 의존성 : 필요로 하는 주소값이 준비되지 않아 유효주소 계산이 지연되는 경우
  • 해결법
    • 하드웨어 인터락 : 어떤 명령어의 피연산자가 파이프라인에서 앞서간 명령어의 목적어와 일치하는지 검사하는 회로
      상황 감지시 충분한 클럭 사이클 동안 지연됨
    • 오퍼랜드 포워딩 : 특별한 하드웨어를 사용해 충돌감지
    • 컴파일러 : 컴파일러로 데이터 충돌 감지
      무동작 명령어 삽입 또는 명령어 재비치 등

분기곤란

분기명령어와 같이 PC값 변경시

  • 해결법
    • 분기예측 : 분기를 예측해 명령어 순서 결정
    • 지연된 분기 : 무동작 명령어 삽입 또는 재배치

파이프라인 해저드

파이프라인이 특정 상황에 지연되는 것

데이터해저드

첫번째 명령어가 새 값을 저장하기전에 두번째 명령어가 예전값을 읽어 잘못된 주소 값 사용

분기해저드

CPU가 실행되선 안될 때 명령어를 실행시킴

0개의 댓글