일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- makefile
- DNN Accelerator
- systolic array
- CLOCK GATING
- 데이터 해저드
- linux makefile 작성
- 남산업힐
- Pyverilog 튜토리얼
- DNN 가속기
- gcc 컴파일
- pytest-pythonpath 설치 오류
- 이진수 곱셈 알고리즘
- gpgpu-sim
- AMBA
- 컨벌루션 연산
- Pyvrilog tutorial
- Makefile compile
- Data HAzard
- 딥러닝 가속기
- Pyverilog 설치
- CUDA
- Pyverilog 실행
- pygraphviz 설치 오류
- Design DNN Accelerator
- 대구 반도체 설계기업 특화
- pyverilog 설치 오류
- linux c 컴파일
- CDC
- 클럭 게이팅
- linux c++ 컴파일
- Today
- Total
오늘은 맑음
Reservation station 본문
Reservation station
data hazard를 피할 수 있는 방법중에 scoreboarding과 reservation station이 있다.
scoreboarding은 이전 포스팅에서 알아보았으므로 이번엔 reservation station에 대해서 알아보자.
Reservation Station
: reservation station은 CPU가 사용한 레지스터를 연산이 종료된 즉시 가져와 저장하는 버퍼다. 결과값을 register에 write하지 않고 reservation station에 저장함으로써 WAR, WAW hazard를 방지할 수 있다.
명령어가 발행되어 operand와 함께 실행되어 나온 결과는 reservation station에 저장된다.
이 후 같은 register에 대한 write 명령어가 수행되어도 결과값은 reservation station에 저장되며 프로그램의 순서상 가장 마지막에 발행된 명령어의 결과만이 실제 register에 저장되어 WAW hazard를 피할 수있다.
역시 실행한 결과값이 바로 register에 저장되지 않고 reservation station에 저장되기 때문에 명령어는 필요한 값을 register 또는 reservation station에서 사용할 수 있다. 이로 인해 WAR hazard 또한 방지할 수 있다.
reservation station에서 WAR hazard를 방지하는 또 다른 방법으로는 register renaming이다.
MULTD F4, F2, F2
ADDD F2, F0, F6
위와 같은 명령어가 실행된다고 하자. F2 register의 경우 ADDD명령어가 먼저 종료되면 MULTD의 결과값이 달라지는 문제가 발생한다. 따라서 다음과 같이 수정한다.
MULTD F4, F2, F2
ADDD F8, F0, F6
위와 같이 ADDD명령어의 결과값을 사용하지 않을 F8에 write하게 되면 의존성(dependency)가 사라져 역시 WAR hazard를 예방할 수 있다.(F8은 사용하지 않았다고 가정한다)
'Processor' 카테고리의 다른 글
Clock Gating(클럭 게이팅) (0) | 2019.04.25 |
---|---|
single precision/half precision (0) | 2019.03.28 |
MSHRs(Miss Status Holding Registers) (0) | 2019.02.27 |
Data Prefetch (1) | 2019.02.21 |
multi-thread processor에서의 scoreboard (0) | 2019.02.20 |