[SPARC] 18. Branch Delay Slot 의 발생 이유

2023. 10. 17. 00:33·CS/어셈블리
반응형

지난 글에서는 분기 명령어의 종류와 사용 방법, 그리고 예제들을 살펴보았다.

간단하게 정리하면 분기 명령어 중 조건 분기와 무조건 분기는 CC 코드를 이용해 분기 명령어에 적힌 조건을 파악하기 때문에, 명령어를 실행시키기 전에 반드시 조건식의 CC 코드를 발생시켜 두어야 했다.

그리고 분기 명령어의 실행 직후에는 Branch Delay Slot 이 반드시 발생하였다.

 

이번 글에서는 Branch Delay Slot 이 발생하는 이유를 실제 명령어의 실행 파이프라인을 따라가보며 정리해보고자 한다.


다음과 같은 명령어를 순차적으로 실행시킨다고 하자.

ble next_r        - A
add R1, R2, R3    - B
mov 130, R4       - C

...

next_r:           - D
    add R3, R4, R1
    set str, %o0
    ...

SPRAC 의 파이프라인인 F > E > M > W 의 순서로 시간을 따라가보자.

 

T1 시점

F : A 명령어를 가져와 해석한다.

E :

M :

W :

T2 시점

F : B 명령어를 가져와 해석한다.

E : A 명령어의 해석 결과 분기를 해야한다고 판단한다.

M :

W :

T3 시점

F : 분기 지점에 있는 D 명령어를 가져와 해석한다.

E : B 명령어의 해석 결과대로 실행한다.

M : A 명령어는 메모리의 조작과 관련 없는 명령어이므로, 이 단계는 실행되지 않는다. (맞겠지..?)

W :

 

t3 시점에서, 분기를 하였음에도, t2 시점에서 fetch 한 B 명령어가 파이프라인에 남아있어 계속 실행된다.

분기 실행시, 다음에 실행할 명령어 주소를 하드웨어적으로 앞으로 넘기기 때문에 PC + 4 주소가 아닌 분기된 곳 명령어가 위치한 주소가 넘어간다.

T4 시점

F : ...

E : D 명령어가 실행된다.

M : B 명령어의 실행결과를 메모리에 쓴다.

W :

 

이때, B 명령어가 쓴 실행결과가 의도된 D 명령어의 실행결과에 영향을 주게 된다.

따라서 B 명령어가 위치한 곳을 비워 nop 로 만들어두어야 한다.


SPARC 는 분기 명령어 직후의 명령어 ( 이 위치를 Branch Delay Slot 이라고 함 ) 를 분기 여부에 상관없이 반드시 실행한다.

따라서 이 곳에 예상치 못한 명령을 실행시키지 않기 위해 nop 를 넣어두는데, 이는 퍼포먼스의 낭비가 된다.

다음 글에서는 이 퍼포먼스의 낭비를 막기 위해, Branch Delay Slot 을 최적화하는 여러가지 방법에 대해 정리하여보겠다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 어셈블리' 카테고리의 다른 글

[SPARC] 20. switch - case 구현하기  (0) 2023.10.18
[SPARC] 19. Delay Slot Optimization  (0) 2023.10.17
[SPARC] 17. 분기 명령어  (0) 2023.10.15
[SPARC] 16. 비트 연산 명령어  (0) 2023.10.15
[SPARC] 15. 논리 연산 명령어  (0) 2023.10.14
'CS/어셈블리' 카테고리의 다른 글
  • [SPARC] 20. switch - case 구현하기
  • [SPARC] 19. Delay Slot Optimization
  • [SPARC] 17. 분기 명령어
  • [SPARC] 16. 비트 연산 명령어
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[SPARC] 18. Branch Delay Slot 의 발생 이유
상단으로

티스토리툴바