可避免写后读的危险的存储器指令的发出和执行的制作方法

文档序号:6478266阅读:376来源:国知局
专利名称:可避免写后读的危险的存储器指令的发出和执行的制作方法
技术领域
本发明涉及一种用于在计算机系统中发出及执行指令的方法和装置。
背景技术
现今处理器的很大一部分复杂性可归因于试图掩饰存储器访问的等待时间。多线程、非顺序处理、预取存储器数据、预测执行皆为这种例子。技术发展趋势表明存储器速度无法赶上处理器速度。尽管现在的存储器设计提供了有限的流水线处理及层次结构,但本申请人于一共同未决申请中揭示一种在恒定带宽下具有线性等待时间函数的可伸缩式流水线层次结构。与本申请同时提交的共同未决申请、IBM公司文档编号YOR920010439US1、标题为“可伸缩式存储器”,其全部内容作为参考资料并入本申请。然而,现在的处理器无法利用此种不受限制的流水线结构,因为这些处理器倾向于记忆未完成的存储器请求。因为处理器仅具有有限的资源,这使存储器流水线的利用受到极大的限制。该些资源包含有限数量的缓冲器,该些缓冲器存储与一标记相关的指令的信息。以IBM公司的Power PC处理器为例,其至多能具有8至16个未完成的存储器操作,而其它竞争厂商的处理器受更大的限制。此项限制的存在,是因为处理器具有专用资源以记忆待处理的存储器请求,并于数据到达后指明数据的下一步处理。举例而言,当一针对已发出的存储器指令之响应从计算机系统的存储器返回时,该响应将只包含由存储器获取之数据及存储器标记。为执行该发出的指令,使用该标记以获取存储在处理器的缓冲器中的操作码及目标地址。另一限制为处理器中的寄存器数量有限,及处理器不能对任何不存在于寄存器中的数据进行操作。现今的处理器仅当在处理器的寄存器中存在操作数时才能执行,因此寄存器数量限制了可同时执行的指令数目。

发明内容
根据本发明的一方面,提供了一种处理器,该处理器能发出可以流水线方式处理的、不限数量的存储器请求。此一方面的实现是通过组织所有指令来处理来自存储器的数据,并以足够的信息来封装存储器请求,以便独立地处理返回的数据。该方面将处理器的指令发出部件及执行部件分开,且任一该部件维持极少量的状态信息,并以近似“无状态”的方式运行。该极少量状态信息包含一程序计数器及一些栅栏计数器(fence counter)。
本发明的另一方面是在相应的写至存储器之前,避免从存储器中读取数据,即避免已知的写后读之危险。此方面在处理器发出大量指令的时候尤其重要,其中所有发出的指令尚未执行,即存在大量尚未完成的写入至存储器的操作。在使用上文提及的共同未决申请中公开的线性存储器时可能发生上述大量指令,该共同未决申请及本申请皆转让给相同的受让人。
本发明通过维持一栅栏计数器或者说用于存储器中若干区域中的每一个区域的计数器,来防止写后读的危险,其中使用该计数器值来控制处理器发出进一步的指令。依据本发明,当发出一指定某一特定存储器区域的栅栏指令时,若该特定存储器区域的计数器值超过一阈值时,将不再发出进一步的指令。每一存储器区域的计数器值于每次发出一其目标位置位于该区域内的指令时增加;在每次执行一指令以写入该存储器区域时减少。该阈值通常设置为零。


图1所示为根据本发明的可伸缩式处理器的示意图;图2所示为当一相应的写入操作之前提交一读取操作时,所发生的写后读之危险的示意图;图3所示为根据本发明的处理器中的发出单元及执行单元的算法;图4所示为可与本发明之处理器一起使用的线性存储器系统的示意图;图5所示为控制器中用以传递对请求的响应至处理器的逻辑的流程图;及图6所示为一状态图,其中每一状态指出存储于一控制器di中的各缓冲器中的响应的数目。
具体实施例方式
图1所示为可伸缩式处理器系统100的一般示意图。该系统使用先前提及的IBM公司文档编号YOR920010439中揭示的线性存储器16。为方便起见,本申请的发明人将该存储器扩展成具有用于读取请求的一端口3及用于写入请求的两端口4。此种作法纯粹用以匹配能在每一周期中传送两结果的线性存储器16。两个执行单元17独立耗用这些结果14,及独立地提交写入请求。此种组织确保该些线12上的请求不会相互干扰。
向上路径分割为三个并行的路径11-12,其中一路径11传送读取请求至存储器中,而其它两路径12传送写入请求至该存储器中。此种作法纯粹为方便起见,而不会以任何方式增加输入带宽。
读取请求传送两个目标地址x及y。该读取请求首先行进至较早位置以收集数据,并进一步在向上路径中向上行进到达第二位置,以收集第二部分数据。其结果在向下路径13行进,传送被请求的一对数据项。此种方式导致在该些路径上的等待时间的恒定增加,但不会以任何方式改变带宽要求。
指令格式处理器将不具有寄存器,并对其所有数据使用一线性存储器层次结构-最低级表示寄存器。指令的一般形式为op(x,y.z),其中x、y、z为存储器位置的地址,且其语义为对来自位置x及y的数据执行操作(op)并将结果存储至位置z。对于一元操作,可省略第二操作数。一经常使用的一元指令为move(x,z)指令,该指令复制位置x的数据至位置z。
指令发出及执行参见图1,处理器9包含发出指令50的单一发出单元19及两个执行单元17,当获得数据时上述任一执行单元都能执行任何操作。数个发出及执行单元能在单一硬件芯片上以硬件实现。一指令经历两个阶段,即发出阶段及执行阶段。在发出阶段中,一个双操作数取被提交至线性存储器10中。操作码及目的地信息被附加于请求上,并与数据一同返回。当存储器返回该双操作数数据时,执行阶段开始。每一执行单元接收操作数数据14、执行操作及提交写入请求至存储器10以存储结果。各指令以与其在程序中的排列次序相同的次序发出。因为除了这些指令所指定的外,存储器不会有任何其余的数据移动,程序得以充分控制存储器,并在需要数据时经由发出移动指令迫使数据更接近处理器,藉此显性地进行存储器管理。存储器的流水线性质便于在执行其它指令时,同时移动数据。典型地,当使用本发明时,程序设计者在处理器需要数据时,会使用移动指令迫使数据更接近该处理器。
写后读之危险因为发出单元及执行单元并行执行,必须保证对一位置的写入操作的提交应发生在一相应的对该位置的读取操作被提交之前。参阅图2的说明。对于指令op(x,y,z)而言,在发出与执行该指令的时间间隔中,写入至z的请求被称为未完成的。如下文中说明的,可经由追踪未完成的至存储器的诸区域的写入,来防止写后读的危险。图2中的实线路径说明移动指令21如何执行。当该移动指令发出时,位置y被读取,并且数据流动至执行单元17。在该执行单元执行时,该结果被送至并存储在位置x。然而,发出单元并行地进行,并在发出上述指令之后发出其它指令。ADD指令22是一随后指令的例子,该指令使用位置x且其路径以虚线11a说明。若该ADD法指令在先前的储存至位置x发生之前发出,将会有危险。
栅栏计数器处理器配置有一组有限数目的栅栏计数器。每一栅栏计数器与存储器的一区域相关。通过将这些区域的大小选择为2的乘方,则需要logN个栅栏计数器,这样,在实践上维持logN计数器并不是严重的限制。参考图3,当每次发出如op(x,y,z)的一指令时(步骤31),与包含z的范围相关的栅栏计数器值会增加(步骤36),并且将一请求送至存储器,以读取例如位置x及y中的数据。参考图3中的步骤37。然后,例如将获得的数据(数据1,数据2)传送至执行单元,如图3中的步骤38所示。当执行单元完成该操作(步骤33),亦即op(数据1,数据2,z),并提交一写入至位置z的请求(步骤33),相应的栅栏计数器值(图1中的18)会减少(步骤34)。因此,栅栏计数器包含未完成的至其相关范围中的位置的写入的数量。栅栏设置是通过程序(按释放一致性模型的方式),以在合适处插入一形式为“fence(存储器区域)”的特殊指令而显性地完成。参考图2中的步骤23。当发出单元32遇到一栅栏指令时,该发出单元等候(步骤35)直到相应的栅栏计数器值变为零。程序可利用此种机制,来防止读-写危险,并且可以通过以明智的方式选择栅栏操作的范围及位置而更具效率。典型地,计数器是硬件实现的。
极端的例子是在每个操作之后,继以该操作目标位置上的一栅栏指令。尽管这可以正确地工作,其程序执行却几近顺序的方式。程序能被组织为积累尽可能多的写入一区域中的指令,并随后在对该区域的任何位置进行访问前发出一栅栏指令。能开发编译技术以明智地选择用于栅栏操作的位置。
图4说明可伸缩式处理器系统100的一般示意图。该处理器系统使用线性存储器16。为方便起见,本发明人对存储器进行了扩展以具有用于读取请求的一端口3及用于写入请求的两端口4。此种作法纯粹用以匹配能在每一周期中传送两结果的线性存储器16。两执行单元17独立耗用这些结果14及提交写入请求。此种组织确保该些线12上的诸请求不会相互干扰。
读取请求携有两个目标地址x及y。该读取请求首先行进至较早位置,收集数据并进一步在向上路径中向上行进到达第二位置以收集第二部分数据。结果在向下路径13行进,传送该请求的一对数据项。
建议的存储器系统10的结构如图4所示。为方便说明起见,系统显示为具有以一维排列的构建块序列。该些块以位于处理器的L1开始编号,并随着远离该处理器而增加编号。每一第i个构建块Li具有单位存储器,以mi表示,及两个控制器,以ui及di表示。所有的控制器ui经由单一链路5相连而形成“向上路径”,其传递由处理器发出的请求至存储器单元。控制器di经由一对链路7相连而形成“返回路径”,并传递来自存储器单元的响应至处理器。此设计方式能在向上路径上支持每一单位时间中来自处理器的一请求,但要求处理器能沿着返回路径在每一单位时间中接收多至两个响应。因此,此种设计要求输出带宽为输入带宽的两倍。此外,显示了单一处理器9也连接至此存储器系统。如一相关申请中描述的处理器能与本发明之存储器系统一同使用,该相关申请是本申请的受让人与本申请同时提交的。存储器请求指定一目标存储器单元地址、操作(读取/写入)以及数据(如果为写入操作时)。就尺寸为n的存储器而言,目标地址为介于1至n的任一整数。而任一大于n的数字能用来模拟一无操作(亦即处理器不提交任何真正的请求)。
请求及响应也携有存储器不解释的附加信息。举例而言,如处理器执行op(x,z)形式的指令,其中x及z为存储器位置的地址,则其语义为在来自存储器位置x的数据上执行操作(op),及将结果存储至存储器位置z。对于此指令,提交的该存储器请求的形式为[read,x,no-data,<op,z>]。而对此请求的响应的形式为[read,x,data,<op,z>],其中“data”为从位置x所取得的数据。此响应于返回路径中通过一系列的第二控制器而传送到处理器。在所显示的例子中,当处理器接收到该响应时,在数据上执行操作,以取得一结果,比如说w。而后,另一请求由处理器通过一系列位于向上路径的第一控制器传送,以将结果w存储在存储器位置z。该请求的格式可以象[write,z,w,no-info],其意味着在位置z存储数值w。
每一具有目标地址i之请求于向上路径中行进,且其副本到达每一层级的存储器单元。存储器单元mi根据操作来读取或存储数据,并将数据传送至控制器di。写入操作于此处终止,不产生任何响应,而读取操作使该请求转换成一响应,该响应沿着返回路径行进直至到达处理器。若我们假设在通信链路上行进的单位时间及读取存储器的单位时间,则对于目标地址i之读取请求于行进期间并无阻塞的情况下花费2i+1单位时间。控制器设计成处理阻塞,并确保请求或响应流符合前节所述的需求。参考图5,用于ui、mi、及di的详细逻辑于下文中说明每一周期中的操作见图4●对于ui所接收的每一请求而言,一副本传送至mi,且另一副本被传送至ui+1。于顶点时(i为n时)简单地舍弃该第二副本。
●对于一读取操作把数据从存储器复制至请求中、或对于一写入操作把数据从请求复制至存储器中之后,mi总是传送请求至di。
●如图4所示,di具有三个以FIFO(先进先出)队列组织的内部缓冲器6。
每一周期开始时,di将任何现存于始自di+1的两个链路上的对请求的响应传送至其内部缓冲器中。而后,使用下列算法(见图5的流程图)以将响应放置在至di-1的两个外出链路上1.如果来自mi的请求是对位置i的读取,则将该请求转换为一响应并放置在于外出链路上。此外,来自di的内部缓冲器的一个响应(如果有的话)被移除,并放置在外出链路上(参见图5中的51)。
2.如果来自mi的请求是写入至位置i(52),或请求之目标为一更高位置,则多至两个来自di的诸内部缓冲器的响应(如果有的话)被移除,并放置在外出链路上(54)。
3.如果来自mi的请求是对一更低位置的(55),则来自di的诸内部缓冲器的一个响应(如果有的话)被移除,并置放在外出链路上(56)。
模型的特性现在说明伸缩性所需的两特性每一单元中的恒定缓冲器大小,及线性的存取等待时间●任何di的内部缓冲器大小永远不会超过3。图6为用于xi的可能转换,其中xi为每一周期后di中的已填充的缓冲器数目。状态xi=3的不变性表明在该状态下,最多一个响应可以通过进入的链路而进入,而这确保了xi永远不会超过3。为显示此不变性,我们考查两种可能的向状态xi=3的转换考虑向状态xi=3的第一种转换。该转换发生在这样的时候,此时初始xi=2,及在来自di+1之链路上的两进入的弧线(参见图4中的7)都携有响应,且对mi之请求是对于位置I的或更低。此方式确保在下一周期中,在来自di+1的进入的弧线上,至多具有一响应。这是因为mi+1将在下一周期中处理mi在此周期中处理的相同响应的副本,因而di+1执行上述算法之第三项,只输出一个响应(参见图5中的55及56)。现在考虑向状态xi=3的第二种转换。此转换发生于这样的时候,此时初始xi=3,及存在来自di+1的一个进入的请求,且针对mi之请求是对于位置i的或更低。此方式再次确保在下一周期中,在来自于di+1的进入的弧线上至多具有一响应。
●对位置i的读取请求将于4i+1个周期内返回一相应响应至处理器。对读取请求的响应在i+1个周期后到达di,因为其路径长度为i+1且于这些路径上并无延迟。当控制器di执行算法之第一项时,立即将其放置在外出的弧线上。依据该算法,所有缓冲器皆以FIFO顺序清空,并在每一周期中至少移除来自一缓冲器的一响应。因而,来自di的响应在其到达处理器之前最大能经历3i单位的延迟。因此于向上路径中传送一请求及于返回路径中传送相应响应至处理器的总延迟至多为4i+1。
我们观察到本发明设计能维持每一位置上的存储器操作次序,而未指定不同位置上完成操作的次序。此推荐的存储器系统能以并入存储器芯片中的标准存储器逻辑加以执行。
权利要求
1.一种处理计算机系统中的指令的方法,该方法包括确定从该处理器发出的、目标为一指定存储器区域的未完成的写入指令的数目是否超出一阈值;以及发出一指定该存储器区域的栅栏指令,这样,直到目标为该指定区域的未完成写入指令的数目低于该阈值时,才由该处理器发出进一步指令。
2.一种处理计算机系统中的指令的装置,该装置包括一发出单元,用于确定从该处理器发出的未完成的写入指令的数目是否超过一阈值,并且用于发出指定存储器区域的栅栏指令,这样,直到至该指定区域的写入指令的数目低于该阈值时,才由该处理器发出进一步指令。
3.一种处理指令的系统,该系统包括一存储器,用于存储数据;一发出单元,用于响应若干指令中的每一指令,从该存储器中获取操作数数据,且传送该每一指令的操作码及该每一指令的目标位置,而不将其存储于该存储器或该发出单元中;以及一执行单元,用于根据该操作码对该数据进行操作,以执行该若干指令中的每一指令,并且用于将对该数据的该操作结果存储至该存储器中由该目标位置指定的一位置,其中该目标位置、该操作码及该操作数数据是由该执行单元接收的。
4.一种处理计算机系统中指令的方法,该方法包括响应于若干指令中的每一指令从一存储器中获取一操作数数据,并且传送该操作数数据、一操作码及一目标位置至与该系统相关的一执行单元中;以及根据该操作码对该操作数数据进行操作,以执行每一指令,并且将对该操作数数据的该操作的结果存储至该存储器中由该目标位置指定的一位置。
5.一种处理计算机系统中的存储器指令的方法,该方法包括响应于若干存储器指令中的每一指令从一存储器中获取一操作数数据,并且传送该操作数数据、一操作码及一目标位置至与该系统相关的一执行单元中,并且根据该操作码对该操作数数据进行操作,以执每一指令,并且将对该操作数数据的该操作的结果存储至该存储器中由该目标位置指定的一位置;以及发出指定一存储器区域的栅栏指令,这样,直到至该指定区域的写入指令数目低于该阈值时,才由处理器发出进一步指令。
6.一种处理指令的系统,该系统包括一存储器,用于存储数据;一发出单元,用于响应若干存储器指令中的每一存储器指令,从该存储器中获取操作数数据、该每一存储器指令的一操作码及该每一存储器指令的一目标位置;一执行单元,用于根据该操作码对该数据进行操作,以执行该若干存储器指令中的每一指令,并且将对该数据的该操作的结果存储至该存储器中由该目标位置指定的一位置,其中该目标位置、该操作码及该操作数数据由该执行单元通过该存储器从该发出单元接收;以及该发出单元还发出用于指定存储器区域的栅栏指令,这样,对于每一该指定区域,直到至该每一区域的未完成写入指令的数目低于一相应阈值时,才发出进一步指令。
7.一种处理计算机系统中指令的方法,该方法包括当该系统的一处理器发出一存储器指令时,增加与一存储器区域相关的一计数器值,该存储器区域包含该发出的指令的一目标位置所指定的一存储器位置,每一存储器指令用于读取一存储器中的数据或写入数据至一存储器中;当该系统的一处理器执行一存储器指令时,减少与一存储器区域相关的计数器值,该存储器区域包含该执行的指令的一目标位置所指定的一存储器位置;以及发出一指定存储器区域的栅栏指令,这样,直到与该指定区域相关的该计数器值低于一阈值时才发出进一步指令。
8.一种处理计算机系统中指令的装置,该装置包括当该系统的一处理器发出一存储器指令时,增加与一存储器区域相关的一计数器值,该存储器区域包含该发出的指令的一目标位置所指定的一存储器位置,每一存储器指令用于读取一存储器中的数据或写入数据至一存储器中;当该系统的一处理器执行一存储器指令时,减少与一存储器区域相关的一计数器值,该存储器区域包含该执行的指令的一目标位置所指定的一存储器位置;以及发出一栅栏指令,这样,直到与该指定区域相关的该计数器值低于一阈值时才发出进一步指令。
9.一种处理计算机系统中指令的方法,该方法包括当该系统的一处理器发出一指令时,增加与一存储器区域相关的一计数器值,该存储器区域包含该发出的指令的一目标位置所指定的一存储器位置,每一指令用于读取一存储器中的数据或写入数据至一存储器中;当该系统的一处理器执行一存储器指令时,减少与一存储器区域相关的一计数器值,该存储器区域包含该执行指令的一目标位置所指定的一存储器位置,其中每一发出的指令包含由该存储器取得的数据、一操作码及目标位置;以及发出一指定存储器区域的栅栏指令,其中直到与该指定区域相关的该计数器值低于一阈值时才发出进一步指令。
10.一种处理计算机系统中指令的装置,该装置包括当该系统的一处理器发出一指令时,增加与一存储器区域相关的一计数器值,该存储器区域包含该发出指令的一目标位置所指定的一存储器位置,每一指令用于读取一存储器中的数据或写入数据至一存储器中;当该系统的一处理器执行一指令时,减少与一存储器区域相关的一计数器值,该存储器区域包含该执行指令的一目标位置所指定的一存储器位置,其中每一发出的指令包含由该存储器取得的数据、一操作码及目标位置,因而每一发出的指令的执行可以独立于不包括在该每一发出的指令中的任何信息;以及发出指定一存储器区域的栅栏指令,其中直到与该指定区域相关的该计数器值低于一阈值时才发出进一步指令。
全文摘要
一种用于发出及执行计算机系统中的存储器指令的方法和装置,以使发出至一高度流水线式存储器的请求数目最大化,以及避免在至存储器(10)的相应写入之前,从存储器(10)中读取数据。存储器划分为数个区域,每一区域与一栅栏计数器(18)相关联,该栅栏计数器在每次发出目标为该存储器区域的存储器指令时增加,并在每次有对该存储器区域的写入时减少。当发出一栅栏指令后,如果用于栅栏指令中所指定的存储器区域的计数器值超出一阈值,则不发出进一步的存储器指令(23)。当执行了足够数量的未完成的发出的指令后,该计数器值将减少到低于该阈值,然后可以发出进一步的指令。
文档编号G06F9/30GK1507587SQ01823233
公开日2004年6月23日 申请日期2001年12月21日 优先权日2001年5月11日
发明者G·比拉尔迪, P·C·帕特耐克, K·埃卡纳德汉姆, G 比拉尔迪, 傻潞耗, 帕特耐克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1