失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > CPU流水线技术 数据冒险和结构冒险

CPU流水线技术 数据冒险和结构冒险

时间:2019-05-06 19:41:40

相关推荐

CPU流水线技术 数据冒险和结构冒险

感谢平台分享-/-04-10/tech-info/53251.html

什么是冒险?

风险(hazard)是指在计算机CPU的微体系结构中,指令流水线乱序执行中的一些问题可能会导致得到不正确的计算结果。有3类典型的风险:

数据风险结构风险控制风险(分支风险)

举两个

数据冒险

指令乱序执行时,可能会发生读取数据与写入数据之间的时序与空间的相关性,成为数据冒险。如果不加以处理,可能会导致竞态条件。 有3种可能的数据冒险:

先写后读 (RAW), 这是真实的相关。先读后写 (WAR), 被称为反相关。写后写(WAW), 被称为输出相关。

先写后读(RAW)

R2 <- R1 + R3. R4 <- R2 + R3

在电路上的实现如下:在过600ps后,t0的值会被保存到EX/MEM这个流水线寄存器中,与此同时,加法指令正在执行,它需要将t0的值传到ALU的输入,显然它直接从t0寄存器读的值不是最新的,最新的在访存阶段的连线上,我们从硬件连线上把这个信号引回来,作为ALU的输入端。是否使用前递的信号,我们需要根据是否出现数据冒险,来控制一个二路选择器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqjrYXDp-1586505902052)(/large/pgc-image/fdbfa112ef1a4efca5e1963b367dec12)]

当硬件检测到当前指令的源操作数正好在EX/MEM流水线寄存器中时,就直接将EX/MEM寄存器的值传递给ALU的输入,而不是从寄存器堆中读数据,如下图:t0在EX阶段就被计算出,所以可将它送到下一条指令ALU的输入,而不需要添加气泡。

FORWARDING 通道

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WxsHGAmM-1586505902060)(/large/pgc-image/e388d6fb8ba04e4c8e4495d0170c8ed4)]

在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的,这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式)

设置单独的指令高速缓存和数据高速缓存

虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ANewzmpl-1586505902069)(/large/pgc-image/018f470197454a54aedca7f5b305c6c8)]

在这两条语句之间增加两个Cycle的等待:

我们有一个方便又简便的方法,即流水线停顿(stall),产生空泡(bubble)。

流水线停顿

如何解决

指令流水时,处理器遇到分支指令,不能在流水开始阶段就判断出分支结果。

控制冒险

结构冒险是指多条指令同时要访问处理器一处硬件。典型例子是一个存储单元被一条指令取操作数同时另一条指令要写入结果。

结构冒险

第一个指令是计算一个值,并将其储存在R2,而第二个指令是使用这个值计算结果并储存在R4,但是在我们拿出第二步的操作数时,第一步的结果还未被储存。因此我们具有一种数据相关性。 我们可以说那有 一种数据依赖性对于指令i2,他依赖于指令i1的完成。感谢平台分享-/-04-10/tech-info/53251.html

什么是冒险?

风险(hazard)是指在计算机CPU的微体系结构中,指令流水线乱序执行中的一些问题可能会导致得到不正确的计算结果。有3类典型的风险:

数据风险结构风险控制风险(分支风险)

举两个

数据冒险

指令乱序执行时,可能会发生读取数据与写入数据之间的时序与空间的相关性,成为数据冒险。如果不加以处理,可能会导致竞态条件。 有3种可能的数据冒险:

先写后读 (RAW), 这是真实的相关。先读后写 (WAR), 被称为反相关。写后写(WAW), 被称为输出相关。

先写后读(RAW)

R2 <- R1 + R3. R4 <- R2 + R3

在电路上的实现如下:在过600ps后,t0的值会被保存到EX/MEM这个流水线寄存器中,与此同时,加法指令正在执行,它需要将t0的值传到ALU的输入,显然它直接从t0寄存器读的值不是最新的,最新的在访存阶段的连线上,我们从硬件连线上把这个信号引回来,作为ALU的输入端。是否使用前递的信号,我们需要根据是否出现数据冒险,来控制一个二路选择器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qv1pfOwQ-1586505902286)(/large/pgc-image/fdbfa112ef1a4efca5e1963b367dec12)]

当硬件检测到当前指令的源操作数正好在EX/MEM流水线寄存器中时,就直接将EX/MEM寄存器的值传递给ALU的输入,而不是从寄存器堆中读数据,如下图:t0在EX阶段就被计算出,所以可将它送到下一条指令ALU的输入,而不需要添加气泡。

FORWARDING 通道

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ebyCe42O-1586505902288)(/large/pgc-image/e388d6fb8ba04e4c8e4495d0170c8ed4)]

在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的,这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式)

设置单独的指令高速缓存和数据高速缓存

虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sz847ojq-1586505902290)(/large/pgc-image/018f470197454a54aedca7f5b305c6c8)]

在这两条语句之间增加两个Cycle的等待:

我们有一个方便又简便的方法,即流水线停顿(stall),产生空泡(bubble)。

流水线停顿

如何解决

指令流水时,处理器遇到分支指令,不能在流水开始阶段就判断出分支结果。

控制冒险

结构冒险是指多条指令同时要访问处理器一处硬件。典型例子是一个存储单元被一条指令取操作数同时另一条指令要写入结果。

结构冒险

第一个指令是计算一个值,并将其储存在R2,而第二个指令是使用这个值计算结果并储存在R4,但是在我们拿出第二步的操作数时,第一步的结果还未被储存。因此我们具有一种数据相关性。 我们可以说那有 一种数据依赖性对于指令i2,他依赖于指令i1的完成。感谢平台分享-/-04-10/tech-info/53251.html

什么是冒险?

风险(hazard)是指在计算机CPU的微体系结构中,指令流水线乱序执行中的一些问题可能会导致得到不正确的计算结果。有3类典型的风险:

数据风险结构风险控制风险(分支风险)

举两个

数据冒险

指令乱序执行时,可能会发生读取数据与写入数据之间的时序与空间的相关性,成为数据冒险。如果不加以处理,可能会导致竞态条件。 有3种可能的数据冒险:

先写后读 (RAW), 这是真实的相关。先读后写 (WAR), 被称为反相关。写后写(WAW), 被称为输出相关。

先写后读(RAW)

R2 <- R1 + R3. R4 <- R2 + R3

在电路上的实现如下:在过600ps后,t0的值会被保存到EX/MEM这个流水线寄存器中,与此同时,加法指令正在执行,它需要将t0的值传到ALU的输入,显然它直接从t0寄存器读的值不是最新的,最新的在访存阶段的连线上,我们从硬件连线上把这个信号引回来,作为ALU的输入端。是否使用前递的信号,我们需要根据是否出现数据冒险,来控制一个二路选择器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91tjSQod-1586505902481)(/large/pgc-image/fdbfa112ef1a4efca5e1963b367dec12)]

当硬件检测到当前指令的源操作数正好在EX/MEM流水线寄存器中时,就直接将EX/MEM寄存器的值传递给ALU的输入,而不是从寄存器堆中读数据,如下图:t0在EX阶段就被计算出,所以可将它送到下一条指令ALU的输入,而不需要添加气泡。

FORWARDING 通道

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27j4FKD8-1586505902483)(/large/pgc-image/e388d6fb8ba04e4c8e4495d0170c8ed4)]

在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的,这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式)

设置单独的指令高速缓存和数据高速缓存

虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rw4uHChY-1586505902485)(/large/pgc-image/018f470197454a54aedca7f5b305c6c8)]

在这两条语句之间增加两个Cycle的等待:

我们有一个方便又简便的方法,即流水线停顿(stall),产生空泡(bubble)。

流水线停顿

如何解决

指令流水时,处理器遇到分支指令,不能在流水开始阶段就判断出分支结果。

控制冒险

结构冒险是指多条指令同时要访问处理器一处硬件。典型例子是一个存储单元被一条指令取操作数同时另一条指令要写入结果。

结构冒险

第一个指令是计算一个值,并将其储存在R2,而第二个指令是使用这个值计算结果并储存在R4,但是在我们拿出第二步的操作数时,第一步的结果还未被储存。因此我们具有一种数据相关性。 我们可以说那有 一种数据依赖性对于指令i2,他依赖于指令i1的完成。感谢平台分享-/-04-10/tech-info/53251.html

什么是冒险?

风险(hazard)是指在计算机CPU的微体系结构中,指令流水线乱序执行中的一些问题可能会导致得到不正确的计算结果。有3类典型的风险:

数据风险结构风险控制风险(分支风险)

举两个

数据冒险

指令乱序执行时,可能会发生读取数据与写入数据之间的时序与空间的相关性,成为数据冒险。如果不加以处理,可能会导致竞态条件。 有3种可能的数据冒险:

先写后读 (RAW), 这是真实的相关。先读后写 (WAR), 被称为反相关。写后写(WAW), 被称为输出相关。

先写后读(RAW)

R2 <- R1 + R3. R4 <- R2 + R3

在电路上的实现如下:在过600ps后,t0的值会被保存到EX/MEM这个流水线寄存器中,与此同时,加法指令正在执行,它需要将t0的值传到ALU的输入,显然它直接从t0寄存器读的值不是最新的,最新的在访存阶段的连线上,我们从硬件连线上把这个信号引回来,作为ALU的输入端。是否使用前递的信号,我们需要根据是否出现数据冒险,来控制一个二路选择器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89Lc7rf3-1586505902678)(/large/pgc-image/fdbfa112ef1a4efca5e1963b367dec12)]

当硬件检测到当前指令的源操作数正好在EX/MEM流水线寄存器中时,就直接将EX/MEM寄存器的值传递给ALU的输入,而不是从寄存器堆中读数据,如下图:t0在EX阶段就被计算出,所以可将它送到下一条指令ALU的输入,而不需要添加气泡。

FORWARDING 通道

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZ6oA4lE-1586505902680)(/large/pgc-image/e388d6fb8ba04e4c8e4495d0170c8ed4)]

在存储器中设置单独的指令高速缓存和数据高速缓存。(要强调的在计算机中主存储器也就是内存是统一存放指令和数据的,这也是冯诺依曼结构的要求,只是在CPU当中 的一级高速缓存会采用指令和数据分别存放的方式)

设置单独的指令高速缓存和数据高速缓存

虽然流水线停顿能用来解决各种冒险,但它的效率低下,应尽量避免。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1YJX6IT-1586505902683)(/large/pgc-image/018f470197454a54aedca7f5b305c6c8)]

在这两条语句之间增加两个Cycle的等待:

我们有一个方便又简便的方法,即流水线停顿(stall),产生空泡(bubble)。

流水线停顿

如何解决

指令流水时,处理器遇到分支指令,不能在流水开始阶段就判断出分支结果。

控制冒险

结构冒险是指多条指令同时要访问处理器一处硬件。典型例子是一个存储单元被一条指令取操作数同时另一条指令要写入结果。

结构冒险

第一个指令是计算一个值,并将其储存在R2,而第二个指令是使用这个值计算结果并储存在R4,但是在我们拿出第二步的操作数时,第一步的结果还未被储存。因此我们具有一种数据相关性。 我们可以说那有 一种数据依赖性对于指令i2,他依赖于指令i1的完成。

如果觉得《CPU流水线技术 数据冒险和结构冒险》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。