体系结构 各种相关(真相关、反相关、输出相关...)

数据相关、名称相关、控制相关、写后读相关、读后写相关、写后写相关、真相关、反相关、输出相关…整个人晕掉
都要不认识“相关”这两个字了

《计算机体系结构:量化研究方法 第5版中文版》
国防科技大学 计算机体系结构 第三章 课后习题及答案
https://www.icourses.cn/web/sword/portal/shareDetails?&cId=3266#/course/assignments


数据相关 真相关

以下任一条件成立,则指令j数据相关与指令i:

  • 指令i生成的结果可能会被指令j用到
  • 指令j数据相关与指令k,指令k数据相关与指令i(存在第一种类型的相关链)

!单条指令内部的相关性不认为是相关(eg:ADD R1,R1,R1)

1 写后读相关

考虑两条指令 i 和 j,且 i 在 j 之前进入流水线,指令 j 用到指令 i 的计算结果, 而且在 i 将结果写入寄存器之前就去读该寄存器,因而得到的是旧值。

2 读后写相关

考虑两条指令 i 和 j,且 i 在 j 之前进入流水线,指令 j 的目的寄存器和指令 i 的源操作数寄存器相同,而且 j 在 i 读取该寄存器之前就先对它进行了写操作,导致 i 读到 的值是错误的。

3 写后写相关

考虑两条指令 i 和 j,且 i 在 j 之前进入流水线,,指令 j 和指令 i 的结果单元 (寄存器或存储器单元)相同,而且 j 在 i 写入之前就先对该单元进行了写入操作,从而导 致写入顺序错误。这时在结果单元中留下的是 i 写入的值,而不是 j 写入的。


名称相关

当两条指令使用相同的寄存器或存储器位置(称为名称),但与该名称相关的指令之间并没有数据流动时,发生名称相关

有两种名称相关:

1 反相关

指令i在指令j的前面,指令j写的名与指令i读的名相同

2 输出相关

指令i在指令j的前面,指令j与指令i写的名相同

!由于没有在指令之间传递值,反相关和输出相关都是名称相关,与真相关相对。因为名称相关并不是真正的相关,可以通过寄存器重命名来避免。


控制相关

由分支指令引起的相关,需要根据分支指令的执行结果来确定后面该执行哪个分支上的指令



例题1

列举出下面循环中的所有相关,包括输出相关、反相关、真相关。

for (i=2; i<100; i=i+1)a[i]=b[i]+a[i]				; /* s1 */c[i+1]=a[i]+d[i]			; /* s2 */a[i-1]=2*b[i]				; /* s3 */b[i+1]=2*b[i]				; /* s4 */

解:

输出相关:无
反相关:无
真相关:S1&S2

展开循环两次:

a[i] = b[i] + a[i]				; /* s1 */
c[i+1] = a[i] + d[i]			; /* s2 */
a[i-1] = 2 * b[i]				; /* s3 */
b[i+1] = 2 * b[i]				; /* s4 */
a[i+1] = b[i+1] + a[i+1] 		; /* s1’ */
c[i+2] = a[i+1] + d[i+1] 		; /* s2 ‘*/
a[i] = 2 * b[i+1]				; /* s3 ‘*/
b[i+2] = 2 * b[i+1]				; /* s4 ‘*/

由于循环引入的相关:S4&S4’(真相关)、S1’&S4(真相关)、S3’&S4(真相关) 、S1&S3’(输出相关、反相关)、S2&S3’(反相关)


例题2

上次整理的一波题目里的第6题


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部