06 ILP (2)

초강송·2026년 4월 10일

고급컴퓨터구조

목록 보기
5/11

06 ILP (2)

Control dependencies

Case/switch statement

  • switch는 memory에 jump address table이 존재
  • 값에 따라 jump 할 곳을 jump address table에서 읽기만 하면 되니까 branch prediction이 도움 X

Branch prediction

PC 값을, branch 결과를 확실히 알 때까지 기다리겠다

  • control flow가 아닌 instr에 대해서도 stall을 해야 함→ stall이 너무 많아

항상 NextPC = PC + 4로 하겠다.

  • instruction이 sequential 하게 실행될 chance를 극대화
  • flow instruction을 최대한 줄임 → loop unrolling, 삼항연산자
  • wrong path는 다 flush 해야 함

Branch Target Buffer(BTB)

  • 몇몇 branch들은 target address가 항상 거의 고정돼 있더라 e.g. for문
  • PC 값을 가지고 BTB를 확인했을 때 BTB에서 hit → direction predictor로 이 branch가 taken 될지 안 될지 판단 → taken이면 BTB에 저장된 target address 불러와서 다음 명령어를 fetch

  • branch prediction 과정에서 예측해야 하는 세 가지
    • 이 instr이 branch냐? → BTB로 가능
    • 이 brach가 taken 되냐? 안 되냐?
    • taken 된다면 target address가 어디냐? → BTB로 가능

Branch Direction Prediction

Static

  • 항상 taken / 항상 not taken / backward는 taken, forward는 not taken
  • Profile-based
    • 코드 몇 번 실행해 보고 그 결과를 수집해서 예측
    • ISA support 반드시 필요 → branch instruction format에 hit bits (taken/not taken) 추가해야 해
  • Program-based
    • 사전 지식 사용 → if a < 0은 에러 코드니까 보통 not taken으로 해둠
    • profiling은 필요하지 않지만 좋을지 안 좋을지 모르고 ISA support bit가 필요
  • Programmer-based
    • 코드를 짤 때 내가 제공 → likely-taken, likely-not-taken
    • profiling은 필요 없지만 마찬가지로 ISA support가 필요

Runtime

  • runtime 때 수집되는 dynamic information을 가지고 branch를 taken/not taken을 예측하겠다
  • profiling이 필요 없고 동적으로 변화하는 branch behavior을 반영할 수 있음
  • hardware적으로 훨씬 복잡함
  • Last Time predictor
    • 마지막 branch taken 결과만 가지고 다음 taken 여부를 결정
    • branch마다 BTB에 single bit로 표시
    • 바로 직전 결과에 지나치게 의존해서 다음을 판단하다 보니, 전환이 너무 빠름
  • Two bit Counter Based Prediction
  • strongly taken / weaky taken / strongly !taken / weakly !taken
    • 더 정확하지만 BTB entry에 저장해야 하는 bit 수가 증가 → hardware cost

Global Branch Correlation

  • 앞서 실행된 branch의 결과를 보면, 지금 branch의 결과를 알 수 있는 경우가 있음
  • 모든 branch의 T/NT history를 보고 이 branch의 outcome을 결정하자
  • two level history를 사용
    • GHR(Global History Register) + history at that GHR
  • GHR을 인덱스로 PHT의 entry에 접근해서, 그 안에 있는 2 bit branch predictor 확인
    • PHT (Pattern History Table)
      • processor 안의 SRAM이나 캐시에 저장

  • Global predictor만으로는 서로 다른 두 branch가 GHR에 저장된 pattern이 같다는 이유로, 같은 PHT entry에 접근하고 수정해서 서로의 branch 예측 결과에 영향을 줄 수 있음
  • Gshare
    • GHR과 PC 값을 XOR 해서 동일한 GHR 값을 갖더라도 branch가 다르면 서로 다른 PHT entry에 접근하도록 하자

0개의 댓글