CN107810482B - 指令块到处理器指令窗口的批量分配 - Google Patents
指令块到处理器指令窗口的批量分配 Download PDFInfo
- Publication number
- CN107810482B CN107810482B CN201680037471.7A CN201680037471A CN107810482B CN 107810482 B CN107810482 B CN 107810482B CN 201680037471 A CN201680037471 A CN 201680037471A CN 107810482 B CN107810482 B CN 107810482B
- Authority
- CN
- China
- Prior art keywords
- instruction
- block
- instruction block
- blocks
- window
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims description 47
- 239000000872 buffer Substances 0.000 claims description 33
- 238000012545 processing Methods 0.000 claims description 16
- 238000013507 mapping Methods 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 13
- 238000004891 communication Methods 0.000 claims description 4
- 238000000638 solvent extraction Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 14
- 238000012856 packing Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000007620 mathematical function Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 230000035899 viability Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
基于指令块的微架构中的处理器内核包括控制单元,控制单元通过同时提取指令块和包括控制位及操作数的相关联的资源,来以批量方式将指令分配到指令窗口中。这样的批量分配通过在执行期间在块中的所有指令上实施一致的管理和策略实施方式来支持处理器内核操作的效率提高。例如,当指令块自行向后分支时,它可以在刷新过程中被重新使用,而不是从指令高速缓存中被重新提取。由于该指令块的所有资源都位于一个地方,所以指令可以保持在合适的位置,并且只需要清除有效位。批量分配还支持通过块中的指令进行操作数共享以及指令之间显式的消息传递。
Description
背景技术
指令集架构(ISA)和处理器的设计者对功耗和性能进行权衡。例如,如果设计者选择具有递送更高性能的指令的ISA,则处理器的功耗可能也会更高。或者,如果设计者选择具有功耗较低的指令的ISA,则性能可能更低。功耗可以与在执行期间由指令所使用的处理器的硬件资源(诸如算术逻辑单元(ALU)、高速缓存线或寄存器)的数量相关。使用大量这样的硬件资源可以以较高的功耗为代价递送较高的性能。或者,使用少量这样的硬件资源可以以较低的性能为代价产生较低的功耗。编译器可以用于将高级代码编译成与ISA和处理器架构兼容的指令。
发明内容
基于指令块的微架构中的处理器内核包括控制单元,控制单元通过同时提取指令块和包括控制位及操作数的相关联的资源,来以批量方式将指令分配到指令窗口中。这样的批量分配通过在执行期间在块中的所有指令上实施一致的管理和策略实施方式来支持处理器内核操作的效率提高。例如,当指令块自行向后分支时,它可以在刷新过程中被重新使用,而不是从指令高速缓存中被重新提取。由于该指令块的所有资源都位于一个地方,所以指令可以保持在合适的位置,并且只需要清除有效位。批量分配还支持通过块中的指令进行操作数共享以及指令之间显式的消息传递。
提供本“发明内容”以便以简化的形式介绍将在以下“具体实施方式”中进一步描述的一些概念。本“发明内容”不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于帮助确定所要求保护的主题的范围。此外,所要求保护的主题不限于解决本公开的任何部分中提到的任何或全部缺点的实现。
附图说明
图1示出了说明性计算环境,其中编译器提供在包括多个处理器内核的架构上所运行的编码指令;
图2是用于示例性处理器内核的说明性微架构的框图;
图3示出了块标头(block header)的说明性布置;以及
图4-15是说明性方法的流程图。
相似的附图标记表示附图中的相似的元素。除非另有说明,否则元素不是按比例绘制的。
具体实施方式
图1示出了可以与其一起利用指令块的当前批量分配的说明性计算环境100。该环境包括编译器105,其可以用于从程序115生成编码的机器可执行指令110。指令110可以由处理器架构120处理,处理器架构120被配置为处理具有可变尺寸内容(例如,在4到128个指令之间)的指令块。
处理器架构120通常包括平铺配置的多个处理器内核(由附图标记125代表性地指示),这些处理器内核由片上网络(未示出)互连,并且还与一个或多个2级(L2)高速缓存(由附图标记130代表性地指示)交互操作。尽管内核和高速缓存的数目和配置可以根据实施方式而变化,但是应当注意,物理内核可以在程序115的运行时期间在被称为“合成”的过程中被一起合并到一个或多个更大的逻辑处理器中,更大的逻辑处理器可以使得更多的处理能力致力于程序执行。或者,当程序执行支持合适的线程级并行性时,内核125可以在被称为“分解”的过程中被拆分以独立地工作,并且执行来自独立线程的指令。
图2是说明性处理器内核125的一部分的简化框图。如图所示,处理器内核125可以包括前端控制单元202、指令高速缓存204、分支预测器206、指令解码器208、指令窗口210、左操作数缓冲区212、右操作数缓冲区214、算术逻辑单元(ALU)216、另一ALU 218、寄存器220以及加载/存储队列222。在一些情况下,总线(由箭头指示)可以携带数据和指令,而在其他情况下,总线可以携带数据(例如,操作数)或控制信号。例如,前端控制单元202可以经由仅携带控制信号的总线来与其他控制网络通信。尽管图2示出了以特定安排来被布置的用于处理器内核125的一定数目的说明性部件,但是取决于特定实施方式的需要,可以具有不同布置的更多或更少的部件。
前端控制单元202可以包括被配置为控制通过处理器内核的信息流的电路以及用于协调其内的活动的电路。前端控制单元202还可以包括用于实施有限状态机(FSM)的电路,在FSM中状态列举了处理器内核可以采用的每个操作配置。通过使用操作码(如下所述)和/或其他输入(例如,硬件级信号),前端控制单元202中的FSM电路可以确定下一状态并且控制输出。
因此,前端控制单元202可以从指令高速缓存204提取指令,以用于由指令解码器208进行处理。前端控制单元202可以通过控制网络或总线来与处理器内核125的其他部分交换控制信息。例如,前端控制单元可以与后端控制单元224交换控制信息。在一些实施方式中,前端控制单元和后端控制单元可以被集成到单个控制单元中。
前端控制单元202还可以协调和管理对处理器架构120(图1)的各个内核和其他部分的控制。因此,例如,指令块可以同时在多个内核上执行,并且前端控制单元202可以经由控制网络来与其他内核交换控制信息,以根据需要确保各种指令块执行的同步。
前端控制单元202可以进一步处理关于以原子态执行的指令块的控制信息和元信息。例如,前端控制单元202可以处理与指令块相关联的块标头。如下面更详细地讨论的,块标头可以包括关于指令块的控制信息和/或元信息。相应地,前端控制单元202可以包括组合逻辑、状态机和暂态存储单元(诸如触发器),以处理块标头中的各个字段。
前端控制单元202可以在每个时钟周期提取并解码单个指令或多个指令。已解码指令可以存储在指令窗口210中,指令窗口210在处理器内核硬件中被实施作为缓冲区。指令窗口210可以支持指令调度器230,在一些实施方式中,指令调度器230可以保持每个已解码指令的输入(诸如断言和操作数)的就绪状态。例如,当其所有输入(如果有的话)就绪时,给定的指令可以由指令调度器230唤醒并且准备好被发出。
在发出指令之前,根据需要,指令所需要的任何操作数可以被存储在左操作数缓冲区212和/或右操作数缓冲区214中。取决于指令的操作码,可以使用ALU 216和/或ALU218或其他功能单元来对操作数执行操作。ALU的输出可以存储在操作数缓冲区中,或者存储在一个或多个寄存器220中。以数据流顺序发出的存储操作可以在加载/存储队列222中排队,直到指令块提交。当指令块提交时,加载/存储队列222可以将所提交的块存储写入存储器。分支预测器206可以处理与分支出口类型相关的块标头信息,并且在进行分支预测时将该信息作为因素。
如上所述,处理器架构120通常利用在以原子态提取、执行和提交的块中所组织的指令。因此,处理器内核可以集中地提取属于单个块的指令,将它们映射到处理器内核内的执行资源,执行指令,并且以原子态提交它们的结果。处理器可以提交所有指令的结果,或者可以取消整个块的执行。块内的指令可以按照数据流顺序执行。另外,处理器可以允许块内的指令使用消息或其他合适形式的通信来彼此直接通信。因此,产生结果的指令可以将该结果传送给块中利用该结果的另一指令,而非将结果写入寄存器文件。作为示例,对存储在寄存器R1和R2中的值进行累加的指令可以被表示为如下面的表1所示:
表1
以这种方式,源操作数不是用指令指定的,而是由以ADD指令为目标的指令来指定的。编译器105(图1)可以在指令110的编译期间显式地对控制和数据依赖关系进行编码,从而使得处理器内核无需在运行时重新发现这些依赖关系。这可以有利地使得在这些指令的执行期间处理器负载减少并且节能。作为示例,编译器可以使用断言来将所有的控制依赖关系转换成数据流指令。通过使用这些技术,可以减少对耗电的寄存器文件的访问次数。下面的表2显示了这样的指令的通用指令格式的示例:
表2
OPCODE | PR | BID | XOP | TARGET1 | TARGET2 |
每个指令可以具有合适的尺寸,诸如32位、64位或另一尺寸。在表2所示的示例中,每个指令可以包括OPCODE字段、PR(断言)字段、BID(广播ID)字段、XOP(扩展的OPCODE)字段、TARGET1字段和TARGET2字段。OPCODE字段可以为指令或指令块指定唯一的操作码,诸如加法、读取、写入或乘法。PR(预测)字段可以指定与指令相关联的任何断言。例如,可以使用2位的PR字段,如下:00-未被断言,01-保留,10-是虚假断言,11-真实断言。因此,例如,如果只有在比较结果为真的情况下才执行指令,则可以根据执行比较的另一指令的结果来对该指令进行断言。BID(广播ID)字段可以支持将操作数发送到块中的任何数目的消费者指令。2位的BID字段可以用来对指令在其上接收其操作数中的一项的广播信道进行编码。XOP(扩展的OPCODE)字段可以支持对操作码的类型进行扩展。TARGET1和TARGET2字段最多可以允许待编码两个目标指令。目标字段可以指定生产者指令的结果的消费者指令,从而允许指令之间的直接通信。
每个指令块可以具有与该指令块相关联的特定信息,诸如与该块相关的控制信息和/或元信息。这个信息可以在将程序编译成指令110的过程中由编译器105生成,以用于在处理器架构120上执行。这些信息中的一些可以在指令块的编译过程中被编译器提取,并且然后检查运行时期间的指令性质。
另外,与指令块相关联的信息可以是元信息。作为示例,这样的信息可以使用专用指令或者提供与寄存器或其他存储器相关的目标编码的指令被提供给处理器内核,其中寄存器或其他存储器可以具有与指令块相关联的相关信息。在专用指令的情况下,这样的指令的操作码字段可以用于传送与指令块相关的信息。在另一示例中,这样的信息可以被维持作为处理器状态字(PSW)的一部分。例如,该信息可以有利地帮助处理器更有效地执行指令块。
各种类型的信息可以使用块标头、专用指令、存储器引用的位置、处理器状态字(PSW)或其各种组合来被提供给处理器内核。说明性指令块标头300在图3中示出。在该说明性示例中,块标头300是128位,并且开始于距块的程序计数器的偏移量0处。还示出了每个字段的相应的开始和结束。这些字段在下面的表3中描述:
表3
尽管在图3中示出和表3中描述的块标头包括多个字段,但是其旨在是说明性的,并且其他字段布置可以用于特定实施方式。
在说明性示例中,编译器105(图1)可以选择用于包括在块标头中的信息,或者用于专用指令的信息,专用指令可以基于指令的性质和/或基于处理要求的性质(诸如高性能或低功耗)向处理器内核提供这样的信息。这可以有利地允许在性能和功耗之间的权衡的更好平衡。对于某些类型的处理应用(诸如大量内核的高性能计算),大量信息可能是理想的选择。或者,对于诸如在物联网中使用的嵌入式处理器、移动设备、可穿戴设备、头戴式显示器(HMD)设备或其他嵌入式计算类型的应用等其他类型的处理应用,较少信息可能是理想的选择。
使用块标头或专用指令传送的信息的范围可以根据块中指令的性质来裁剪。例如,如果指令块包括以循环方式执行的循环,则可能需要更广泛的信息来封装与该块相关联的控制信息。附加控制信息可以允许处理器内核更有效地执行循环,从而提高性能。
或者,如果存在将被很少执行的指令块,则相对较少的信息就足够了。例如,如果指令块包括若干预测的控制回路,则可能需要更多的信息。类似地,如果指令块具有大量的指令级并行性,则可能需要更多信息作为块标头或专用指令的部分。
块标头中的附加控制信息或专用指令例如可以用于有效地利用指令块中的指令级并行性。如果指令块包括若干分支预测,则可能需要更多的信息。有关分支预测的附加控制信息通常将使代码执行更为高效,因为这可能导致更少的管线刷新。
注意,与块标头中的字段相对应的功能可以被组合或者被进一步分离。类似地,专用指令可以提供与图3和表3中所示的任何一个字段相关的信息,或者可以对来自这些字段的信息进行组合。例如,尽管图3和表3的说明性块标头包括单独的ID字段和SIZE字段,但是这两个字段可以组合成单个字段。
同样,当被解码时,单个专用指令可以提供关于指令块的尺寸的信息和ID字段中的信息。除非另有说明,否则专用指令可以被包括在指令块中的任何地方。例如,BLOCK_SIZE#size(尺寸)指令可以包含包括指令块的尺寸的值的直接(immediate)字段。直接字段可以包含提供尺寸信息的整数值。或者,直接字段可以包括与尺寸信息相关的编码值,使得尺寸信息可以通过对编码值进行解码来获得,例如,通过在可以使用逻辑、寄存器、存储器或代码流中的一项来表示的尺寸表中查找该值。在另一示例中,BLOCK_ID#id专用指令可以传送块ID号码。
单独的数学函数或基于存储器的表可以将块ID映射到块标头的存储器地址。作为这样的指令的部分被传送的块ID对于每个指令块可以是唯一的。在另一示例中,BLOCK_HDR_ID#id指令可以传送块标头ID号。单独的数学函数或基于存储器的表可以将块ID映射到块标头的存储器地址。作为这样的指令的部分被传送的块ID可以由具有相同标头结构或字段的若干指令块所共享。
在另一示例中,BLOCK_INFO#size(尺寸)、#exit types(出口类型)、#store mask(存储掩码)、#write mask(写入掩码)指令可以提供关于指令的枚举字段的信息。这些字段可以对应于上面关于表3所讨论的任何一个字段。根据给定实施方式的要求,可以对块标头结构和格式以及专用指令进行其他改变。例如,可以提供包括与指令块的特性相关的信息的附加字段。基于指令块执行的频率,可以包括特定字段。
被包括在块标头结构中的字段、或者经由先前讨论的专用指令或其他机制所提供的信息可以是特定处理器或处理器系列的公共可用标准指令集架构(ISA)的一部分。这些字段的子集可以是ISA的专属扩展。该字段中的某些位值可能是处理器的标准ISA的一部分,但是该字段中的某些其他位值可以提供专属功能。该示例性字段可以允许ISA设计者向ISA添加专属扩展,而不完全公开与专属扩展相关联的性质和功能。因此,在这种情况下,由ISA设计人员分发的编译器工具将支持该字段中的专属位值、完全独立的专属字段、或专用指令。这样的字段的使用可以与某些处理器设计专有的硬件加速器特别相关。因此,程序可以包括块标头字段或不可识别的专用指令;但是程序还可以包括用于解密字段或解码指令的办法(recipe)。
编译器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中示出的SIZE字段来硬编码指令块尺寸,而是可以使用该字段来编码或存储到尺寸表的索引。也就是说,索引可以用作指向尺寸窗口中条目的指针,以使得特定尺寸能够与指令块相关联。
尺寸表中所包括的尺寸条目的数目可以根据实施方式而变化。可以使用更多数目的尺寸条目来实现更大的粒度,这在与给定的程序相关联的指令块尺寸的分布相对较宽的情况下可能是有益的,但是在典型的实施方式中以开销增加为代价。在一些情况下,可以由编译器选择被包括在表中的尺寸的数目,以便以能够优化整个指令封装密度的方式来覆盖指令块尺寸的特定分布,并且使无操作(no op)最少化。例如,可以选择被包括在尺寸表中的尺寸以匹配程序中常用的块指令尺寸。在步骤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,可以应用包括使用循环缓冲区来将指令块映射到指令窗口中的策略。
在一些实施方式中,可以利用策略的各种组合来进一步增强处理器内核效率。例如,控制单元可以在策略之间动态地切换,以应用为给定指令块或指令块组提供更优化的操作的策略。例如,在一些情况下,使用循环缓冲技术可能更高效,其中指令块以连续的方式按顺序被处理。在其他情况下,无序和基于存活期的处理可以提供更优化的操作。
图15是可以由布置在处理器内核中的控制单元执行的说明性方法1500的流程图。在步骤1505中,以与上述类似的方式将指令窗口配置为具有多个分段,该多个分段具有两个或更多个不同尺寸。在步骤1510中,提取指令块,并且在步骤1515中,提取其所有相关联的资源。
在步骤1520中,将指令块放置在使得窗口中的指令密度最大化的窗口的合适的分段中。例如,如果编译器产生包括具有较低指令计数的相对大量的块的块尺寸分布(例如,以实施程序分支等),则指令窗口可以具有针对小指令块而被特别地确定尺寸的分段。类似地,如果存在相对大量的高指令计数块(例如,用于科学和类似的应用),则可以针对这样的较大指令块对分段特别地确定尺寸。因此,指令窗口分段定尺寸可以根据特定尺寸分布来被调节,或者在一些情况下当分布变化时被动态地调节。在框1525中,如上所述,指令块可以受到指令块标头中所指定的限制。
现在通过说明而不是所有实施例的详尽列表的方式来呈现指令块到处理器指令窗口的当前批量分配的各种示例性实施例。一个示例包括一种用于管理布置在处理器中的指令窗口中的指令块的方法,包括:批量分配指令块,使得用于指令块中的一个或多个指令的资源被同时提取,其中资源包括与一个或多个指令相关联的控制位和操作数;将包括一个或多个指令的指令块从指令高速缓存映射到指令窗口中,其中指令块包括标头;以及在执行映射时应用一个或多个约束,其中约束通过在标头中所指定的映射策略或限制中的一项来施加。在另一示例中,映射策略使用控制单元来实施,控制单元基于存活期、尺寸、位置或优先级中的一项来处理指令块。在另一示例中,该方法还包括将指令窗口分割为子窗口,其中经分割的子窗口共享共同的尺寸或具有不同尺寸。在另一示例中,分段得到的子窗口的尺寸根据指令块尺寸的分布被动态地确定。在另一示例中,指定的限制包括以下一项:对准限制或指令窗口的指令块容量限制。在另一示例中,指令块尺寸在标头中使用指向尺寸表的指针来指示,尺寸表使用以下一项来表达:逻辑、寄存器、存储器或代码流。
另一示例包括一种基于指令块的微架构,包括:控制单元;一个或多个操作数缓冲区;以及被配置为存储要在控制单元的控制下的已解码指令块的指令窗口,其中控制包括进行以下的操作:应用用于处理指令块的多个策略中的一个或多个策略;以及批量分配指令块,包括:对于指令块中的所有指令,将资源提取到一个或多个操作数缓冲区中,以允许指令块中的指令向指令块中的另一指令发送消息或操作数。在另一示例中,资源包括被缓冲在操作数缓冲区中的控制位或操作数中的一项。在另一示例中,策略包括用以基于在指令块的标头中所指定的限制来映射指令块的配置,其中所指定的限制包括以下一项:对准限制或指令窗口的指令块能力限制。在另一示例中,策略包括用以跟踪指令窗口中的指令块的顺序以及无序地提交指令块的配置。在另一示例中,策略包括用以显式地跟踪当前在指令窗口中被映射的指令块的存活期并且基于显示地跟踪的存活期来提交指令块的配置。在另一示例中,策略包括用以在指令窗口中适合指令块的槽可用时将指令块映射到指令窗口的配置。在另一示例中,策略包括用以使用循环缓冲区将指令块映射到指令窗口的配置。在另一示例中,策略包括用以将指令块映射到指令窗口或者基于优先级来提交指令块的配置。
另一示例包括一种布置在处理器中的控制单元,该处理器被布置为执行用于指令块管理的方法,该方法包括:配置具有多个分段的指令窗口,其中分段具有两个或更多个不同的尺寸;从指令高速缓存提取包括一个或多个指令的指令块;提取与指令块中的指令相关联的所有资源;以及将指令块放置到指令窗口的分段中,使得指令窗口中的指令密度最大化。在另一示例中,控制单元还包括检查指令块的标头,以获取对在指令窗口内的放置的指定的限制,并且根据指定的限制执行放置,其中指定的限制包括以下一项:对准限制或指令块容量限制。在另一示例中,控制单元还包括将经分割的指令窗口配置为分布在多个处理器内核上的逻辑分段的指令窗口。在另一示例中,控制单元还包括使用通过芯片内网络承载的通信跨逻辑分段的指令窗口维持状态。在另一示例中,控制单元还包括执行指令块和资源的提取作为批量分配。在另一示例中,控制单元还包括基于在标头中编码的指令块尺寸或者基于由标头中指向尺寸表的指针指示的指令块尺寸来为所放置的指令块选择分段,其中尺寸表使用以下一项来表示:逻辑、寄存器、存储器或代码流。
上述主题被提供仅作为说明,而不应当被解释为限制。可以对本文中描述的主题进行各种修改和改变,而不遵循示出和描述的示例实施例和应用,并且不偏离在以下权利要求中阐述的本公开的真实精神和范围。
Claims (19)
1.一种用于管理指令窗口中的指令块的方法,所述指令窗口被布置在处理器中,所述方法包括:
批量分配所述指令块,使得用于所述指令块中的一个或多个指令的资源被同时提取,其中所述资源包括与所述一个或多个指令相关联的控制位和操作数;
将包括一个或多个指令的指令块从指令高速缓存映射到所述指令窗口中,其中所述指令块包括标头;以及
在执行所述映射时应用一个或多个约束,其中所述约束通过在所述标头中所指定的映射策略或限制中的一项来施加;以及
其中指令块尺寸在所述标头中使用指向尺寸表的指针来指示,所述尺寸表使用以下一项来表达:逻辑、寄存器、存储器或代码流。
2.根据权利要求1所述的方法,其中所述映射策略使用控制单元来实施,所述控制单元基于存活期、尺寸、位置或优先级中的一项来处理指令块。
3.根据权利要求1所述的方法,还包括将所述指令窗口分割为子窗口,其中经分割的所述子窗口共享共同的尺寸或具有不同尺寸。
4.根据权利要求3所述的方法,其中经分割的所述子窗口的尺寸根据指令块尺寸的分布而被动态地确定。
5.根据权利要求1所述的方法,其中指定的所述限制包括以下一项:对准限制或所述指令窗口的指令块容量限制。
6.一种基于指令块的处理器,包括:
控制单元;
一个或多个操作数缓冲区;以及
指令窗口,所述指令窗口被配置为存储要在所述控制单元的控制之下的解码指令块,其中所述控制包括进行以下的操作:
应用用于处理指令块的多个策略中的一个或多个策略,其中策略包括用以基于在所述指令块的标头中所指定的限制来映射所述指令块的配置,并且其中指令块尺寸在所述标头中使用指向尺寸表的指针来指示,所述尺寸表使用以下一项来表达:逻辑、寄存器、存储器或代码流;以及
批量分配指令块,包括:对于指令块中的所有指令,将资源提取到所述一个或多个操作数缓冲区中,以允许所述指令块中的指令向所述指令块中的另一指令发送消息或操作数。
7.根据权利要求6所述的基于指令块的处理器,其中所述资源包括被缓冲在所述操作数缓冲区中的控制位或操作数中的一项。
8.根据权利要求6所述的基于指令块的处理器,其中所指定的所述限制包括以下一项:对准限制或所述指令窗口的指令块容量限制。
9.根据权利要求6所述的基于指令块的处理器,其中策略包括用以跟踪所述指令窗口中的所述指令块的顺序以及无序地提交指令块的配置。
10.根据权利要求6所述的基于指令块的处理器,其中策略包括用以显式地跟踪当前在所述指令窗口中被映射的指令块的存活期以及基于显式地跟踪的存活期来提交指令块的配置。
11.根据权利要求6所述的基于指令块的处理器,其中策略包括用以在所述指令窗口中适合指令块的槽可用时将所述指令块映射到所述指令窗口的配置。
12.根据权利要求6所述的基于指令块的处理器,其中策略包括用以使用循环缓冲区将指令块映射到所述指令窗口的配置。
13.根据权利要求6所述的基于指令块的处理器,其中策略包括用以将指令块映射到所述指令窗口的配置或者基于优先级来提交指令块的配置。
14.一种布置在处理器中的控制单元,所述控制单元被布置以执行用于指令块管理的方法,包括:
配置具有多个分段的指令窗口,其中分段具有两个或更多个不同的尺寸;
从指令高速缓存中取回包括一个或多个指令的指令块;
取回与所述指令块中的所述指令相关联的所有资源;
将指令块放置到所述指令窗口的分段中,使得所述指令窗口中的指令密度最大化;以及
检查所述指令块的标头,以获取对在所述指令窗口内的放置的指定的限制,并且其中指令块尺寸在所述标头中使用指向尺寸表的指针来指示,所述尺寸表使用以下一项来表达:逻辑、寄存器、存储器或代码流。
15.根据权利要求14所述的控制单元,还包括根据指定的所述限制来执行所述放置,其中所指定的所述限制包括以下一项:对准限制或指令块容量限制。
16.根据权利要求14所述的控制单元,还包括将经分段的所述指令窗口配置为在多个处理器核上分布的逻辑分段的指令窗口。
17.根据权利要求16所述的控制单元,还包括使用芯片内网络上所承载的通信以跨逻辑分段的指令窗口维持状态。
18.根据权利要求14所述的控制单元,还包括作为批量分配来执行指令块和资源的所述取回。
19.根据权利要求15所述的控制单元,还包括基于在所述标头中编码的指令块尺寸或者基于由所述标头中指向尺寸表的指针所指示的指令块尺寸来选择分段,所述分段被选择以用于所放置的所述指令块,其中所述尺寸表使用以下一项来表示:逻辑、寄存器、存储器或代码流。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/752,685 US9720693B2 (en) | 2015-06-26 | 2015-06-26 | Bulk allocation of instruction blocks to a processor instruction window |
US14/752,685 | 2015-06-26 | ||
PCT/US2016/038851 WO2016210028A1 (en) | 2015-06-26 | 2016-06-23 | Bulk allocation of instruction blocks to a processor instruction window |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107810482A CN107810482A (zh) | 2018-03-16 |
CN107810482B true CN107810482B (zh) | 2021-10-22 |
Family
ID=56551534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680037471.7A Active CN107810482B (zh) | 2015-06-26 | 2016-06-23 | 指令块到处理器指令窗口的批量分配 |
Country Status (15)
Country | Link |
---|---|
US (1) | US9720693B2 (zh) |
EP (1) | EP3314406B1 (zh) |
JP (1) | JP2018518776A (zh) |
KR (1) | KR102575940B1 (zh) |
CN (1) | CN107810482B (zh) |
AU (1) | AU2016281600A1 (zh) |
BR (1) | BR112017024362A2 (zh) |
CA (1) | CA2986269A1 (zh) |
CL (1) | CL2017003318A1 (zh) |
CO (1) | CO2017013277A2 (zh) |
HK (1) | HK1246441A1 (zh) |
IL (1) | IL256170A (zh) |
MX (1) | MX2017016201A (zh) |
PH (1) | PH12017550126A1 (zh) |
WO (1) | WO2016210028A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10409606B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Verifying branch targets |
US11755484B2 (en) | 2015-06-26 | 2023-09-12 | Microsoft Technology Licensing, Llc | Instruction block allocation |
US10409599B2 (en) | 2015-06-26 | 2019-09-10 | Microsoft Technology Licensing, Llc | Decoding information about a group of instructions including a size of the group of instructions |
US9940136B2 (en) | 2015-06-26 | 2018-04-10 | Microsoft Technology Licensing, Llc | Reuse of decoded instructions |
US10191747B2 (en) | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10175988B2 (en) | 2015-06-26 | 2019-01-08 | Microsoft Technology Licensing, Llc | Explicit instruction scheduler state information for a processor |
US10346168B2 (en) * | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US10095519B2 (en) | 2015-09-19 | 2018-10-09 | Microsoft Technology Licensing, Llc | Instruction block address register |
CN110851372B (zh) | 2018-08-20 | 2023-10-31 | 慧荣科技股份有限公司 | 储存装置及快取区定址方法 |
TWI702499B (zh) * | 2018-08-20 | 2020-08-21 | 慧榮科技股份有限公司 | 儲存裝置及快取區定址方法 |
CN110851073B (zh) | 2018-08-20 | 2023-06-02 | 慧荣科技股份有限公司 | 储存装置及巨集指令的执行方法 |
US20240036760A1 (en) * | 2022-07-28 | 2024-02-01 | Arm Limited | Control of bulk memory instructions |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1830192A (zh) * | 2003-07-31 | 2006-09-06 | 国际商业机器公司 | 用于异步地处理请求的方法、系统和程序产品 |
CN1842769A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 用于在多线程微处理器中对并行指令流进行初始化的指令 |
US7453899B1 (en) * | 2001-05-08 | 2008-11-18 | Lsi Corporation | Field programmable network application specific integrated circuit and a method of operation thereof |
CN101320452A (zh) * | 2007-06-07 | 2008-12-10 | 佳能株式会社 | 流程处理执行方法和设备 |
CN101636715A (zh) * | 2007-03-23 | 2010-01-27 | 高通股份有限公司 | 用于多处理器系统的指令通信技术 |
WO2010026485A1 (en) * | 2008-09-08 | 2010-03-11 | Bridgeco Ag | Very long instruction word architecture with multiple data queues |
CN102117198A (zh) * | 2009-12-31 | 2011-07-06 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
CN102566974A (zh) * | 2012-01-14 | 2012-07-11 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
CN103761070A (zh) * | 2010-05-25 | 2014-04-30 | 威盛电子股份有限公司 | 微处理器以及相关的操作方法、以及加密方法 |
Family Cites Families (99)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0450658B1 (en) | 1990-04-06 | 2001-08-01 | Nec Corporation | Parallel pipelined instruction processing system for very long instruction word |
US5363495A (en) | 1991-08-26 | 1994-11-08 | International Business Machines Corporation | Data processing system with multiple execution units capable of executing instructions out of sequence |
EP0636256B1 (en) | 1992-03-31 | 1997-06-04 | Seiko Epson Corporation | Superscalar risc processor instruction scheduling |
US6735685B1 (en) | 1992-09-29 | 2004-05-11 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
US5628021A (en) | 1992-12-31 | 1997-05-06 | Seiko Epson Corporation | System and method for assigning tags to control instruction processing in a superscalar processor |
US5966539A (en) | 1994-03-01 | 1999-10-12 | Digital Equipment Corporation | Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis |
US6112019A (en) | 1995-06-12 | 2000-08-29 | Georgia Tech Research Corp. | Distributed instruction queue |
US5790822A (en) | 1996-03-21 | 1998-08-04 | Intel Corporation | Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor |
US5920724A (en) | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US6286135B1 (en) | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
US5983337A (en) | 1997-06-12 | 1999-11-09 | Advanced Micro Devices, Inc. | Apparatus and method for patching an instruction by providing a substitute instruction or instructions from an external memory responsive to detecting an opcode of the instruction |
US5845103A (en) | 1997-06-13 | 1998-12-01 | Wisconsin Alumni Research Foundation | Computer with dynamic instruction reuse |
US5943501A (en) | 1997-06-27 | 1999-08-24 | Wisconsin Alumni Research Foundation | Multiple processor, distributed memory computer with out-of-order processing |
US6185675B1 (en) | 1997-10-24 | 2001-02-06 | Advanced Micro Devices, Inc. | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks |
US6164841A (en) | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
US6988183B1 (en) | 1998-06-26 | 2006-01-17 | Derek Chi-Lan Wong | Methods for increasing instruction-level parallelism in microprocessors and digital system |
EP0992894A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Apparatus and method for loop execution |
US6477683B1 (en) | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6523110B1 (en) | 1999-07-23 | 2003-02-18 | International Business Machines Corporation | Decoupled fetch-execute engine with static branch prediction support |
JP2001092662A (ja) | 1999-09-22 | 2001-04-06 | Toshiba Corp | プロセッサコア及びこれを用いたプロセッサ |
AU7622400A (en) | 1999-10-01 | 2001-05-10 | Sun Microsystems, Inc. | A method for precise trap handling in case of speculative and out-of-order loads |
EP1102163A3 (en) | 1999-11-15 | 2005-06-29 | Texas Instruments Incorporated | Microprocessor with improved instruction set architecture |
US6779100B1 (en) | 1999-12-17 | 2004-08-17 | Hewlett-Packard Development Company, L.P. | Method and device for address translation for compressed instructions |
US6918032B1 (en) | 2000-07-06 | 2005-07-12 | Intel Corporation | Hardware predication for conditional instruction path branching |
US7032217B2 (en) | 2001-03-26 | 2006-04-18 | Intel Corporation | Method and system for collaborative profiling for continuous detection of profile phase transitions |
US6965982B2 (en) | 2001-06-29 | 2005-11-15 | International Business Machines Corporation | Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread |
US7353287B2 (en) | 2001-09-26 | 2008-04-01 | Adobe Systems Incorporated | Marked foreign data blocks |
AU2002363142A1 (en) | 2001-10-31 | 2003-05-12 | Doug Burger | A scalable processing architecture |
US7055021B2 (en) | 2002-02-05 | 2006-05-30 | Sun Microsystems, Inc. | Out-of-order processor that reduces mis-speculation using a replay scoreboard |
JP3804941B2 (ja) | 2002-06-28 | 2006-08-02 | 富士通株式会社 | 命令フェッチ制御装置 |
US6934828B2 (en) | 2002-09-17 | 2005-08-23 | Intel Corporation | Decoupling floating point linear address |
US7299458B2 (en) | 2002-10-31 | 2007-11-20 | Src Computers, Inc. | System and method for converting control flow graph representations to control-dataflow graph representations |
US7207038B2 (en) | 2003-08-29 | 2007-04-17 | Nokia Corporation | Constructing control flows graphs of binary executable programs at post-link time |
US7310722B2 (en) | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
US8607209B2 (en) | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
KR100877138B1 (ko) | 2004-03-29 | 2009-01-09 | 고쿠리츠 다이가쿠 호진 교토 다이가쿠 | 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체 |
EP1870814B1 (en) * | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
US8756605B2 (en) | 2004-12-17 | 2014-06-17 | Oracle America, Inc. | Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline |
US7552318B2 (en) | 2004-12-17 | 2009-06-23 | International Business Machines Corporation | Branch lookahead prefetch for microprocessors |
US8151092B2 (en) | 2005-01-12 | 2012-04-03 | International Business Machines Corporation | Control signal memoization in a multiple instruction issue microprocessor |
US7380038B2 (en) | 2005-02-04 | 2008-05-27 | Microsoft Corporation | Priority registers for biasing access to shared resources |
US7853777B2 (en) | 2005-02-04 | 2010-12-14 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions |
US7805574B2 (en) | 2005-02-09 | 2010-09-28 | International Business Machines Corporation | Method and cache system with soft I-MRU member protection scheme during make MRU allocation |
US7152155B2 (en) | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US7673119B2 (en) | 2005-05-13 | 2010-03-02 | Texas Instruments Incorporated | VLIW optional fetch packet header extends instruction set space |
US7779213B2 (en) | 2005-08-29 | 2010-08-17 | The Invention Science Fund I, Inc | Optimization of instruction group execution through hardware resource management policies |
US7490224B2 (en) | 2005-10-07 | 2009-02-10 | International Business Machines Corporation | Time-of-life counter design for handling instruction flushes from a queue |
US7716577B2 (en) | 2005-11-14 | 2010-05-11 | Oracle America, Inc. | Method and apparatus for hardware XML acceleration |
JP4923240B2 (ja) | 2006-01-17 | 2012-04-25 | 国立大学法人東京工業大学 | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
US8266413B2 (en) | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
US8010953B2 (en) | 2006-04-04 | 2011-08-30 | International Business Machines Corporation | Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine |
US8032734B2 (en) | 2006-09-06 | 2011-10-04 | Mips Technologies, Inc. | Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor |
US7624254B2 (en) | 2007-01-24 | 2009-11-24 | Qualcomm Incorporated | Segmented pipeline flushing for mispredicted branches |
US20100070958A1 (en) | 2007-01-25 | 2010-03-18 | Nec Corporation | Program parallelizing method and program parallelizing apparatus |
US8181168B1 (en) | 2007-02-07 | 2012-05-15 | Tilera Corporation | Memory access assignment for parallel processing architectures |
US7719532B2 (en) | 2007-02-09 | 2010-05-18 | International Business Machines Corporation | Efficient and flexible data organization for acceleration data structure nodes |
US20080250227A1 (en) | 2007-04-04 | 2008-10-09 | Linderman Michael D | General Purpose Multiprocessor Programming Apparatus And Method |
US8180997B2 (en) | 2007-07-05 | 2012-05-15 | Board Of Regents, University Of Texas System | Dynamically composing processor cores to form logical processors |
JP2009026106A (ja) | 2007-07-20 | 2009-02-05 | Oki Electric Ind Co Ltd | 命令コード圧縮方法と命令フェッチ回路 |
US7877586B2 (en) | 2008-02-01 | 2011-01-25 | International Business Machines Corporation | Branch target address cache selectively applying a delayed hit |
US7885967B2 (en) * | 2008-05-30 | 2011-02-08 | Red Hat, Inc. | Management of large dynamic tables |
US8321850B2 (en) | 2008-06-06 | 2012-11-27 | Vmware, Inc. | Sharing and persisting code caches |
US8612698B2 (en) | 2008-10-31 | 2013-12-17 | Intel Corporation | Replacement policy for hot code detection |
US20100146209A1 (en) | 2008-12-05 | 2010-06-10 | Intellectual Ventures Management, Llc | Method and apparatus for combining independent data caches |
US9489207B2 (en) | 2009-04-14 | 2016-11-08 | International Business Machines Corporation | Processor and method for partially flushing a dispatched instruction group including a mispredicted branch |
US20100325395A1 (en) | 2009-06-19 | 2010-12-23 | Doug Burger | Dependence prediction in a memory system |
US8533436B2 (en) | 2009-06-26 | 2013-09-10 | Intel Corporation | Adaptively handling remote atomic execution based upon contention prediction |
US8433885B2 (en) | 2009-09-09 | 2013-04-30 | Board Of Regents Of The University Of Texas System | Method, system and computer-accessible medium for providing a distributed predicate prediction |
US10698859B2 (en) | 2009-09-18 | 2020-06-30 | The Board Of Regents Of The University Of Texas System | Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture |
US20110078424A1 (en) | 2009-09-30 | 2011-03-31 | International Business Machines Corporation | Optimizing program code using branch elimination |
JP5057256B2 (ja) | 2009-12-02 | 2012-10-24 | 株式会社Mush−A | データ処理装置、データ処理システムおよびデータ処理方法 |
WO2011067896A1 (en) | 2009-12-02 | 2011-06-09 | Mush-A Co., Ltd. | Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method |
US9043769B2 (en) | 2009-12-28 | 2015-05-26 | Hyperion Core Inc. | Optimization of loops and data flow sections in multi-core processor environment |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
KR101664108B1 (ko) | 2010-04-13 | 2016-10-11 | 삼성전자주식회사 | 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법 |
US8555038B2 (en) | 2010-05-28 | 2013-10-08 | Oracle International Corporation | Processor and method providing instruction support for instructions that utilize multiple register windows |
US9021241B2 (en) | 2010-06-18 | 2015-04-28 | The Board Of Regents Of The University Of Texas System | Combined branch target and predicate prediction for instruction blocks |
US20120030451A1 (en) | 2010-07-28 | 2012-02-02 | Broadcom Corporation | Parallel and long adaptive instruction set architecture |
SG11201402727WA (en) | 2011-12-01 | 2014-06-27 | Univ Singapore | Polymorphic heterogeneous multi-core architecture |
IN2014DN05723A (zh) * | 2011-12-23 | 2015-04-10 | Univ Arizona State | |
US9304776B2 (en) | 2012-01-31 | 2016-04-05 | Oracle International Corporation | System and method for mitigating the impact of branch misprediction when exiting spin loops |
WO2013156825A1 (en) | 2012-04-20 | 2013-10-24 | Freescale Semiconductor, Inc. | A computer system and a method for generating an optimized program code |
US8930678B2 (en) | 2012-04-26 | 2015-01-06 | Intel Corporation | Instruction and logic to length decode X86 instructions |
KR101964927B1 (ko) | 2012-07-17 | 2019-04-03 | 삼성전자 주식회사 | 캐싱 프록시 방법 및 장치 |
US8930760B2 (en) | 2012-12-17 | 2015-01-06 | International Business Machines Corporation | Validating cache coherency protocol within a processor |
US9891924B2 (en) | 2013-03-15 | 2018-02-13 | Intel Corporation | Method for implementing a reduced size register view data structure in a microprocessor |
US20140281622A1 (en) | 2013-03-15 | 2014-09-18 | Mahesh Wagh | Method, apparatus, and system for improving resume times for root ports and root port integrated endpoints |
US9632825B2 (en) | 2013-03-15 | 2017-04-25 | Intel Corporation | Method and apparatus for efficient scheduling for asymmetrical execution units |
US9195606B2 (en) | 2013-03-15 | 2015-11-24 | Intel Corporation | Dead block predictors for cooperative execution in the last level cache |
US9471318B2 (en) | 2013-03-15 | 2016-10-18 | International Business Machines Corporation | System management and instruction counting |
US9811342B2 (en) | 2013-03-15 | 2017-11-07 | Intel Corporation | Method for performing dual dispatch of blocks and half blocks |
US9792252B2 (en) | 2013-05-31 | 2017-10-17 | Microsoft Technology Licensing, Llc | Incorporating a spatial array into one or more programmable processor cores |
GB2515076B (en) | 2013-06-13 | 2020-07-15 | Advanced Risc Mach Ltd | A data processing apparatus and method for handling retrieval of instructions from an instruction cache |
US10372527B2 (en) | 2013-07-15 | 2019-08-06 | Intel Corporation | Method of encoding data |
US20150074355A1 (en) * | 2013-09-12 | 2015-03-12 | Lsi Corporation | Efficient caching of file system journals |
US9547496B2 (en) | 2013-11-07 | 2017-01-17 | Microsoft Technology Licensing, Llc | Energy efficient multi-modal instruction issue |
US9946548B2 (en) * | 2015-06-26 | 2018-04-17 | Microsoft Technology Licensing, Llc | Age-based management of instruction blocks in a processor instruction window |
US10346168B2 (en) * | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
US9952867B2 (en) * | 2015-06-26 | 2018-04-24 | Microsoft Technology Licensing, Llc | Mapping instruction blocks based on block size |
-
2015
- 2015-06-26 US US14/752,685 patent/US9720693B2/en active Active
-
2016
- 2016-06-23 KR KR1020187002589A patent/KR102575940B1/ko active IP Right Grant
- 2016-06-23 WO PCT/US2016/038851 patent/WO2016210028A1/en active Application Filing
- 2016-06-23 BR BR112017024362A patent/BR112017024362A2/pt not_active Application Discontinuation
- 2016-06-23 EP EP16744949.5A patent/EP3314406B1/en active Active
- 2016-06-23 AU AU2016281600A patent/AU2016281600A1/en not_active Abandoned
- 2016-06-23 MX MX2017016201A patent/MX2017016201A/es unknown
- 2016-06-23 JP JP2017565984A patent/JP2018518776A/ja active Pending
- 2016-06-23 CA CA2986269A patent/CA2986269A1/en not_active Abandoned
- 2016-06-23 CN CN201680037471.7A patent/CN107810482B/zh active Active
-
2017
- 2017-11-08 PH PH12017550126A patent/PH12017550126A1/en unknown
- 2017-12-07 IL IL256170A patent/IL256170A/en unknown
- 2017-12-21 CO CONC2017/0013277A patent/CO2017013277A2/es unknown
- 2017-12-21 CL CL2017003318A patent/CL2017003318A1/es unknown
-
2018
- 2018-05-07 HK HK18105887.5A patent/HK1246441A1/zh unknown
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7453899B1 (en) * | 2001-05-08 | 2008-11-18 | Lsi Corporation | Field programmable network application specific integrated circuit and a method of operation thereof |
CN1830192A (zh) * | 2003-07-31 | 2006-09-06 | 国际商业机器公司 | 用于异步地处理请求的方法、系统和程序产品 |
CN1842769A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 用于在多线程微处理器中对并行指令流进行初始化的指令 |
CN101636715A (zh) * | 2007-03-23 | 2010-01-27 | 高通股份有限公司 | 用于多处理器系统的指令通信技术 |
CN101320452A (zh) * | 2007-06-07 | 2008-12-10 | 佳能株式会社 | 流程处理执行方法和设备 |
WO2010026485A1 (en) * | 2008-09-08 | 2010-03-11 | Bridgeco Ag | Very long instruction word architecture with multiple data queues |
CN102117198A (zh) * | 2009-12-31 | 2011-07-06 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
CN103761070A (zh) * | 2010-05-25 | 2014-04-30 | 威盛电子股份有限公司 | 微处理器以及相关的操作方法、以及加密方法 |
CN102566974A (zh) * | 2012-01-14 | 2012-07-11 | 哈尔滨工程大学 | 基于同时多线程的取指控制方法 |
Non-Patent Citations (2)
Title |
---|
IBOI:一种复杂性有效的基于指令块的乱序发射策略;过锋等;《小型微型计算机系统》;20110715;全文 * |
Ocelot: A dynamic optimization framework for bulk-synchronous applications in heterogeneous systems;Gregory Diamos;《2010 19th International Conference on Parallel Architectures and Compilation Techniques (PACT)》;20100915;全文 * |
Also Published As
Publication number | Publication date |
---|---|
MX2017016201A (es) | 2018-03-01 |
CA2986269A1 (en) | 2016-12-29 |
US9720693B2 (en) | 2017-08-01 |
EP3314406A1 (en) | 2018-05-02 |
CO2017013277A2 (es) | 2018-01-16 |
BR112017024362A2 (pt) | 2018-07-31 |
CL2017003318A1 (es) | 2018-06-29 |
US20160378493A1 (en) | 2016-12-29 |
IL256170A (en) | 2018-02-28 |
EP3314406B1 (en) | 2020-10-14 |
JP2018518776A (ja) | 2018-07-12 |
CN107810482A (zh) | 2018-03-16 |
KR102575940B1 (ko) | 2023-09-06 |
KR20180021165A (ko) | 2018-02-28 |
HK1246441A1 (zh) | 2018-09-07 |
PH12017550126A1 (en) | 2018-02-26 |
WO2016210028A1 (en) | 2016-12-29 |
AU2016281600A1 (en) | 2017-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107810476B (zh) | 解耦合的处理器指令窗口和操作数缓冲区 | |
CN107810481B (zh) | 处理器指令窗口中的指令块的基于年龄的管理 | |
CN107810482B (zh) | 指令块到处理器指令窗口的批量分配 | |
CN107771318B (zh) | 基于块大小将指令块映射到指令窗口 | |
US10175988B2 (en) | Explicit instruction scheduler state information for a processor | |
US10409599B2 (en) | Decoding information about a group of instructions including a size of the group of instructions | |
CN114174985A (zh) | 在基于块的指令集架构中高扇出通信的高效编码 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1246441 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |