scoreboarding
Reference docs:
https://en.wikipedia.org/wiki/Scoreboarding
SSC_course_5_Scoreboard_ex.pdf
1, what is scoreboarding
A method to dynamically schedule pipelining in case of out-of-order execution when there’re no conflicts and hardware is available.
The reason it’s called scoreboarding, as shown below, is because the way it determines whether an action is ready to go is just like a scoreboard in baseball game.
2, principle
In a scoreboard, the data dependencies of every instruction are logged. Instructions are released only when the scoreboard determines that there are no conflicts with previously issued and incomplete instructions.
The logging process is not added as part of the instruction; the log is recorded during instruction pipeline processing, so we should think scoreboarding as part of the pipeline.
3, scoreboarding stages and each stage’s resposibilities
After fetching, instructions would go through 4 stages: issue, read, execute and write back.
1) issue
what to do here: Check which registers will be read and written by this instruction. Instruction would stall until current instructions intending to write to the same register are completed.
issue = ID + structure/WAW hazard check
2) read
what to do here: After an instruction has been issued and correctly allocated to the required hardware module, the instruction waits until all operands become available.
Read stage is to avoid RAW hazard. For read stage to go forward, Rj,Rk should both be Yes (meaning see below).
3) execute
what to do here: When all operands have been fetched, the functional unit starts its execution.
4) write back
what to do here: In this stage the result is about to be written to its destination register.
In this stage, functional unit should be idle; src1/scr2 registers shoule be available and dst register should be idle.
This stage needs to avoid WAR.
4, data structure
Scoreboarding maintains 3 status tables: instruction status, functional unit status and register result status.
One demo see below:
1) instruction status
Record which above 4 stage an instruction is in.
2) register result status
Record which functional unit would write to which register.
3) functional unit status
Each functional unit maintains 9 fields to indicate its status:
- Busy: Indicates whether the unit is being used or not
- Op: Operation to perform in the unit (e.g. MUL, DIV or MOD)
- Fi: Destination register -- which register would be written
- Fj,Fk: Source-register numbers —src1 and src2 register number
- Qj,Qk: Functional units that will produce the source registers Fj, Fk – which operation will generate scr1 and scr2 results
- Rj,Rk: Flags that indicates when Fj, Fk are ready for and are not yet read. – whether src1 and src2 register is available
An example would look like this:
See reference pdf for details.
5, algorithm in function mode
Each stage of scoreboarding can be implemented as followed:
1) issue
function issue(op, dst, src1, src2)
wait until (!Busy[FU] AND !Result[dst]); // FU can be any functional unit that can execute operation op
-- 条件:(1) 当前FU没被使用; (2) 无其他活跃指令操作同一目的寄存器, 即无WAR风险
Busy[FU] ← Yes;
Op[FU] ← op;
F
i
[FU] ← dst;
F
j
[FU] ← src1;
F
k
[FU] ← src2;
Q
j
[FU] ← Result[src1];
Q
k
[FU] ← Result[src2];
R
j
[FU] ← Q
j
[FU] == 0;
R
k
[FU] ← Q
k
[FU] == 0;
Result[dst] ← FU;
2) read
function read_operands(FU)
wait until (R
j
[FU] AND R
k
[FU]);
-- 条件:Rj和Rk均为Yes
R
j
[FU] ← No;
R
k
[FU] ← No;
3) execute
function execute(FU)
// Execute whatever FU must do
4) write back
function write_back(FU)
wait until (∀f {(F
j
[f]≠F
i
[FU] OR R
j
[f]=No) AND (F
k
[f]≠F
i
[FU] OR R
k
[f]=No)})
-- 条件:FU可使用, scr1/scr2可使用, dst可使用
foreach f do
if Q
j
[f]=FU then R
j
[f] ← Yes;
if Q
k
[f]=FU then R
k
[f] ← Yes;
Result[F
i
[FU]] ← 0; // 0 means no FU generates the register's result
Busy[FU] ← No;
Again, above algorithm may look odd, they completely make sense we going through the pdf.
6, typical scoreboarding structure
2 FP multiply, 1 FP adder, 1 FP divider, 1 FP integer
7, scoreboarding limitation
(1) stall on name dependencies
For example,
MULT F4, F2, F2
ADDD F2, F0, F6
Actually above instructions are the same as:
MULT F4, F2, F2
ADDD F8, F0, F6
but scoreboadring cannot tell. To scoreboarding, this is a WAR hazard.
And it’s not difficult to conclude that scoreboarding may also see a name dependencies case as a WAW hazard.
(This limitation can be covered in Tomasulo’s Reservation Station/Renaming mechanism.)
(2) no forwarding hardware
(3) instruction parallelism is limited by the number of function units.
scoreboarding的更多相关文章
- Data Dependency
https://en.wikipedia.org/wiki/Data_dependency (There’s some misleading expression on the flow/data d ...
- Java:并发笔记-05
Java:并发笔记-05 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 4. 共享模型之内存 本章内容 上一章讲解的 Monitor 主要关注的是访问共享变量 ...
随机推荐
- console.log("正常-普天数据已调用");
console.log("正常-普天数据已调用");
- mysql中的Date日期格式的问题:只有日期没有时间及格式化时间
只有日期没有时间,把xml中的date改为timestamp 格式化最简单的方法:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", time ...
- SQLServer 安装失败可能的原因
问题:安装的时候显示参数指定的目录无效 解决:你的安装盘使用了文件/文件夹压缩功能,去掉压缩属性即可! 建议不要轻易使用储存盘的压缩功能
- 干货:Java技术栈18年02月精彩好文汇总
一晃眼,一个月过去了,新年也过完了. 一晃眼,又老了一岁了,感觉新的一年压力更大了. 我们也该为这一个月的技术做做汇总了,错过的同学正好可以统一回顾看看,已经看过的同学也可以再温习一下.. Java技 ...
- JQuery AJAX 通过一般处理程序 取列表
由于上一篇的积累 这一个就简单了 也就是把反回了字符串 显示到table中 $("#btnSearch").click(function () { $.post("Cur ...
- python调用tushare获取沪股通、深股通成份股数据
接口:hs_const 描述:获取沪股通.深股通成分数据 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称 | 类型 | 必选 ...
- css之页面三列布局之左右上下高度固定,中间自适应
第一种,绝对定位 !DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <tit ...
- PostgreSQL 主键自动增长
建立主键并设置自动增加的办法好好几种,这里记录我测试过的: drop table pro_process; CREATE TABLE "public"."pro_proc ...
- BBS论坛 项目表分析
一.项目表分析 from django.db import models from django.contrib.auth.models import AbstractUser # Create yo ...
- 编译 GNU binutils
重新以 arm 用户登陆,让新设置的环境变量起作用. [arm@localhost arm]#su arm [arm@localhost arm]#cd ${SRC} [arm@localhost t ...