Computer Architectrure: Quantitative Approch 第三章第五、六节

体系结构 Tomasulo实例 https://www.bilibili.com/video/av19929862?p=17 https://www.icourses.cn/web/sword/portal/shareDetails?&cId=3266#/course/chapter 第1个周期 第1条LD指令流出,占用第1个Load部件,读出的值需要写到F6 第2个周期 第2条LD指令流出,占用第2个Lo... 阅读详情

Dynamic Scheduling: Examples and the Algorithm

在详细研究Tomasulo的算法之前,让我们考虑一些示例,这些示例将有助于说明该算法的工作原理。

在这里插入图片描述
在这里插入图片描述

与早期较简单的方案相比,Tomasulo的方案具有两个主要优点:(1)阻塞检测逻辑的分布;(2)消除了WAW和WAR阻塞的停顿。第一个优点来自分布式预留站和CDB的使用。 如果多个指令正在等待一个结果,并且每个指令已经具有其他操作数,则可以通过在CDB上广播结果来同时释放指令。 如果使用集中式寄存器文件,则在有可用寄存器总线时,设备将不得不从寄存器中读取其结果。

第二个优点是消除了WAW和WAR危害,这是通过使用保留站重命名寄存器以及在操作数可用时将其存储到保留站中的过程来实现的。

例如,即使存在涉及f6的WAR危险,图3.11中的代码序列也会同时发出fdiv.d和fadd.d。 可以通过以下两种方法之一消除危害。首先,如果指令fdiv.d已完成,然后Vk将存储结果,从而使fdiv.d能够独立于fadd.d执行(显示的情况)。 另一方面,如果fld尚未完成,则Qk将指向Load1保留站,并且fdiv.d指令将独立于fadd.d。 因此,无论哪种情况,都可以发出fadd.d并开始执行。 fdiv.d结果的任何使用都将指向保留站,从而允许fadd.d完成并将其值存储在寄存器中而不会影响fdiv.d。

在这里插入图片描述
我们很快就会看到消除WAW危害的示例。 但是,让我们首先来看一下我们先前的示例如何继续执行。 在本示例以及本章随后的示例中,假定以下延迟:加载为1个时钟周期,加法为2个时钟周期,乘法为6个时钟周期,而除法为12个时钟周期。

Tomasulo’s Algorithm: The Details

在这里插入图片描述

Figure 3.13指定了每条指令必须经过的检查和步骤。 如前所述,加载和存储在进入独立的加载或存储缓冲区之前都要经过一个功能单元,以进行有效的地址计算。 加载需要执行第二个步骤来访问内存,然后转到写入结果以将值从内存发送到寄存器文件和/或任何等待的保留站。 存储在写入结果阶段完成其执行,该阶段将结果写入内存。 请注意,无论目的地是寄存器还是存储器,所有写操作都在写结果中发生。 该限制简化了Tomasulo的算法,通过3.6节中的推测对其扩展至关重要。

Tomasulo’s Algorithm: A Loop-Based Example

要了解通过动态重命名寄存器消除WAW和WAR危险的全部功能,我们必须查看一个循环。 考虑以下简单序列,将数组的元素乘以f2中的标量:
在这里插入图片描述
如果我们预测将采取分支,则使用保留站将允许一次执行多个此循环。 在不更改代码的情况下获得了这一优势——实际上,硬件使用重命名获得的保留站作为附加寄存器来动态展开循环。
在这里插入图片描述
假设我们已经在循环的两个连续迭代中发出了所有指令,但是没有浮点加载/存储或操作完成。 Figure 3.14显示了保留站,寄存器状态表以及此时的加载和存储缓冲区。 (忽略整数ALU操作,并假设已按预期预测分支。)一旦系统达到此状态,就可以在CPI接近1.0的情况下维持循环的两个副本,前提是乘法可以在四个时钟中完成。 周期。 由于有六个周期的等待时间,在达到稳定状态之前,将需要处理其他迭代。 这需要更多的保留站来保存正在执行的指令。 正如我们将在本章后面看到的那样,当Tomasulo的方法扩展为多个发布指令时,每个时钟可以支持多条指令。

如果他们访问不同的地址,则可以安全地完成ld和st。如果ld和st访问相同的地址,则发生两件事之一:

  • ld是按照程序顺序存放在st之前的,互换它们会导致WAR危险。
  • st要先按计划顺序装载,互换它们会导致RAW危险。
    同样,将两个存储互换到相同的地址会导致WAW危害。

因此,为了确定是否可以在给定的时间执行加载,处理器可以检查以程序顺序在加载之前的任何未完成st是否共享与ld相同的数据存储地址。 同样,st必须等待,直到没有未执行的ld或程序顺序更早且共享相同数据存储器地址的st为止。 我们在第3.9节中考虑一种消除这种限制的方法。

为了检测到此类危险,处理器必须已计算出与任何较早的内存操作相关的数据内存地址。 确保处理器具有所有此类地址的一种简单但非必要的最佳方法是按程序顺序执行有效的地址计算。 (实际上,我们只需要保持st和其他内存引用之间的相对顺序即可;也就是说,可以自由地对ld进行重新排序。)

让我们首先考虑ld的情况。 如果我们按程序顺序执行有效地址计算,那么当ld完成有效地址计算后,我们可以通过检查所有活动st缓冲区的A字段来检查是否存在地址冲突。 如果ld地址与st缓冲区中任何活动条目的地址匹配,则在冲突st完成之前,该ld指令不会发送到ld缓冲区。 (某些实现将值直接绕过暂挂st中的ld,从而减少了这种RAW危害的延迟。)

st操作类似,不同之处在于处理器必须检查ld缓冲区和st缓冲区中是否存在冲突,因为不能相对于ld或st对发生冲突的st进行重新排序。

动态调度的管道可以产生非常高的性能,准确预测了提供的分支,这是我们在上一节中解决的问题。 这种方法的主要缺点是Tomasulo方案的复杂性,这需要大量的硬件。 特别是,每个预留站必须包含一个关联缓冲区(必须高速运行)以及复杂的控制逻辑。 性能也可能受单个CDB的限制。 尽管可以添加其他CDB,但每个CDB必须与每个保留站进行交互,并且必须在每个站为每个CDB复制关联​​的标签匹配硬件。 在1990年代,只有高端处理器才能利用动态调度(及其对推测的扩展)。 但是,最近甚至为PMD设计的处理器都在使用这些技术,而高端台式机和小型服务器的处理器也有数百个缓冲区来支持动态调度。

在Tomasulo的方案中,结合了两种不同的技术:将体系结构寄存器重命名为更大的一组寄存器,以及从寄存器文件中缓冲源操作数。 源操作数缓冲解决了当操作数在寄存器中可用时出现的WAR危险。 正如我们将在后面看到的,还可以通过重命名寄存器以及缓冲结果来消除WAR危害,直到没有剩余的对早期版本的寄存器引用为止。 当我们讨论硬件推测时,将使用这种方法。

Tomasulo的方案在360/91之后很多年未使用,但由于种种原因,从1990年代开始在多issue处理器中被广泛采用:

  • 尽管Tomasulo的算法是在缓存之前设计的,但缓存的存在以及固有的不可预测的延迟已成为动态调度的主要动机之一。 无序执行允许处理器在等待高速缓存未命中完成的同时继续执行指令,从而隐藏了全部或部分高速缓存未命中的代价。
  • 随着处理器在issue能力方面变得更加激进,设计人员开始关注难于调度的代码(例如大多数非数字代码)的性能,诸如寄存器重命名,动态调度和推测之类的技术变得越来越重要。
  • 它可以实现高性能,而无需编译器将代码定向到特定的流水线结构,这是在紧缩型大众市场软件时代的宝贵属性

Hardware-Based Speculation

随着我们尝试利用更多的指令级并行性,维持控制依赖关系成为越来越重的问题。 分支预测减少了分支的直接停顿,但对于每个时钟执行多个指令的处理器,仅准确地预测分支可能不足以生成所需数量的指令级并行度。 issue量较大的处理器可能需要在每个时钟周期执行一个分支,以保持最佳性能。 因此,利用更多的并行性要求我们克服控制依赖的局限性。

通过推测分支的结果并像我们的猜测一样执行程序来克服控制依赖。 这种机制代表了具有动态调度的分支预测的微妙但重要的扩展。 特别是,通过推测,我们获取,发出和执行指令,就好像我们的分支预测始终正确; 动态调度仅获取并发布此类指令。 当然,我们需要机制来应对推测不正确的情况。 附录H讨论了各种支持编译器推测的机制。在本节中,我们将探讨硬件推测,它扩展了动态调度的思想。

基于硬件的推测结合了三个关键思想:(1)动态分支预测以选择要执行的指令,(2)推测允许在解决控制相关性之前执行指令(具有消除错误推测的序列影响的能力),(3)动态调度以处理基本块的不同组合的调度。 (相比之下,不进行推测的动态调度只会部分重叠基本块,因为它要求在实际执行后续基本块中的任何指令之前先解析一个分支。)

基于硬件的推测遵循预测的数据值流,以选择何时执行指令。 这种执行程序的方法本质上是一种数据流执行:只要操作数可用,就立即执行操作。

为了扩展Tomasulo的算法以支持推测,我们必须从指令的实际完成中分离出在指令之间进行结果的绕行,而推测是执行推测性执行一条指令所必需的。 通过进行这种分离,我们可以允许一条指令执行并将其结果绕过其他指令,而不允许该指令执行任何无法撤消的更新,直到我们知道该指令不再是推测性的。

使用旁路值就像执行推测寄存器读取一样,因为直到该指令不再是推测性的,我们才知道提供源寄存器值的指令是否提供了正确的结果。 当指令不再是推测性的时,我们允许它更新寄存器文件或存储器; 我们在指令执行序列指令控制中将此步骤称为附加步骤。

实施推测背后的关键思想是允许指令乱序执行,但迫使它们按顺序执行,并防止任何不可撤销的动作(例如更新状态或采取例外措施)直到指令提交为止。 因此,当我们增加推测时,我们需要将完成执行的过程与指令提交分开,因为指令可能在准备提交之前就已经相当大地完成了执行。 将此提交阶段添加到指令执行序列中需要另外一组硬件缓冲区,这些缓冲区用于保存已完成执行但尚未提交的指令结果。 该硬件缓冲区(我们称为重排序缓冲区)也用于在可能被推测的指令之间传递结果。

重新排序缓冲区(ROB)以与Tomasulo算法中的预留站扩展寄存器集相同的方式提供其他寄存器。 在与指令相关联的操作完成与指令提交之间的时间之间,ROB保留指令的结果。 因此,ROB是指令操作数的来源,就像预留站以Tomasulo的算法提供操作数一样。 关键的区别在于,在Tomasulo的算法中,一旦一条指令写入了结果,所有随后发出的指令都将在寄存器文件中找到结果。 通过推测,在指令提交之前寄存器文件不会更新(并且我们明确知道该指令应该执行)。 因此,ROB在指令执行完成和指令提交之间的间隔中提供操作数。 ROB与Tomasulo算法中的存储缓冲区相似,并且为简单起见,我们将存储缓冲区的功能集成到ROB中。

在这里插入图片描述

Figure 3.15显示了包括ROB的处理器的硬件结构。 ROB中的每个条目都包含四个字段:指令类型,目标字段,值字段和就绪字段。 指令类型字段指示指令是分支(没有目标结果),存储(具有存储器地址目标)还是寄存器操作(具有寄存器目标的ALU操作或装入)。 目的字段提供应将指令结果写入其中的寄存器号(用于装载和ALU操作)或存储器地址(用于存储)。 值字段用于保存指令结果的值,直到指令提交为止。 不久我们将看到一个ROB条目示例。最后,“就绪”字段指示指令已完成执行,并且值已准备就绪。

ROB包含存储缓冲区。 存储仍然分两步执行,但第二步由指令落实执行。 尽管保留站的重命名功能已由ROB取代,但我们仍然需要一个地方来缓冲操作(和操作数),它们在发出时间和开始执行之间。保留站仍提供此功能。 由于每条指令在提交前都会在ROB中有一个位置,因此我们使用ROB条目号而不是保留站号来标记结果。 该标记要求必须在保留站中跟踪为指令分配的ROB。 在本节的稍后部分,我们将探讨另一种实现方式,该实现方式使用额外的寄存器进行重命名,并使用一个替换ROB的队列来决定何时可以提交指令。

这是指令执行涉及的四个步骤:

1.发布-从指令队列中获取指令。 如果ROB中有一个空的预留站和一个空的插槽,则发出指令; 如果操作数在寄存器或ROB中可用,则将它们发送到保留站。 更新控制条目以指示缓冲区正在使用中。 分配给结果的ROB条目的编号也发送到预留站,这样,当将该结果放置在CDB上时,该编号可用于标记结果。 如果所有保留都已满或ROB已满,则指令发布将暂停,直到两个都有可用条目为止。

2.执行-如果一个或多个操作数尚不可用,请在等待计算寄存器的同时监视CDB。 此步骤检查RAW危险。 当两个操作数在预留站上都可用时,请执行该操作。 在此阶段,指令可能需要多个时钟周期,而在此阶段,ld仍然需要两个步骤。 st在此步骤仅需要基址寄存器,因为此时执行st仅是有效的地址计算。

3.写入结果-如果结果可用,则将其写入CDB(发出指令时发送ROB标签),然后将其从CDB写入ROB,以及等待该结果的所有保留站。 将预订站标记为可用。 商店指示需要采取特殊的措施。 如果要存储的值可用,则将其写入商店的ROB条目的“值”字段中。 如果要存储的值尚不可用,则必须监视CDB,直到广播该值为止,这时将更新商店的ROB条目的“值”字段。 为简单起见,我们假设这是在st的“Write Result”阶段发生的; 我们稍后将讨论放宽此要求。

4.提交-这是完成指令的最后阶段,之后仅保留其结果。 (一些处理器将此提交阶段称为“完成”或“毕业”。)提交时有三种不同的操作序列,具体取决于提交指令是具有不正确的预测分支、存储还是任何其他指令 (正常提交)。 当指令到达ROB的开头并且其结果存在于缓冲区中时,将发生正常的提交情况。 此时,处理器将使用结果更新寄存器,并从ROB中删除指令。 提交存储的过程与之类似,只是存储器是更新的而不是结果寄存器。 预测到达ROB的开头时,如果分支不正确,则表明推测是错误的。 刷新ROB,并在分支的正确后继者处重新开始执行。 如果正确预测了分支,则分支结束。指令提交后,将收回其在ROB中的条目,并更新寄存器或存储器目标,从而减少ROB条目。 如果ROB已满,我们只需停止发布指令,直到可以输入。 现在,让我们研究一下该方案如何处理Tomasulo算法所使用的示例。

在这里插入图片描述
在这里插入图片描述
前面的示例说明了具有推测性的处理器和具有动态调度的处理器之间的关键重要区别。 将Figure 3.16的内容与Figure 3.12的内容进行比较,该图显示了在使用Tomasulo算法的处理器上操作相同代码序列的过程。 关键区别在于,在前面的示例中,不允许在最早的未完成指令(前面的示例中的fmul.d)之后执行任何指令。 相反,在图3.12中,fsub.d和fadd.d指令也已完成。

这种差异的一个含义是带有ROB的处理器可以动态执行代码,同时保持精确的中断模型。 例如,如果fmul.d指令引起了中断,我们可以简单地等到它到达ROB的开头并执行中断,然后从ROB中清除所有其他挂起的指令。 因为指令提交按顺序发生,所以这产生一个精确的异常。

相比之下,在使用Tomasulo算法的示例中,fsub.d和fadd.d指令都可以在fmul.d提出例外之前完成。 结果是寄存器f8和f6(fsub.d和fadd.d指令的目标)可能会被覆盖,在这种情况下,中断将不精确。

一些用户和架构师在设计高性能处理器时可以接受不精确的浮点运算,因为这些计算可能会让程序终止。 有关此主题的进一步讨论,请参见附录J。而其他类型的异常(例如页面错误),则很难容纳不精确的问题,因为程序必须在处理此类异常后顺次恢复执行。

如下面的示例所示,除了支持推测执行之外,将ROB与按顺序指令提交配合使用还提供了精确的异常。

在这里插入图片描述
在这里插入图片描述

因为在执行指令之前,寄存器值和任何存储器值都不会被实际写入,所以当发现分支预测错误时,处理器可以轻松地撤销其推测性动作。 假设在Figure 3.17中第一次没有使用分支bne。 分支之前的指令仅在每个到达ROB的开头时才提交; 当分支到达该缓冲区的开头时,只需清除缓冲区,处理器便开始从另一条路径中提取指令。

实际上,推测错误的处理器会在错误预测分支后尽早恢复。 可以通过清除错误分支后出现的所有条目的ROB,允许ROB中分支之前的条目继续并在正确的分支后继者处重新开始提取来完成此恢复。 在推测处理器中,性能对分支预测更为敏感,因为错误预测的影响会更高。 因此,处理分支的所有方面(预测准确性,错误预测检测的等待时间和错误预测恢复时间)都变得越来越重要。

通过在准备好提交之前不识别异常来处理异常。 如果推测的指令引发异常,则该异常将记录在ROB中。 如果出现分支预测错误,并且不应执行该指令,则清除ROB时会与该指令一起清除异常。 如果指令到达了ROB的开头,那么我们知道它不再是推测性的,应该采取例外处理。 我们也可以尝试在异常出现且所有较早分支都得到解决后立即处理异常,但是对于异常而言,这比分支错误预测更具挑战性,并且因为它发生的频率较低,因此不那么关键。

在这里插入图片描述
Figure 3.18显示了一条指令的执行步骤,以及执行该步骤所必须满足的条件和所采取的措施。 我们展示了直到提交才解决错误预测的分支的情况。 尽管推测似乎是对动态调度的简单补充,但将Figure3.18与Figure3.13中Tomasulo算法进行比较,可以看出,推测给控件带来了显着的复杂性。 此外,请记住,分支错误预测要稍微复杂一些。

在推测处理器中处理st的方式与Tomasulo的算法之间存在重要的区别。 在Tomasulo的算法中,存储可以在达到Write Result(确保已计算出有效地址)时更新内存,并且可以存储数据值。 在推测处理器中,存储仅在到达ROB头部时才更新内存。 这种差异确保在指令不再具有推测性之前,不会更新内存。

Figure 3.18对存储进行了一项重大简化,实际上是不需要的。 Figure3.18要求st在Write Result阶段等待要存储其值的寄存器源操作数; 然后将值从st的预留站的Vk字段移到st的ROB条目的“值”字段。 但是,实际上,要st的值直到存储区提交之前才需要到达,并且可以通过ld指令直接放入存储区的ROB条目中。 这是通过硬件跟踪何时要st的源值在商店的ROB条目中可用,并在每次指令完成时搜索ROB来查找相关的商店来实现的。

这种添加并不复杂,但是添加有两个效果:我们需要向ROB添加一个字段,而Figure3.18(已经是小字体)会更长! 尽管Figure3.18进行了简化,但在我们的示例中,我们将允许st通过Write Result阶段,并只需等待该值在提交时准备就绪即可。

像Tomasulo的算法一样,我们必须避免内存中的冒险。 通过推测消除了内存操作中的WAW和WAR冒险,因为当存储位于ROB的开头时,内存的实际更新是按顺序进行的,因此没有较早的ld或st仍可以挂起。 内存的RAW冒险可以通过两个限制来避免:

1.如果st占用的任何活动ROB条目的“目标”字段与ld的A字段的值匹配,则不允许ld启动其执行的第二步
2.计算相对于所有较早st的ld有效地址来维持程序顺序

这两个限制共同确保了对于访问早期st所写入的存储位置的任何ld都无法执行存储访问,除非这个st已写入数据。 实际上,某些推测处理器在发生此类RAW危害时,会直接将存储中的值旁路到负载中。 另一种方法是使用值预测的形式来预测潜在的冲突。我们将在3.9节中对此进行考虑。

尽管这种对推测执行的解释集中在浮点上,但是这些技术很容易扩展到整数寄存器和功能单元。实际上,由于此类程序倾向于具有分支行为难以预测的代码,因此在整数程序中进行推测可能更为有用。 另外,通过允许每个时钟进行多个指令发出和提交,这些技术可以扩展为在多issue处理器中工作。 实际上,在这样的处理器中推测可能是最有趣的,因为如果技术要求不高,那么在编译器的协助下可以在基本块内实现足够多的ILP。

体系结构学习7-乱序执行 乱序执行 解决RAW数据依赖(True dependency),提高指令并行。WAW,WAR事实上是处理器寄存器资源不足导致的。 issue:准备将某条指令送入某个队列执行 dispath:某条指令进入某个队列开始执行 Load/Store指令需要和内存交互,执行时间是无法静态确定的(如cache miss,TLB miss等等) 内部执行实际是数据流控制。 超标量执行和乱序执... 阅读详情

相关推荐

【Quark RISC-V】流水线CPU设计(4)数据冒险的处理(主要解决方案:流水线暂停、数据转发、乱序执行)

【Quark RISC-V】流水线CPU设计(4)数据冒险的处理(主要解决方案:流水线暂停、数据转发、乱序执行)

悟已往之不谏 知来者之可追 2261

计算机系统结构Tomasulo算法

(2)假设各种操作的延迟为: load:1个时钟周期 加法:2个时钟周期 乘法:10个时钟周期 除法:40个时钟周期 给出MUL.D指令准备写结果时各状态表的内容。LD指令,流出,占用第一个Load缓冲器,34+R2地址存放在A字段,目标寄存器是F6,还需要把寄存器状态表F6更改load1,建立起双向链接。保留站中,对于Vj和Qj,应该写入Qj(只有立即数才写入Vj),R(F4)已经就绪,取出来是立即数,应该放入Vj。此时F2寄存器状态表为Load2,表示没有就绪,F4寄存器状态表为空,表示数已经就绪。

liangcha_xyy的博客 2527

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1111

Computer Architectrure: Quantitative Approch 第三章第十三节

Fallacies and Pitfalls 我们的少数谬误集中在预测性能和能源效率以及从时钟频率或 CPI 等单一指标进行推断的难度上。 我们还表明,对于不同的基准测试,不同的架构方法可能具有完全不同的行为。 Fallacy——It is easy to predict the performance and energy efficiency of two different versions of the same instruction set architecture, if we hold th

qq_33146555的博客 243

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

高效低功耗设计:PMOS电子开关在墨水屏与ADC采样电路中的创新应用

本文深入探讨了PMOS电子开关在低功耗设计中的创新应用,特别是在墨水屏和ADC采样电路中的关键作用。通过详细分析PMOS的导通机制和近乎零静态功耗特性,展示了其在待机低功耗场景下的显著优势,并提供了实用的电路设计技巧和元器件选型建议,帮助工程师实现极致的功耗优化。

weixin_29193359的博客 157

【计算机体系结构】指令集并行(ILP)动态调度算法:Tomasulo实现代码(Tomasulo Algorithm Implementation)

Tomasulo算法用于指令的动态调度,允许乱序执行,能更有效地使用多个执行单元。Tomasulo's algorithm is for the dynamic scheduling of instructions that allows out-of-order execution and enables more efficient use of multiple execution units.

MaxwellWong 1989

本地AI助手部署指南:DeepSeek Harness与Ollama集成实践

AI Agent作为当前人工智能领域的热门技术,通过模拟人类决策过程,能够自主规划、调用工具并执行复杂任务。其核心原理在于将大语言模型的推理能力与外部工具API相结合,形成可闭环的工作流。这种技术架构的价值在于显著提升了AI系统的实用性和自动化水平,使其从单纯的对话工具转变为能够解决实际问题的智能助手。在应用场景上,AI Agent广泛应用于代码生成、数据分析、自动化办公等领域。本文聚焦于如何通过DeepSeek Harness平台与Ollama本地模型的集成,实现隐私安全、离线可用的AI助手部署方案,特别

dengjuanshou7445的博客 466

计算机体系结构----寄存器重命名/Tomasulo算法

计分板算法可看我写的博文计算机体系结构----计分板(scoreboard)算法Tomasulo算法的核心是寄存器重命名(register renaming);通过寄存器重命名,可彻底消除WAR/WAW冲突,计分板算法中,WAR/WAW都是通过停顿解决的,当然计分板算法虽然没那么厉害但还是通过动态调度消除了RAW冲突的。保留站示意图如下。 上述字段的含义和计分板很相似。如果设置了“有效位”,则表中的“值”正确。 否则,Tag 指定在何处查找正确的值。 Tag 是要生成的 Value 的唯一名称、 Commo

输出每日所学,供大家学习使用 4808

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5555

[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。............

HowieXue 薛永浩的博客 1万+

计算机体系结构基础知识介绍之动态调度Tomasulo 算法(二)

类似地,存储缓冲区具有三个功能:(1)保存有效地址的组成部分直到计算出来,(2)保存等待数据值存储的未完成存储的目标内存地址,以及(3)保存 要存储的地址和值,直到内存单元可用。在这样做时,一个动态调度方案,比如Tomasulo算法,在源和结果之间引入了一个周期的延迟,因为结果和它的使用之间的匹配不能在写结果阶段结束之前完成,而不是像一个更简单的流水线那样在执行阶段结束时完成。没有显示任何执行控制表。例如,如果有一个WAW冒险,那么就意味着后面的指令可能会比前面的指令先完成,并且把前面的指令的结果覆盖掉。

欢迎交流! 2435

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 413

体系结构学习笔记---白话理解Tomasulo算法

乱序执行 1.1 影响流水线性能的因素 单位时间执行的指令数目是衡量CPU的一项重要指标,为了让各个部件尽量处于工作状态,于是提出了指令流水,但是随之而来的问题就是因为程序之间的相关性,从而引起的流水线堵塞,影响了流水线性能。 为了进一步提高流水线性能,就提出了乱序执行,也就是部分程序不需按照原先的顺序执行。可以试想,若有一指令执行时间非常长,而后边执行时间短的指令和本条指令之间无数据流动,那为何不让后边的提前执行以便更进一步的执行随后的工作呢。这只是一个例子,这种根据组件......

qq_41645482的博客 1万+

纯方位观测下的三维定位,IV-PLKF(Inverse Velocity-Weighted Pseudo-Linear Kalman Filter)

在现代定位系统中,纯方位观测因其无需测距设备的优势,在无线通信、无人机导航和室内定位等领域备受关注。本文深入探讨基于算法的三维定位方法,并提供完整的MATLAB仿真例程。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 666

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机体系结构实验 (预习报告)

目录1. MIPS 指令系统和 MIPS 体系结构实验目的实验平台MIPS64 指令系统介绍MIPS 的寄存器MIPS 的数据表示MIPS 的数据寻址方式2. 流水线及流水线的冲突3. 指令调度和延迟分支4. Cache性能分析5. Tomasulo算法6. 再定序缓冲(ROB)工作原理7. 多 Cache 一致性—— 监听协议8. 多 Cache 一致性—— 目录协议 8 个实验,其中 4 个必做;做好预习,写好预习报告;预习报告中有的内容,不用在最后的实验报告中体现。最后提交电子版和纸质版的实验报告和

连理o的博客 4433

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

体系结构学习笔记二:指令间相关性、相关性导致的冒险和隐藏冒险的方法(持续更新)

文章目录指令相关性一、指令相关性分类1,数据相关2,名相关3,控制相关二、相关性和流水线导致的冒险1.数据冒险(1)RAW:读后写冒险(2)WAR:写后读冒险(3)WAW:写后写冒险2,控制冒险总结 指令相关性 一、指令相关性分类 1,数据相关 2,名相关 3,控制相关 主要针对if语句和循环语句,映射到汇编代码中,就是指由分支指令(Branch)产生的相关性。 二、相关性和流水线导致的冒险 1.数据冒险 (1)RAW:读后写冒险 数据相关导致的RAW冒险 (2)WAR:写后读冒险 反相关导致的WAR冒险

Zhouzj23的博客 2458

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据冒险-ld,ld,dadd

RAW 冒险指的是一种数据依赖情况,即某条指令在读取寄存器的值时,依赖于之前指令还没有完成的写操作。例如,指令需要r4和r5的值,而这些值是由前面的和指令从内存中加载的。如果ld指令还未完成写回(WB)阶段,dadd指令可能会读取到旧的或不正确的值,这就是RAW冒险。加载指令的WB阶段用于将从内存获取的值写回到寄存器中,因此WB阶段在加载指令中依然存在且必不可少。具体分析版数据冒险-ld和add(又称load-use冒险)转发机制允许在 Mem 阶段完成时,将数据直接转发给依赖指令的 EX 阶段。

Never Give Up 1097

流水线技术

流水线技术通过将指令执行过程分为多个阶段,使得多条指令能够在不同阶段并行执行,从而显著提高处理器的性能和吞吐量。尽管流水线设计面临结构冲突、数据冒险和控制冒险等挑战,但通过合理的设计和优化策略,这些问题可以得到有效解决。流水线技术是现代高性能处理器的基础,推动了计算机技术的快速发展。结构冲突是指令流水线中常见的问题之一,主要发生在多条指令同时需要访问同一硬件资源时。通过增加硬件资源、优化资源调度和插入气泡等方法,可以有效减少结构冲突的影响,从而提高处理器的性能和效率。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1474

Read-after-Write (RAW) hazard和Write-after-Read (WAR) hazard命名

WAR冒险并不是指物理上写入是在读取之后,而是指逻辑上写入需要依赖于读取的完成顺序。换句话说,写入操作不应该在读取操作完成之前进行,否则会导致数据错误。

Never Give Up 1234

计算机体系结构----重排序缓冲(ROB)

ROB的思想:不按顺序完成指令,但在使结果对体系结构状态可见之前重新排序。

输出每日所学,供大家学习使用 4013

体系结构学习笔记一:硬件动态调度算法介绍以及基于Verilog的Tomasulo实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、静态调度二、动态调度1.计分板2.Tomasulo总结 前言 乱序CPU中的动态调度算法。 一、静态调度 体系结构中,传统的五级流水线CPU(IF:取指;ID:译码;EX:执行;MEM:访存;WB:写回),为了防止指令之间数据相关导致的 RAW冒险,名相关中输出相关导致的WAW冒险,需要在ID阶段对进行相关性检测和互锁。 对于指令间的相关性,简单看下面一段汇编程序: 其中,ADD指令(省略.D)使用了DIV的目的寄存器.

Zhouzj23的博客 3918

系统结构期末复习(四)指令级并行

动态指令调度:相对于静态指令调度,动态指令调度是在指令的执行阶段中进行调度,使得无关的指令得以先执行,减少阻塞。且能够处理一些在编译时情况不太明确的相关(如存储器访问的相关)动态指令调度将会引起指令乱序执行,因此使用换名技术消除名相关(包括反相关和输出相关)难以处理异常动态调度要保持正确的异常行为(只有那些在程序严格按程序执行时才会发生的异常,才能真正发生)。动态调度的处理机是这样来保持正确的异常行为的:对于一条会发生异常的指令来说,只有当处理机确切的知道该指令被执行后,才允许它发生异常。

很注重数学和408 8701

手把手调试RISC-V流水线:用Verilog实现数据前递解决RAW冒险

本文详细介绍了在RISC-V五级流水线CPU设计中,如何通过Verilog实现数据前递(Data Forwarding)机制来解决写后读(RAW)数据冒险。文章对比了基础的流水线阻塞方案,并通过代码示例和ModelSim波形分析,展示了数据前递如何有效消除流水线气泡,显著提升CPU性能。

h0i1j2k3l的博客 403

指令级并行--计算机体系结构

参考书:《计算机体系结构量化研究方法》 作者:John L. Hennessy 一、基本概念 几乎所有处理器都使用流水线来重叠指令的执行过程,以提高性能。由于指令可以并行执行,所以指令之间可能实现的这种重叠称为指令级并行(ILP)。 ILP大体有两种不同开发方法 1) 依靠硬件来帮助动态发现和开发并行 2) 依靠软件技术在编译时静态发现并行 基本块:一段顺序执行代码,除入口外没有其他转入分支,除出口外没有其他转出分支 对于一段指令可能相互依赖,所以在基本块中可以开发的重叠数量可能要少于基本块的平均大小,为了

qq_42824983的博客 5359

期末复习【计算机系统结构】

期末复习【计算机系统结构】

小心星的博客 5604
上一篇: Computer Architectrure: Quantitative Approch 第三章第四节
下一篇: Computer Architectrure: Quantitative Approch 第三章第七节
CoCo_DY
博客等级 码龄11年 6粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值