Tomasulo Data Structure
Tomasulo-Style Register Renaming
- Names
- Architectural registers
- Locations
- 레지스터 location은 레지스터 파일과 reservation station 두 곳.
- Value는 두 곳 모두 있을 수 있음.
- WAR hazard를 제거하는 카피들.
- Value 기반 또는 copy 기반 renaming이라고 부름.
- Location은 내부적으로 tag들에 의해 참조 됨.
- 레지스터 테이블에서 tag로 이름을 변환함.
- Tag
- 0인 경우 레지스터 파일 안을 의미하고
- 0이 아닌 경우 할당된 RS#Tag 안을 의미한다.
- CDB는 브로드캐스트할때 Tag와 value를 붙여서 한다.
- 그래서 인스터럭션은 자기들이 찾는 어떤 값이 뜨는 지 알 수 있다.
- Allocation scheme
- RS에 해당 Tag가 비어 있으면 할당 하는데
- 이때 Functional Unit의 오퍼렌드에 해당 하는 Value를 실제 레지스터로부터 복사하여 값을 넣어 둔다.
- 값을 RS에 카피하는 것이 이 알고리즘에서는 큰 의미가 있는 것으로 보임.
- 복사를 통해서 해당 물리 레지스터를 자유롭게 만들어 줌.
- 인스트럭션이 이슈 되기 전에 이미 해당 레지스터들이 카피 되었기 때문에 anti-dependency와 output-dependency가 해결 될 수 있음.
- Mapping을 통한 rename이 내가 생각 했던 false 디펜던시들의 레지스터 이름을 교환 하는 것이 아닌 것으로 보임. 실제로 매핑 테이블에는 RS Tag를 넣는데 이 매핑 정보는 true dependency가 존재 할 때만 assign되므로 단순히 인스트럭션의 레지스터 이름들을 각각 변경 한다기 보다는 다음 인스트럭션에서 해당 인스트럭션이 복사 되지 않고 (not ready) 기다려야 하는지에 대한 이름을 통해서 알고(value-based) 실제 인스트럭션이 execution 될 때는 오퍼렌드들이 reservation station에 존재 하기 때문에 레지스터 이름이 V1,V2,T1,T2를 참조하도록 Renaming 했다고 명명 하는 것으로 보여짐.
- Hennessy가 virtual register들은 실제 물리 레지스터보다 많을 수 있다는 것이 복사 의해서 RS와 실제 물리 레지스터들에 값들이 존재 하는 것으로 볼 수 있음
- 개인적으로는 인스트럭션마다 4개의 캐시 레지스터를 할 당 할 수 있는 유한 원소의 테이블을 가지고 있는 것으로 Replace victim시 stall을 수행 하고 할당하는 동작 전체가 캐시와 거의 유사하게 보임, 그다지 매력적인 알고리즘으로 보이지는 않지만, 사이클당 인스트럭션의 dependency를 specific하게 판단 할 수 있게 하는데 의의가 있는 것으로 보여짐.
- 만약에 실제 레지스터가 다른 인스트럭션에 의해 수행 되는 것 때문에 디펜던시가 존재 한다면 태그 값을 카피 하여 넣어 둔다.
Tomasulo's algorithms example
- 기본적인 동작
- DS는 Stall의 경우를 제외 하고는 들어온 순차적으로 수행(in-order)
- IS 전에서는 Register Status를 체크하고 Dependency가 없는 경우만 IS에 진입 할 수 있도록 함.
- EX, IS가 이슈 되고 나면 다음 단계에서는 반드시 실행.
- WB에서는 Register Status와 RS를 Release해 줌.
- 1 cycle
- 순차적 수행으로 디스패치를 수행, 첫 번째 인스트럭션의 RS를 할당하고 Write의 f0fmf 위한Register status를 할당.
- 2 cycle
- 두번째 사이클에서 Busy인 ldf를 이슈함. Mulf를 위한 RS를 할당하고 fo의 dependency를 copy함
- Write 대상을 위해 f4에 대한 register status를 할당.
- 3 cycle
- IS된 ldf는 execution 사이클
- mulf는 확인결과 해당 오퍼랜드1의 레지스터 f0가 release 되지 않았으므로 이슈 시키지 않고 스킵 함.
- 디스패치에서는 다음 인스트럭션인 stf를 가져와서 RS에 할당. 오버랜드1을 Register Status에서 check해보니 할당된 RS가 존재 하므로 Dependency를 T1을 통해 복사.
- 4 cycle
- WB사이클을 마친 ldf는 CDB를 통해서 해당 f0와 함께 tag RS#2를 브로드캐스트
- CDB의 브로드캐스트에 의해 Register Status의 f0는 해제 되고 또한 RS의 RS#2 값을 가진 RS들을 룩업, CDB의 Value에 해당 값이 존재 하므로 RS#4의 T1을 제거하고 CDB의 Value값을 V1으로 복사 한 뒤 사이클 수행
- 다음 인스트럭션 add에 대하여 오퍼랜드 레지스터 복사, 타겟 레지스터를 Register Status에서 확인 후 할당된 RS로 교체
- 5 cycle
- Execution단계에서는 mulf를 수행
- 이슈단계에서 stf를 확인 해보면 stf의 오퍼랜드1이 RS#4와 dependency가 존재하기 때문에 아직 이슈잉 하지 않고 스킵.
- 다음 인스트럭션인 add를 확인 결과 dependency가 없기에 add를 이슈함.
- 다음 ldf의 타겟 레지스터를 확인, f0가 이전에 릴리즈되어 free상태이므로 register status를 RS 태그로 할당하고 RS는 해당 오퍼랜드 레지스터를 복사 하면서 할당.
- 6 cycle
- mulf는 수행 사이클이 3이라고 가정 되었기 때문에 execution 사이클에 대기
- sft 의 오퍼랜드1이 RS#4와 디펜던시가 존재 하므로 이슈 하지 않음.
- Add는 이슈가 되었으므로 해당 EX 사이클 수행.
- ldf 의 오퍼랜드를 확인, 오퍼랜드2가 디펜던시가 존재 하므로 이슈 하지 않음.
- 다음 인스트럭션인 mulf를 수행하기 위해 register status를 확인
- f4에 RS#4가 할당 되어 있지만 이는 해당 RS가 FP로 동일하고 먼저 이슈가 된 것이 RS에 의해서 확인이 가능 하기 때문에 반드시 앞에서 수행된 RS가 먼저 WB을 할 것이 확실해짐으로 f4가 사용이 가능함.
- 이러한 이유로 WAW에 의한 스톨이 없음.
- f4에 RS태그로 값을 할당하고 RS 할당.
- 7 cycle
- mulf는 아직 사이클 소모가 완전히 되지 않았음,
- stf를 확인, stf는 오퍼랜드2의 값이 클리어 되지 않았으므로 이슈하지 않음.
- add인스트럭션은 EX를 마쳤으므로 WB수행.
- WB후 해당 타겟 레지스터는 완료가 되었으므로 CDB에 의해서 브로드캐스트
- 브로드캐스트 받은 Register Status에 해당 태그가 존재하는 레지스터를 릴리즈.
- 브로드 캐스트 받은 RS는 해당 태그의 T값이 존재 하는지 룩업 후, T를 클리어하면서 해당 V값에 CDB의 V값을 복사
- ldf에는 방금 디펜던시가 존재하던 레지스터가 클리어 되었으므로 이슈가 가능.
- R1의 Antidependency가 없이 수행 된것과 결과가 동일.
- stf를 디스패치 하기 위해 확인, sft의 RS가 모두 Full이므로 디스패치가 불가능(인스트럭션 버퍼가 꽉 찾으므로) 해당 인스트럭션은 stall됨.
- 8 cycle
- mulf가 EX 사이클을 마쳤으므로 WB수행
- WB후 CDB에 의해서 RS#4태그가 브로드캐스트
- Register Status는 두번째 mulf때문에 클리어 할 것이 없음.
- RS 해당 태그 엔트리는 FREE시키고 해당 태그를 가지고 있는 T 오퍼랜드는 클리어 후 해당 값을 V레지스터로 복사.
- 9 cycle
- 이슈된 stf의 EX 사이클 소모
- EX가 끝난 ldf의 WB
- CDB를 통해서 RS#2 태그와 값을 브로드캐스트
- Register Status에서 해당 값 클리어
- RS에 해당 값을 클리어하고 CDB의 값을 V에 복사
- 해당 태그의 RS의 엔트리는 Free
- mulf는 앞에서 수행 되었던 클리어작업에 의해서 이슈가 가능해짐.
- 10 cycle
- 이슈와 EX가 끝난 stf와 mulf를 차례로 수행.
RS Implementation
- Tag/CDB 파트는 각각 인스트럭션 윈도와 스케줄러라는 이름으로 불림.
- Wakeup
- CDB 태그 브로드캐스트와 매칭 작업을 의미함.
- 긴 버스와 함께 많은 비교 작업 수행.
- Select
- 이번 사이클을 이슈하기 위한 인스트럭션을 수행 할 것을 선택하는
Example
http://www.ecs.umass.edu/ece/koren/architecture/Tomasulo1/tomasulo_files/tomasulo.htm
'Fundamental Notes > Computer Architecture' 카테고리의 다른 글
| Tomasulo's Algorithms #2 (0) | 2009/02/01 |
|---|---|
| Tomasulo's Algorithms #1 (0) | 2009/02/01 |
| Dynamic Scheduling (0) | 2009/02/01 |
| Virtual Memory (0) | 2008/11/14 |
| Memory Hierarchy (0) | 2008/11/14 |
| Pipeline basics (0) | 2008/11/14 |