体系结构 各种相关(真相关、反相关、输出相关...)
数据相关、名称相关、控制相关、写后读相关、读后写相关、写后写相关、真相关、反相关、输出相关…整个人晕掉
都要不认识“相关”这两个字了
《计算机体系结构:量化研究方法 第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题
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
