🏷️ 知识点:流水线冒险

共 8 道相关题目

2019 年第 18 题 组成原理 选择题

在采用“取指、译码/取数、执行、访存、写回”5段流水线的处理器中,执行如下指令序列,其中s0、 s1、s2 、s3和t2 表示寄存器编号。

//R[s2]←R[s1]+R[s0] //R[s3]+M[R[t2]+0]

//R[s2]←R[s2]+R[s3] //M[R[t2]+0]<R[s2]

I1: add s2,s 1, so

I2: load s3,0 (t2)

I3: add s2,s2,s3

I4:store s2,0(t2)

下列指令对中,不存在数据冒险的是()。

A. I1 和 I3 B. I2 和 I3 C. I2 和 I4 D. I3 和 I4

[tag_link]

正确答案:C

出这四条指令在流水线中执行的过程如下图所示:

2018_Q7_3

数据冒险 指在程序中存在必须等前条指令执行完才能执行后一条指令的情况,此时这两条指令即为数据相关。其中 I1 和 I3、I2 和 I3、I3 和 I4 均发生了写后读相关,因此必须等相关的前条指令执行完才能执行后一条指令。只有 I2 和 I4 不存在数据冒险。所以答案选 C。


2010 年第 19 题 组成原理 选择题

下列选项中,不.会引起指令流水线阻塞的是()。

A. 数据旁路(转发) B. 数据相关 C. 条件转移 D. 资源冲突

[tag_link]

正确答案:A

采用流水线方式,相邻或相近的两条指令可能会因为存在某种关联,后一条指令不能按照原指定的时钟周期运行,从而使流水线断流。

有三种 相关 可能引起指令流水线阻塞:①结构相关,又称资源相关;

���数据相关;

③控制相关,主要由转移指令引起。

数据 旁路转发 ,其主要思想是不必待某条指令的执行结果送回到寄存器,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方,这样可以使流水线不发生停顿。


2016 年第 19 题 组成原理 选择题

在无转发机制的五段基本流水线中,下列指令序列存在数据冒险的指令对是()。

I1:add R1,R2,R3; / /(R2)+(R3)→R1

I2:add R5,R2,R4; //(R2)+(R4)→R5

I3:add R4,R5,R3; / /(R5)+(R3)→R4

I4:add R5,R2,R6; //(R2)+(R6)→R5

A. I1 和 I2 B. I2 和 I3 C. I2 和 I4 D. I3 和 I4

[tag_link]

正确答案:B

数据冒险 ,即数据相关,指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况,则 这两条指令即为数据相关。当多条指令重叠处理时就会发生冲突。首先这两条指令发生写后读相关,并且两条指令在流水线中执行情况(发生数据冒险)如下表所示: I1 I2 时钟 指令 1 2 3 4 5 6 7 取指 译码 运算 访存 写回 取指 译码 运算 访存 写回 指令 I2 在时钟 5 时将结果写入寄存器 (R5),但指令 I3 在时钟 3 时读寄存器(R5)。本来指令 I2 应先写入 R5,指令 I3 后读 R5,结果变成指令 I3 先读 R5,指令 12 后写入 R5,因而发生数据冲突。

2016_Q19_8


2023 年第 19 题 组成原理 选择题

在采用“取指、译码/取数、执行、访存、写回”5段流水线的 RISC 处理器中,执行如下指令序列 (第一列为指令序号),其中s0 、s1 、s2 、s3和t2 表示寄存器编号。

I1 add s2,s1,s0 //R[s2]←R[s1]+R[s0]

I2 load s3,0(s2) //R[s3]←M[R[s2]+0]

I3 beq t2,s3,L1 //if R[t2]=R[s3]jump to L1

I4 addi t2,t2, 20 //R[t2]←R[t2]+20 I5 L1:

若采用转发(旁路)技术处理数据冒险,采用硬件阻塞方式处理控制冒险,则在 I1~I4 执行过程中,发生 流水线阻塞的指令有()。

A. 仅 I3

B. 仅 I2 、I4

C. 仅 I3 、I4

D. 仅 I2 、I3 、I4

20. 某存储器总线宽度为64 位,总线时钟频率为 1 GHz, 在总线上传输一个数据或地址需要一个的时钟 周期,不支持突发传送方式,若通过该总线连接 CPU 和主存,主存每次准备一个64位数据需要6ns, 主存块大小为32B, 则读取一个主存块需要的时间为()。

A.8ns

B.11ns

C.26ns

D.32ns

[tag_link]

正确答案:C

在以下指令序列中: I1 :写寄存器 R[s2] I2 :使用 R[s2] 计算访存地址 I3 :使用 R[s3] 进行比较跳转 I4 :紧跟在 beq 指令之后执行 I2 与 I1 之间:写后读数据冒险(RAW Hazard) 指令 I1 将结果写入寄存器 R[s2] ,但这个值直到 I1 的 写回(WB)阶段 才会更新。而 I2 在其 执行(EX)阶段 就需要用到 R[s2] 来计算访存地址,因此存在写后读的数据冒险。幸运的是,I1 在 EX阶段末尾 就已生成结果并存储在 EX→M 流水段寄存器中。此时如果使用 旁路转发 ,可以直接将这个值从流水段寄存器中转发到 I2 的 ALU 输入端,避免等待 WB 阶段,从而解决了这个 RAW 冒险。I3 与 I2 之间: 装入-使用 数据冒险(Load-Use Hazard) I2 是一条 load 指令,它需要从内存中将数据装入寄存器 R[s3] 。而 I3 在它的 EX 阶段就要用到 R[s3] 的值。如果像前面那样尝试用旁路技术从 I2 的 EX→M 寄存器转发数据,会失败——因为此时的数据尚未从内存中读出。只有等到 I2 的 访存(M)阶段结束 ,数据才真正从内存中取回,存放在 M→WB 流水段寄存器。因此, 仅靠转发线路无法解决装入-使用冒险 。需要采取的办法是:对 I3 硬件阻塞一个周期 ,等待 I2 的 M 阶段完成,然后通过转发将 R[s3] 的新值从 M→WB 段寄存器送入 I3 的 ALU,以确保其操作正确。I4 与 I3 之间:控制冒险(Control Hazard) I3 是一条 beq 分支指令。该指令在 EX 阶段比较寄存器值,在 M 阶段才判断跳转是否成立 并更新 PC(程序计数器)。因此,在得知是否跳转前, I4 的取指(IF)阶段必须等待 I3 的 M 阶段完成 。这就导致 I4 的执行被 阻塞 3 个时钟周期 ,以确保其是否被执行是基于正确的控制流判断。最终,系统采用 硬件阻塞机制 来处理上述数据和控制冒险,下图展示了指令执行过程中各阶段的具体安排:


2024 年第 19 题 组成原理 选择题

5 段流水线 RISC 说法错误的是()。

A. 相邻两条指令中的操作数相关可能引起数据冒险

B. 在数据相关的指令间插入“气泡”能避免数据冒险

C. 有数据冒险都可以通过加入转发(旁路)电路解决

D. 所所有数据和关都可以通过添加nop 指令以及调整指令顺序来解决

[tag_link]

正确答案:C

本题考查 数据冒险 。A 选项正确,比如第一条指令写寄存器,下一条马上读同一个寄存器,就可能发生数据冒险。B 选项正确,“气泡”本质上是插入一条空操作(nop),让数据有时间准备好,避免错误读取。C 选项错误,Load-use hazard(加载 - 使用冒险):加载指令的数据在内存访问阶段(MEM)才准备好,而后续指令可能在执行阶段(EX)就需要使用数据,这种情况即使有旁路电路也可能无法避免,通常还需要插入一个“气泡”。D 选项正确,插入气泡即推迟指令后续阶段执行,可以避免所有数据冒险。


2026 年第 20 题 组成原理 选择题

在不考虑异常中断处理和访存的额外开销下,下列关于数据通路结构与 CPI 之间的关系正确的为() I. 单周期数据通路计算机的 CPI 等于 1 II. 多周期数据通路计算机的 CPI 大于 1 III. 流水线数据通路计算机的 CPI 等于 1

A. 仅 I、II B. 仅 I、III C. 仅 II、III D. I、II、III

[tag_link]

正确答案:D

**【解析】**在不考虑异常中断处理和访存的额外开销下,单周期数据通路中每条指令在一个时钟周期内完成,因此 CPI 等于 1。多周期数据通路中每条指令需要多个时钟周期执行,因此 CPI 大于 1。流水线数据通路在理想情况下(无冒险和停顿)可以实现每个时钟周期完成一条指令,因此 CPI 等于 1。故 I、II、III 均正确。注意:II 在理想情况下(完美的 overlap,运行的时间无限长),CPI 是趋向于 1 的,但是这一题显然不是考察的理想情况,所以 II 是正确的。


2012 年第 44 题 组成原理 综合题

某 16 位计算机中,带符号整数用补码表示,数据 Cache 和指令 Cache 分离。下表给出了指令系统中部分指令格式,其中 Rs 和 Rd 表示寄存器,mem 表示存储单元地址,(x) 表示寄存器 x 或存储单元 x 的内容。

该计算机采用 5 段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用 “按序发射,按序完成” 方式,没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题:

(1) 若 int 型变量 x 的值为 -513,存放在寄存器 R1 中,则执行指令 “SHR R1” 后,R1 的内容是多少(用十六进制表示)?

(2) 若某个时间段中,有连续的 4 条指令进入流水线,在其执行过程中没有发生任何阻塞,则执行这 4 条指令所需的时钟周期数为多少?

(3) 若高级语言程序中某赋值语句为 x=a+bxab 均为 int 型变量,它们的存储单元地址分别表示为[x][a][b]。该语句对应的指令序列及其在指令流水线中的执行过程如下图所示。

则这 4 条指令执行过程中,I3的 ID 段和I4的 IF 段被阻塞的原因各是什么?

(4) 若高级语言程序中某赋值语句为 x=x*2+axa 均为 unsigned int 类型变量,它们的存储单元地址分别表示为[x][a],则执行这条语句至少需要多少个时钟周期?要求模仿题 44 图画出这条语句对应的指令序列及其在流水线中的执行过程示意图。

流水线概念 流水线冒险

[tag_link]

1)x 的机器码为[x]补= 1111 1101 1111 1111B,即指令执行前 (R1)=FDFFH,右移 1 位后为 1111 1110 1111 1111B,即指令执行后 (R1)= FEFFH。(2 分)

2)每个时钟周期只能有一条指令进入流水线,从第 5 个时钟周期开始,每个时钟周期都会有一条指令执行完毕,故至少需要 4+(5-1)=8 个时钟周期。(2 分)

3)I3的 ID 段被阻塞的原因:因为I3与I1和I2都存在 数据冒险,需等到I1和I2将结果写回寄存器后,I3才能读寄存器内容,所以I3的 ID 段被阻塞(1 分)。I4的 IF 段被阻塞的原因:因为I4的前一条指令I3在 ID 段被阻塞,所以I4的 IF 段被阻塞(1 分)。注意:要求“按序发射,按序完成”,故 2) 中下一条指令的 IF 必须和上一条指令的 ID 并行,以免因上一条指令发生冲突而导致下一条指令先执行完。

4)因 2*x 操作有左移和加法两种实现,故 x=x*2+a 对应的指令序列为:

I1    LOAD  R1, [x]
I2    LOAD  R2, [a]
I3    SHL   R1       // 或者 ADD R1, R1
I4    ADD   R1, R2
I5    STORE R2, [x]

这 5 条指令在流水线中的执行过程如下表所示: x=x*2+a 语句最少需要 17 个时钟周期。


2014 年第 44 题 组成原理 综合题

(13分)某程序中有如下循环代码段P:“for (int i=0;i<N;i++)su m +=A[i];”。假设编译时变量sum 和i 分别分配在寄存器R1 和R2 中。常量N 在寄存器R6 中,数组A 的首地址在寄存器R3 中。程序段P 起始地址为08048100H, 对应的汇编代码和机器代码如下表所示。

编号地址机器代码汇编代码注释
108048100H00022080Hloop:sll R4,R2,2(R2)《2→R4
208048104H00083020Hadd R4,R4,R3(R4)+(R3)→R4
308048108H8C850000Hload R5,0(R4)((R4)+0)→R5
40804810CH00250820Hadd R1,R1,R5(R1)+(R5)→R1
508048110H20420001Hadd R2,R2,1(R2)+1→R2
608048114H1446 FFFAHbne R2,R6,loopif (R2)≠(R6) goto loop

执行上述代码的计算机 M 采用32位定长指令字,其中分支指令 bne 采用如下格式:

31     2625    2120    1615     0
OPRsRdOFFSET

OP为操作码,Rs 和Rd 为寄存器编号,OFFSET为偏移量,用补码表示。请回答下列问题,并说明理由。

(1)M 的存储器编址单位是什么?

(2)已知sll 指令实现左移功能,数组A 中每个元素占多少位?

(3)表中bne 指令的OFFSET 字段的值是多少?已知bne 指令采用相对寻址方式,当前PC内容为bne 指 令地址,通过分析题44表中指令地址和bne 指令内容,推断出bne指令的转移目标地址计算公式。

(4)若M 采用如下“按序发射、按序完成”的5级指令流水线:IF ( 取指)、ID ( 译码及取数)、EXE ( 执 行 ) 、MEM ( 访存)、 WB ( 写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时 钟周期阻塞,则P 中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒 险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?

[tag_link]

(1) 存储器编址单位为字节。因为每条指令占 4B,指令地址差为 4 个地址单位,故一个地址单位代表 1B。

(2) 数组 A 中每个元素占 32 位(4B)。sll 指令左移 2 位相当于乘 4,用于计算数组元素地址偏移,说明每个元素占 4B = 32 位。

(3) bne 指令的机器代码为 1446 FFFAH,后 2B 为 OFFSET 字段,值为 FFFAH(补码),即 -6。bne 指令地址为 08048114H,根据指令格式,转移目标地址计算公式为:(PC) + 4 + OFFSET × 4。执行 bne 时 PC 已自动加 4 变为 08048118H,-6 × 4 = -24,08048118H - 18H = 08048100H(loop 地址)。

(4) 由于数据相关而发生阻塞的指令为第 2、3、4、6 条。第 6 条指令会发生控制冒险。指令 1(sll)与指令 5(add R2,R2,1)之间没有数据相关,因为指令 1 写 R4,指令 5 写 R2,寄存器不同,不会发生阻塞。