处理器指令窗口中的指令块的基于年龄的管理的制作方法

文档序号:13950608阅读:142来源:国知局
处理器指令窗口中的指令块的基于年龄的管理的制作方法

背景技术
:指令集架构(isa)和处理器的设计者进行功率和性能折衷。例如,如果设计者选择具有传递更高性能的指令的isa,则处理器的功耗也可能更高。备选地,如果设计者选择消耗较低功率的指令的isa,性能可能会更低。功耗可能被绑定到在执行期间由指令使用的处理器的硬件资源量,例如算术逻辑单元(alu)、高速缓存线、或寄存器。大量这样的硬件资源的使用可能以更高的功耗的代价传递更高的性能。备选地,少量这样的硬件资源的使用可能以较低的性能的代价导致较低的功耗。编译器可用于将高级代码编译为与isa和处理器架构兼容的指令。技术实现要素:一种基于指令块的微架构中的处理器核包括控制单元,该控制单元显式地跟踪指令块状态,该指令块状态包括针对已经从指令高速缓存中取回的当前块的年龄或优先级。跟踪的指令块以年龄顺序或优先顺序列表被维持。当指令块被控制单元标识用于提交时,针对匹配检查该列表,并且匹配的指令块可以被刷新而不用从指令高速缓存中重新取回。如果匹配没有被找到,则可以基于年龄或优先级来提交和替换指令块。这种指令状态跟踪通常消耗很少的开销,并且使得指令块能够被重用以提高处理器核效率。控制单元不是像传统的重新排序或循环缓冲区那样基于它们的动态年龄严格地来处理指令块,而是实现控制流独立性,以能够实现指令块被无序地处理,使得可以跳过错误预测的指令块(这会以其他方式浪费处理周期)。提供本
发明内容是为了以简化的形式介绍将在以下具体实施例部中进一步描述的一些概念的选择。本
发明内容并不旨在标识要求保护的主题的关键特征或必要特征,也不旨在用作确定所要求保护的主题的范围的辅助手段。此外,要求保护的主题不限于解决本公开的任意部分中提到的任意或全部缺点的实现。附图说明图1示出其中编译器提供在包括多个处理器核的架构上运行的编码指令的示意性计算环境;图2是示例性处理器核的示意性微架构的框图;图3示出了块头部的示意性布置;以及图4-15是示意性方法的流程图。相同的附图标记指示附图中的相同的元件。除非另有说明,元件不是按比例绘制的。具体实施方式图1示出了示意性计算环境100,指令块的当前基于年龄的管理可以与该计算环境100一起被利用。该环境包括编译器105,该编译器可用于从程序115生成编码的机器可执行指令110。指令110可由处理器架构120处理,处理器架构120被配置为处理包含例如在4和128个指令之间的可变大小的指令块。处理器架构120通常包括在分区块的配置中由片上网络(未示出)互连并还与一个或多个2级(l2)高速缓存(代表性地由附图标记130指示)互操作的多个处理器核(代表性地由附图标记125指示)。尽管核和高速缓存的数量和结构可以根据实现而变化,但是应该注意,物理核可以在程序115的运行时期间在被称为“组成”的过程中被一起合并到一个或多个更大的逻辑处理器中,其使得更多的处理能力用于程序执行。备选地,当程序执行支持适当的线程级并行性时,核125在被称为“分解”的进程中可以被拆分以独立工作并执行来自独立线程的指令。图2是示意性处理器核125的一部分的简化框图。如图所示,处理器核125可包括前端控制单元202、指令高速缓存204、分支预测器206、指令解码器208、指令窗口210、左操作数缓冲区212、右操作数缓冲区214、算术逻辑单元(alu)216、另一alu218、寄存器220、以及加载/存储队列222。在一些情况下,总线(由箭头指示)可以携带数据和指令,而在其他情况下,总线可以携带数据(例如操作数)或控制信号。例如,前端控制单元202可以经由仅携带控制信号的总线与其他控制网络进行通信。尽管图2示出了在特定布置中被布置的用于处理器核125的一定数量的示意性部件,但是根据特定实现的需要,可以存在不同布置的更多或更少的部件。前端控制单元202可以包括被配置为控制通过处理器核和电路的信息流以协调其内的活动的电路。前端控制单元202还可以包括用于实现有限状态机(fsm)的电路,在其中状态枚举处理器核可以采用的操作配置中的每一个。前端控制单元202中的fsm电路使用操作码(如下所述)和/或其他输入(例如硬件电平信号)可以确定下一状态和控制输出。因此,前端控制单元202可以从指令高速缓存204取回指令用于由指令解码器208处理。前端控制单元202可以通过控制网络或总线与处理器核125的其他部分交换控制信息。例如,前端控制单元可以与后端控制单元224交换控制信息。在一些实现中,前端控制单元和后端控制单元可以被集成到单个控制单元中。前端控制单元202还以可协调和管理处理器架构120(图1)的各种核和的其他部分的控制。因此,例如,指令块可以在多个核上同时被执行,并且前端控制单元202可以经由控制网络与其它核交换控制信息,以根据需要确保各种指令块的执行的同步。前端控制单元202还可以处理关于被原子地执行的指令块的控制信息和元信息。例如,前端控制单元202可以处理与指令块相关联的块头部。如下面更详细地讨论的,块头部可以包括关于指令块的控制信息和/或元信息。相应地,前端控制单元202可以包括组合逻辑、状态机和临时存储单元,诸如用于处理块头部中的各个字段的触发器(flip-flops)。前端控制单元202可以在每个时钟周期提取并解码单个指令或多个指令。解码的指令可以被存储在指令窗口210中,指令窗口210被实现在作为缓冲区的处理器核硬件中。在一些实现中,指令窗口210可以支持指令调度器230,该指令调度器230可以维持每个经解码的指令(例如预测和操作数)的输入的就绪状态。例如,当其所有输入(如果有的话)准备好时,给定的指令可以被指令调度器230唤醒并准备好发布。在发布指令之前,根据需要,可以将指令所需的任意操作数存储在左操作数缓冲区212和/或右操作数缓冲区214中。取决于指令的操作码,可以使用alu216和/或alu218或其他功能单元在操作数上执行操作。alu的输出可以存储在操作数缓冲区中,或者存储在一个或多个寄存器220中。以数据流顺序发布的存储操作可以在加载/存储队列222中排队,直到指令块提交为止。当指令块提交时,加载/存储队列222可以将提交块的存储写入存储器。分支预测器206可以处理与分支出口类型有关的块头部信息,并将该信息作为进行分支预测中的因素。如上所述,处理器架构120通常利用以块的形式组织的、被原子地获取、执行、并提交的指令。因此,处理器核可整体地获取属于单个块的指令,将它们映射到处理器核内的执行资源,执行指令,并以原子方式提交它们的结果。处理器既可以提交所有指令的结果,也可以取消整个块的执行。块内的指令可以按照数据流顺序执行。另外,处理器可以允许块内的指令使用消息或其他合适形式的通信彼此直接通信。因此,产生结果的指令可能不是将结果写入寄存器文件,而是将该结果传送给块中的消耗该结果的另一指令。举例来说,将存储在寄存器r1和r2中的值相加的指令可以表示为如下面的表1所示:表1以这种方式,源操作数不是用指令指定的,而是由以加指令为目标的指令指定的。编译器105(图1)可以在指令110的编译期间明确地对控制和数据依赖性进行编码,从而从重新发现运行时的这些依赖性来释放处理器核。这可以有利地导致在这些指令的执行期间减少处理器负载和节能。作为示例,编译器可以使用预测来将所有的控制依赖转换成数据流指令。使用这些技术,对耗电的寄存器文件的访问次数可以被减少。下面的表2示出了这样的指令的通用指令格式的示例:表2操作码prbidxop目标1目标2每个指令可以具有合适的大小,诸如32位、64位或另一大小。在表2所示的示例中,每个指令可以包括操作码字段、pr(预测)字段、bid(广播id)字段、xop(扩展操作码)字段、目标1字段、和目标2字段。操作码字段可以为指令或指令块指定唯一的操作码,例如加、读取、写入、或乘法。pr(预测)字段可以指定与指令相关的任意预测。例如,可以使用两位pr字段,如下所示:00-不可预测,01是预留的,10是预测为假,11是预测为真。因此,例如,如果只有在比较结果为真的情况下才执行指令,则该指令可以在执行比较的另一指令的结果上被预测。bid(广播id)字段可以支持将操作数发送到块中的任意数量的消费者指令。一个2位的bid字段可以被用来编码广播信道,在广播信道上对指令接收其操作数中的一个。xop(扩展操作码)字段可以支持扩展操作码的类型。目标1和目标2字段可以允许多达两个将被编码的目标指令。目标字段可以指定生产者指令的结果的消费者指令,从而允许指令之间的直接通信。每个指令块可以具有与该指令块相关联的特定信息,诸如与该块有关的控制信息和/或元信息。这个信息可以在将程序编译成指令110期间由编译器105生成用于在处理器架构120上执行。这些信息中的一些信息可以在指令块的编译期间由编译器提取,然后检查运行期间的指令的属性。另外,与指令块相关联的信息可以是元信息。举例来说,该信息可以被提供给可使用特殊指令或指令的处理器核,其提供与寄存器或其它存储器有关的目标编码,该目标编码可具有与指令块相关联的相关信息。在特殊指令的情况下,这些指令的操作码字段可用于传送与指令块有关的信息。在另一示例中,这样的信息可以被维持为处理器状态字(psw)的一部分。例如,该信息可以有利地帮助处理器更高效地执行该指令块。可以使用块头部、专用指令、存储器引用位置、处理器状态字(psw)、或其各种组合向处理器核提供各种类型的信息。在图3中示出示意性的指令块头部300。在该示意性示例中,块首部300是128位,并且从块的程序计数器的偏移量0处开始。还显示了每个字段的相应开始和结束。这些字段在下面的表3中描述:表3尽管图3中所示和表3中所描述的块头部包括多个字段,但是其旨在是示意性的,并且其他字段设置可以被用于特定实现。在示意性示例中,编译器105(图1)可以选择用于包括在块首部中或者用于特定指令的信息,其可以基于指令的性质和/或基于处理请求的性质(诸如高性能或低功率)向处理器核提供这样的信息。这可以有利地允许在性能和功耗之间折衷的更加最优的平衡。对于某些类型的处理应用(诸如具有大量核的高性能计算),大量的信息可能是一个期望的选项。备选地,对于其他类型的处理应用(诸如物联网中使用的嵌入式处理器、移动设备、可穿戴设备、头戴式显示器(hmd)设备或其他嵌入式计算类型的应用),较少的信息可能是期望的选项。使用块首部或特殊指令传送的信息的范围可以根据块中指令的性质来裁剪。例如,如果指令块包括以重复(“recurring”)方式执行的循环,则可能需要更广泛的信息来封装与该块相关联的控制信息。附加控制信息可以允许处理器核更高效地执行循环,从而提高性能。备选地,如果存在将很少被执行的指令块,则相对较少的信息就足够了。例如,如果指令块包括几个预测的控制循环,则可能需要更多的信息。类似地,如果指令块具有大量的指令级并行性,则可能需要更多信息作为块头部或特殊指令的一部分。块头部中的附加控制信息或特殊指令可以用于例如有效地利用指令块中的指令级并行性。如果指令块包括多个分支预测,则可能需要更多的信息。有关分支预测的附加控制信息通常将更高效地增强代码执行,因为其可能导致更少的管道刷新。应当注意,与块首部中的字段对应的功能可以被组合或者被进一步分离。类似地,特殊指令可以提供与图3和表3中所示的字段中的任意一个有关的信息,或者它可以组合来自这些字段的信息。例如,尽管图3和表3的示意性块头部包括分离的标识符字段和大小字段,但是这两个字段可以组合成单个字段。同样,当解码时,单个特殊指令可以提供关于指令块的大小的信息和标识符字段中的信息。除非另有说明,否则特殊指令可以被包括在指令块的任意地方。例如,block_size#大小指令可以包含直接字段,该直接字段包括指令块大小的值。直接字段可以包含提供大小信息的整数值。备选地,直接字段可以包括与大小信息有关的编码值,使得大小信息可以通过对编码值进行解码来获得,例如通过查找大小表中的值,其可以使用逻辑、寄存器、存储器、或码流中的一个来表达。在另一示例中,block_id#标识符特殊指令可以传送块标识符号码。分离的数学函数或基于存储器的表可以将块标识符映射到块头部的存储器地址中。作为这种指令的一部分传送的块标识符对于每个指令块可以是专用的。在另一示例中,block_hdr_id#标识符指令可以传送块头部标识符号。分离的数学函数或基于存储器的表可以将块标识符映射到块头部的存储器地址。作为这种指令的一部分传送的块标识符可以由具有相同头部结构或字段的几个指令块共享。在另一示例中,block_info#大小、#出口类型、#存储掩码、#写入掩码指令可以提供关于指令的枚举字段的信息。这些字段可以对应于上面关于表3所讨论的字段中的任意一个。根据给定实现的要求,可以对块头部结构和格式以及特殊指令进行其他改变。例如,包括与指令块的特性有关的信息的附加字段可以被提供。基于指令块的执行的频率,可以包括特定的字段。包括在块头部结构中的字段,或者经由特殊指令或先前讨论的其他机制提供的信息可以是特定处理器或处理器系列的公共可用标准指令集架构(isa)的一部分。这些字段的一个子集可能是对isa的专有扩展。该字段中的某些位值可能是针对处理器的标准isa的一部分,但该字段中的某些其他位值可能会提供专有功能。该示例性字段可以允许isa设计者向isa添加专有扩展而不完全公开与专有扩展相关联的性质和功能。因此,在这种情况下,由isa设计人员分发的编译器工具将支持该字段中的专有位值、完全分离的专有字段、或特殊指令。这样的领域的使用可能与某些处理器设计专有的硬件加速器特别相关。因此,程序可能包括块头部字段或不可识别的特殊指令;但是该程序还可以包括对该字段进行解密或对该指令进行解码的配方。编译器105(图1)可以处理指令块,其通常被配置为由一个或多个处理器核原子地执行,以便于生成关于包括元信息和控制信息的关于指令块的信息。一些程序可能仅针对一个isa(例如,与物联网处理器、移动设备、hmd设备、可穿戴设备或其他嵌入式计算环境一起使用的isa)进行编译。编译器可以采用诸如静态代码分析或代码分析的技术来生成与指令块相关的信息。在某些情况下,编译器可能会考虑诸如指令块特性和其执行频率等因素。指令块的相关特性可以包括,例如,但不一定限于:(1)指令级并行性,(2)循环数,(3)预测的控制指令的数量,以及(4)分支预测的数量。图4是用于管理设置在处理器核中的指令窗口中的指令块的示意性方法400的流程图。除非特别说明,图4的流程图中的方法或步骤以及附图中所示和下面描述的其他流程图中的方法或步骤不受限于特定的顺序或序列。另外,其中的一些方法或步骤可以同时发生或者执行,并且取决于这种实现的要求,并不是所有的方法或步骤都必须在给定的实现中被执行,并且一些方法或步骤可以被可选地利用。类似地,在一些实现中可以去除一些步骤以减少开销,但是这可能导致增加例如脆弱性。可以在任意给定的应用中实现的各种特征、成本、开销、性能和鲁棒性折衷可以典型地视为设计选择的问题。在步骤405中,使用例如年龄向量来显式地跟踪取回的指令块的年龄。因此,控制单元不是使用指令窗口中的、通常被隐式地用于跟踪年龄的指令块顺序(即位置),而是维持显式状态。指令块的年龄排序列表在步骤410中被维持。指令块优先级(其中在一些情况下可以由编译器确定优先级)也可以被跟踪,并且在一些实现中也可以维持指令块的优先级排序列表。在步骤415中,当指令块被标识用于处理时,搜索年龄排序列表以找到匹配的指令块。在一些实现中,针对匹配优先级排序列表也可以被搜索。如果找到匹配的指令块,则在步骤420中它可以被刷新,而不必从指令高速缓存中重新取回它,这可以提高处理器核效率。这样的刷新使能在例如程序以紧密循环执行并且指令自行分支的情况下的指令块的重用。当多个处理器核被组成大规模阵列时,这样的效率增加也可能是复合的。当刷新指令块时,指令被留在适当的位置,并且只操作数缓冲区和加载/存储队列中的有效位被清除。如果没有找到对指令块的匹配,则可以再次利用年龄排序的列表(或优先级排序的列表)来找到可以被提交以在指令窗口中针对新的指令块打开槽。例如,最老的指令块或最低优先级的指令块可以被提交(其中高优先级块可能因为存在它将来重用的可能性而可能被期望维持缓冲)。在步骤425中,新指令块被映射到可用槽中。可以使用批量分配处理来分配指令块,在批量处理中块中的指令和与指令相关联的所有资源被立即取回(即,集中)。在步骤430中,执行新的指令块,使得其指令被原子地提交。其他指令块可以按照与传统的重排序缓冲区类似的方式按照年龄的顺序执行(步骤435),以按原子方式提交它们各自的指令。图5是可以由基于指令块的微架构执行的示意性方法500的流程图。在步骤505中,处理器核中的控制单元使得取回的指令块利用连续替换或非连续替换被缓冲。在步骤510中,利用连续的指令块替换,缓冲区可以像循环缓冲区那样被操作。在步骤515中,利用非连续的指令块替换,指令块可以被无序替换。例如,在步骤520中,可以执行显式的基于年龄的跟踪,使得指令块以与上述类似的方式基于跟踪的年龄被提交和替换。在步骤525中,也可以跟踪优先级,并且所跟踪的优先级可以被用于提交和替换指令块。图6是可由在处理器核中设置的控制单元执行的示意性方法600的流程图。在步骤605中,缓冲的指令块的状态被跟踪,并且在步骤610中使用所跟踪的状态来维持指令块的列表。例如,取决于特定的实现要求,状态可以包括年龄、优先级、或其他信息或上下文。在步骤615中,当指令块被标识用于映射时,针对匹配检查列表,如步骤620所示。在步骤625中,来自列表中的匹配指令块刷新而不重新获取。在步骤630中,当匹配指令块未在列表中被找到时,则以类似于上述的方式,指令块被从指令高速缓存取回,并被映射到指令窗口中的可用槽中。图7是用于管理在处理器核中设置的指令窗口中的指令块的示意性方法700的流程图。在步骤705中,在处理器核中维持指令块大小的大小表。大小表可以用各种方式(例如,使用逻辑、寄存器、存储器、代码流或其他合适的结构之一)表示。在步骤710中,读取在指令块的头部中被编码的索引。指令块包括一个或多个解码的指令。因此,不是使用图3和表3中示出的大小字段来对指令块大小进行硬编码,而是可以使用该字段来对索引进行编码或将索引存储到大小表中。也就是说,索引可以用作指向大小窗口中的条目的指针,以使特定大小能够与指令块相关联。在大小表中包括的大小条目的数量可以根据实现而变化。可以利用更多数量的大小条目来使能更大的粒度,其在存在与给定的程序相关联的指令块大小的相对较宽分布的情况下可能是有益的,但是在典型的实现中以增加的开销为代价。在一些情况下,编译器可以选择在表中包括的大小的数量,以优化整个指令封装密度并最小化无操作的方式覆盖指令块大小的特定分布。例如,可以选择在大小表中包括的大小来匹配程序中常用的块指令大小。在步骤715中,使用索引从大小表中查找指令块大小。在步骤720中,指令块基于其大小被映射到指令窗口中的可用槽中。在一些实现中,如步骤725所示,指令窗口可以被分段成例如使用两个或更多个不同的大小的两个或更多个子窗口。分段的子窗口中的这种变化可以使能进一步适应给定的指令块大小分布,并且还可以增加指令封装密度。分段也可以在一些场景中被动态地执行。图8是可以由基于指令块的微架构执行的示意性方法800的流程图。在步骤805中,实现大小表。如上所述,大小表可以使用逻辑、寄存器、存储器、代码流或其他合适的结构之一来实现,并且可以包括对应于在由给定的程序利用的指令块的分布中通常被利用的那些大小的大小。在步骤810中,针对引用大小表中的条目的指针,检查指令块头部。在步骤815中,由表条目标识的大小被用于确定指令块在指令窗口内的放置。在步骤820中,与指令块相关联的资源被批量分配。在步骤825中当将指令块映射到指令窗口中时,在指令块首部中指定的限制被使用。这些限制可以包括例如对齐和指令窗口对缓冲指令块的容量的限制。在步骤830中,通过控制单元跟踪指令窗口中的指令块的顺序,并且在一些情况下,块可能被无序提交。例如,不是使用指令块的循环缓冲区(其中块是基于它们在指令窗口中的位置来处理的),而是可以对块进行优先级排序,使得大量使用的、或特别重要的指令块被无序处理,这可以提高处理效率。在步骤835中,在一些情况下,可以显式地跟踪指令块的年龄,并且指令块可以基于这种显式跟踪的年龄而被提交。在步骤840中指令块被刷新(即,重新使用而不从指令高速缓存重新取回指令块)。图9是可由在处理器核中设置的控制单元执行的示意性方法900的流程图。在步骤905中,以与上述类似的方式,指令窗口被配置有具有两个或更多个不同大小的多个分段。在步骤910中,针对在其中被编码的索引,检查块指令头部。在步骤915中使用索引在大小表中执行查找,并且在步骤920中基于大小查找,指令块被放置到适于块的特定大小的指令窗口分段中。在步骤925中,使用批量分配来取回与指令块相关联的资源。图10是用于管理在处理器核中设置的指令窗口中的指令块的示意性方法1000的流程图。在步骤1005中,指令块从指令高速缓存被映射到指令窗口。指令块包括一个或多个解码的指令。在步骤1010中与指令块中的指令中的每个指令相关联的资源被分配。资源通常包括控制位和操作数,并且可以使用批量分配处理来执行分配,在批量分配处理中所有资源被全部获得或取回。不是紧密耦合资源和指令,而是指令窗口和操作数缓冲区被解耦以使得它们可以通过维持资源中和块中的解码的指令中的一个或多个指针而被独立地操作,如步骤1015所示。当在步骤1020中指令块被刷新(即,重新使用而不从指令高速缓存重新取回指令块)时,则可以在步骤1025中通过跟随指针回到原始控制状态来重新使用资源。特别是当指令块被刷新而没有如通常发生的重新取回时,例如,当程序在紧密循环中执行并且指令被重复使用时,这种解耦可以提供增加的处理器核效率。通过由指针建立控制状态,资源被有效地预先验证,而不需要处理周期的额外花费和其他费用。当多个处理器核组成大规模阵列时,这样的效率增加也可能是复合的。图11是可以由基于指令块的微架构执行的示意性方法1100的流程图。在步骤1105中,指令块以新的指令块代替提交的指令块的方式被映射到指令窗口中。如步骤1110所示,映射可以受到在指令块的首部中被指定的各种限制,例如,对齐和指令窗口对缓冲指令块的容量的限制。在步骤1115,针对新指令块分配资源,这通常使用批量分配处理来实现,如上所述。在步骤1120中,控制单元跟踪指令窗口中的指令块的顺序,并且在某些情况下,块可能被无序提交。例如,不是使用指令块的循环缓冲区(在其中块是基于它们在指令窗口中的位置而被处理的),而是可以对块进行优先级排序,使得大量使用的、或特别重要的指令块被无序处理,这可以提高处理效率。在步骤1125中,指令窗口与操作数缓冲区去耦合,使得例如指令块和操作数块被独立管理(即,不使用指令和操作数之间的严格对应关系)。如上所述,通过在指令块被刷新时使得资源能够被预先验证,解耦增加了效率。图12是可以由在处理器核中设置的控制单元执行的示意性方法1200的流程图。在步骤1205中,维持指令窗口以缓冲一个或多个指令块。在步骤1210中一个或多个操作数缓冲区被维持以缓冲与指令块中的指令相关联的资源。如上所述,资源通常包括控制位和操作数。在步骤1215中使用指令和资源中的指针来跟踪状态。当指令块被刷新时,在框1220中,指针可以被跟随回到被跟踪的状态。在步骤1225中,当指令块提交时,操作数缓冲区中的控制位被清除,并设置新的指针。与上面讨论的方法一样,在步骤1230,指令窗口和操作数缓冲区被被去耦合,使得控制单元在非对应的基础上维持指令块和操作数块。图13是用于管理在处理器核中设置的指令窗口中的指令块的示意性方法1300的流程图。在步骤1305中,使用批量分配处理来分配指令块,其中块中的指令和与指令相关联的所有资源被立即(即,集中)取回。与其中指令和资源以较小的块重复取回的传统架构相比,这里的批量分配使得块中的所有指令能够被同时地且一致地管理,这可以提高处理器核操作的效率。在给定的编程构造(例如,使分支最小化的构造)使得编译器能够生成相对较大的指令块的情况下,这种改进可能甚至更加显着。例如,在一些实现中,指令块可以包含多达128个指令。指令块的批量分配还通过刷新特征来提高处理器核效率,其中,例如当程序在紧密循环中执行并且指令自行分支时,指令块被重新使用而不像通常发生的那样被重新取回。当多个处理器核组成大规模阵列时,这样的效率增加也可能是复合的。当刷新指令块时,指令被留在适当的位置,并且只清除操作数缓冲区和加载/存储队列中的有效位。这使得刷新的指令块的取回能够被完全被绕过。当指令组和资源在适当的位置时,指令块的批量分配也使能附加的处理效率。例如,操作数和显式消息可以从块中的一条指令发送到另一条指令。这样的功能在传统架构中是不使能的,因为一条指令不能发送任意东西到尚未被分配的另一条指令。生成常量的指令也可以将值锁定在操作数缓冲区中,使得它们在刷新后维持有效,因此每次指令块执行时都不需要重新生成这些值。当在步骤1310中指令块被映射到指令窗口中时,在步骤1315中,它们受制于可以通过映射策略、在块头部中指定的限制或二者而被应用的约束。在一些情况下,策略可以由编译器根据给定程序的特定要求来设置。指定的限制可以包括例如对齐限制和指令窗口对缓冲指令块容量的限制。在步骤1320中,在一些实现中,指令窗口可以被分段成相同大小或不同大小的子窗口。由于指令块大小对于给定程序通常是随机或不均匀分布的,因此分段子窗口中的这种变化可以更高效地适应给定的指令块大小的分布,从而增加指令窗口中的指令封装密度。取决于处理器核当前正在处理的块大小的分布,分段还可以在一些场景中被动态地执行。在一些实现中,指令块头部可以对索引进行编码或者包括到使用逻辑、寄存器、存储器、或码流中的一个来实现的大小表的指针。大小表可以包括指令块大小条目,使得在步骤1325中可以从表中查找指令块大小。编码的索引和大小表的使用可以通过在可用块大小中提供更多的粒度来增强指令块中的指令封装密度,以例如当块在实现分支时包括相对少数量的指令时减小无操作(无操作)的发生。图14是可以由基于指令块的微架构执行的示意性方法1400的流程图。在步骤1405中,处理器核中的控制单元应用用于处理指令块的策略。在步骤1410中使用上述批量分配处理来分配指令块,其中一次获取指令和所有相关资源。在步骤1415中,指令块被映射到指令窗口中,其中映射可能受到各种限制,诸如对准的限制和对指令窗口对在指令块的首部中指定的缓冲指令块的容量的限制,如上所述。在步骤1420,可以应用包括由控制单元跟踪指令窗口在指令窗口中的顺序的策略。例如,在某些情况下块可能不按顺序提交,而不是使用指令块的循环缓冲区(其中基于块在指令窗口中的位置来处理块)提交。在步骤1425中,可以应用包括基于优先级(其可以在一些场景中由编译器指定)来处理块的策略,使得重度使用、或者特别重要的块被乱序处理,这还可以增加处理效率。在步骤1430中,在一些情况下,可以应用包括明确跟踪指令块的年龄并且可以基于这种明确跟踪的年龄来提交指令块的策略。在步骤1435中,可以应用包括根据指令窗口中适当调整大小的槽(或窗口的分段)的可用性来映射指令块的策略。在步骤1440,可以应用包括使用循环缓冲区将指令块映射到指令窗口中的策略。在一些实现中,可以利用策略的各种组合,以便于进一步增强处理器核效率。例如,控制单元可以在策略之间动态切换,以应用为给定指令块或指令块组提供更优选操作的策略。例如,在一些场景中,使用其中指令块以连续的方式按顺序处理的循环缓存技术可能更高效。在其他情况下,乱序和基于年龄的处理可能会提供更最优的操作。图14是可以由在处理器核中设置的控制单元执行的示意性方法1500的流程图。在步骤1505中,以与上述类似的方式,指令窗口被配有具有两个或更多个不同大小的多个分段。在步骤1510中,指令块被取回,并在步骤1515中所有其相关联的资源被取回。在步骤1520中,将指令块被放置在窗口的适当分段中,该适当分段使窗口中的指令密度最大化。例如,如果编译器产生包括具有低指令计数的相对大量块的块大小的分布(例如,为了实现程序分支等),则指令窗口可以具有被具体调整大小用于小指令块的的分段。类似地,如果存在相对大量的高指令计数块(例如,用于科学和类似的应用),则分段可以是被具体调整大小用于这种较大的指令块。因此,指令窗口段调整大小可以根据特定大小分布来调整,或者在分布改变的某些情况下可以被动态地调整。在框1525中,如上所述,指令块可以受指令块头部中指定的限制。处理器指令窗口中当前基于年龄的管理指令块的各种示例性实施例现在通过说明的方式呈现,而不是作为所有实施例的详尽列表。一个示例包括一种用于管理在处理器核中设置的指令窗口中的指令块的方法,包括:显式地跟踪当前在指令窗口中被映射的指令块的年龄;将新的指令块映射到指令窗口中的可用槽中;执行新的指令块以原子地提交指令块中的指令;以及按照它们的显式跟踪的年龄的顺序执行当前被映射的指令块以原子地提交它们相应的指令。在另一示例中,该方法还包括针对每一个指令块执行批量分配,每一个指令块被从指令高速缓存取回以获得与该块中的指令中的每一个指令相关联的资源。在另一示例中,该方法还包括通过维持所取回的指令块的年龄排序列表来执行显式跟踪,其中年龄排序列表包括每个指令块对指令窗口的指针。在另一示例中,该方法还包括维持指令窗口中可用槽的列表和可用槽的地址。在另一示例中,该方法还包括标识用于提交的指令块并在年龄排序列表中搜索匹配。在另一示例中,该方法还包括当匹配被找到时刷新指令块而不重新取回指令块。另一示例包括基于指令块的微架构,包括:控制单元;一个或多个操作数缓冲区,在控制单元的控制下;以及指令窗口,所述指令窗口被配置为在控制单元的控制下存储所解码的指令块,所述控制包括以下操作:将指令块缓冲在所述指令窗口中,使得新的指令块替换所述提交的指令块,其中缓冲是用连续的指令块替换或非连续的指令块替换执行的,当利用连续替换进行缓冲时,将指令窗口作为循环缓冲区进行操作,并基于它们在指令窗口中的顺序来替换指令块,当利用非连续替换进行缓冲时,在指令窗口中无序地替换指令块。在另一示例中,基于指令块的微架构还包括用于针对指令块中的所有指令执行资源的批量分配的配置,所述资源包括在操作数缓冲区中被缓冲的控制位或操作数中的一个。在另一示例中,基于指令块的微架构还包括用于跟踪每个指令块的年龄的配置。在另一示例中,基于指令块的微架构还包括用于使用年龄向量来跟踪每个指令块的年龄的配置。在另一示例中,基于指令块的微架构还包括基于其跟踪的年龄来提交指令块的配置。在另一示例中,基于指令块的微架构还包括用于跟踪指令块的优先级并且基于其跟踪的优先级提交指令块的配置。在另一示例中,基于指令块的微架构还包括用于基于其跟踪的优先级来刷新指令块的配置。在另一示例中,刷新包括:重新使用指令块,而不从指令高速缓存中重新取回指令块。另一示例包括在处理器核中设置的控制单元,该处理器核被布置为执行用于指令块管理的方法,包括:跟踪在指令窗口中缓冲的指令块的状态,在该指令窗口中状态包括年龄或优先级;基于跟踪的状态来维持指令块的列表;标识用于映射到指令窗口的指令块;针对与所标识的指令块的匹配检查指令块列表;以及刷新列表中的匹配指令块。在另一示例中,控制单元还包括从指令高速缓存中取回指令块,并且当匹配未被找到时将取回的指令块映射到指令窗口。在另一示例中,控制单元还包括使用向量来跟踪年龄。在另一示例中,控制单元还包括基于由编译器生成的优先级标识符来维持优先级。在另一示例中,控制单元还包括维持逻辑指令窗口,该逻辑指令窗口涵盖多个处理器核,以及跟踪在逻辑指令窗口中缓存的指令块的状态。在另一示例中,控制单元还包括促进多个处理器核之间的通信的芯片上网络。上述主题仅作为说明提供,不应被解释为限制。在不遵循所图示的和描述的示例实施例和应用的情况下,并且在不脱离在以下权利要求中阐述的本公开的真实精神和范围的情况下,可以对本文描述的主题进行各种修改和改变。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1