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 主要关注的是访问共享变量 ...
随机推荐
- RoadFlow开源工作流源码-项目架构分析
项目文件结构: 很明了一个标准的三层架构的系统. 表示层:Web 业务层:Business 数据访问层:Data 另外存在缓存层:Cache缓存 增加公共使用类库:Utility 下面以一个实例(系统 ...
- class12_pack_grid_place 放置位置
其中的部分运行效果图(程序见序号1): #!/usr/bin/env python# -*- coding:utf-8 -*-# ----------------------------------- ...
- 第37讲 谈谈Spring Bean的生命周期和作用域
在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...
- 学习笔记——CDQ分治
再次感谢这位大佬的博客:https://www.cnblogs.com/ljc20020730/p/10395866.html CDQ分治,是一种在分治合并中计算前面值对后面答案的贡献的一种算法.今天 ...
- 《DSP using MATLAB》Problem 8.42
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 5.1_springboot2.x与安全(spring security)
1.简介 常见的两个安全框架shiro|spring security,这里只介绍spring security; Spring Security是针对Spring项目的安全框架,也是Spring B ...
- 【POJ】3259 Wormholes
题目链接:http://poj.org/problem?id=3259 题意:n个农场,m条双向路径,w条单向路径(虫洞).单向虫洞路径是负值.农夫想知道自己能不能看到自己(X). 题解:其实刚开始没 ...
- 转Git仓库分支(Branch)和标签(Tag)
仓库的分支(Branch)规范,影响到每个团队的工作流的一致性:标签(Tag)便于开发团队.测 试团队和其他团队识别每个项目的版本,特别是在协同处理线上问题的时候,大家可以非常清楚 地知道线上运行版本 ...
- Qt5 linux下的配置
对于用Qt开发图形界面,Qt会用到openGL的相关库文件和头文件.虽然绝大多数的linux发行版中都没有预置安装这些开发工具,但是要安装它们,也是非常简单的.用一行安装命令即可安装完毕. Debia ...
- 双十一HostGator独立服务器方案
一年一度的“双十一”购物狂欢节到来,各大电商平台线上消费的各种“吸金”开启了“双十一”模式,一年一度的“双十一”网购狂欢又开始以“巨大的价格优势”来勾起消费者的购买欲望. 此次双十一期间,HostGa ...