포스트

임베디드 스터디 - 마이크로 아키텍처

임베디드 스터디 - 마이크로 아키텍처

이번 글 참고자료:
정익사, 컴퓨터 구조의 이해

마이크로 아키텍처 (Uarch)

  • 주어진 ISA가 특정 프로세서에서 구현되는 방식
    • 하나의 ISA는 서로 다른 마이크로 아키텍처로 구현될 수 있음
  • 컴퓨터 구조는 마이크로아키텍처와 ISA의 조합

파이프라인

  • 순차실행 : Fetch - Decode - Execute의 한 사이클을 순서대로 실행함
    • 다음 명령 실행까지 다른 하드웨어가 대기하는 비효율성 발생
  • 파이프라인 : Fetch, Decode, Execute 유닛을 각각 실행시킴
1
2
3
4
5
6
7
8
순차 실행:
명령어 1: [Fetch][Decode][Execute]
명령어 2:                          [Fetch][Decode][Execute]

파이프라인:
명령어 1: [Fetch][Decode][Execute]
명령어 2:        [Fetch][Decode][Execute]
명령어 3:               [Fetch][Decode][Execute]
  • 파이프라인의 동작 속도 향상은 다음과 같이 계산 가능
    • 파이프라인 단계 수 : $k$
    • 실행할 명령어 수 : $N$
    • 전체 프로그램 수행 클럭 : $T$

    $ T = k + (N-1)$

파이프라인 해저드

  • 파이프라인 동작에 영향을 주는 세 가지 요소가 있음
    • 제어 해저드(Control Hazard) : 명령어에 분기 명령이 실행될 경우, 현재 Fetch된 명령어가 불필요해짐(파이프라인 플러시, Pipeline Flush)
      • 분기 예측(Branch Prediction) : 분기 결과를 미리 예측해서 파이프라인을 구성
    • 데이터 해저드(Data Hazard) : 앞 명령어의 결과가 준비가 안됐는데 뒤의 명령어가 앞 명령어 결과값을 읽으려고 함
      • 포워딩(Forwarding) : 앞 명령어의 결과값을 레지스터에 저장하기 전에 바로 뒤 명령어의 입력으로 넘겨줌
    • 구조적 해저드(Structural Hazard) : 두 명령어가 동시에 같은 하드웨어 자원을 사용하여 충돌 발생
      • 명령어 메모리와 데이터 메모리를 분리하여 해소

슈퍼스칼라

  • 파이프라인을 여러 개 다루는 방식
    • 한 클럭에 명령어를 동시에 실행 가능
      1
      2
      3
      
      파이프라인 1: [F][D][E]
      파이프라인 2: [F][D][E]
      파이프라인 3: [F][D][E]
      
  • 비순차적 실행 (OoOE, Out-of-Order Execution)
    • 서로 의존성이 없는 파이프라인을 동시에 실행시키는 방법.
    • Dynamic Execution이라고도 함
1
2
3
① ADD R1, R2, R3   → 실행
② SUB R4, R1, R5   → ① 대기
③ MUL R6, R7, R8   → ①과 동시 실행 (독립적이므로)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.