CN107810476A - 解耦合的处理器指令窗口和操作数缓冲区 - Google Patents

解耦合的处理器指令窗口和操作数缓冲区 Download PDF

Info

Publication number
CN107810476A
CN107810476A CN201680037470.2A CN201680037470A CN107810476A CN 107810476 A CN107810476 A CN 107810476A CN 201680037470 A CN201680037470 A CN 201680037470A CN 107810476 A CN107810476 A CN 107810476A
Authority
CN
China
Prior art keywords
instruction
block
instruction block
window
operand
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.)
Granted
Application number
CN201680037470.2A
Other languages
English (en)
Other versions
CN107810476B (zh
Inventor
D·C·伯格
A·史密斯
J·格雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN107810476A publication Critical patent/CN107810476A/zh
Application granted granted Critical
Publication of CN107810476B publication Critical patent/CN107810476B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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中,如上所述,指令块可以受到指令块标头中所指定的限制。
现在通过说明而不是所有实施例的详尽列表的方式来呈现当前解耦的处理器指令窗口和操作数缓冲区的各种示例性实施例。一个示例包括一种用于管理布置在处理器中的指令窗口中的指令块的方法,包括:将包括包括一个或多个解码指令的指令块映射从指令高速缓存到指令窗口中;为指令块分配资源,其中资源包括与指令块中的一个或多个解码指令中的每一个解码指令相关联的控制位和操作数;维持资源和块中的一个或多个解码指令之间的一个或多个指针;刷新指令块,而不从指令高速缓存重新提取指令块;以及通过跟随一个或多个指针来重新使用资源。在另一示例中,该方法还包括为从指令高速缓存提取的每个指令块执行批量分配以获取与指令块中的一个或多个指令中的每一个指令相关联的资源。在另一示例中,该方法还包括在于指令窗口解耦合的操作数缓冲区中维持操作数和控制位,以使得在资源在指令块被刷新时被预验证。在另一示例中,控制位包括操作数就绪状态。在另一示例中,资源包括操作码。在另一示例中,该方法还包括基于程序来利用指令块,以及在使用编程循环来实现程序的执行时刷新指令块。
另一示例包括一种基于指令块的微架构,包括:控制单元;一个或多个操作数缓冲区;以及被配置为存储要在所述控制单元的控制之下的解码指令块的指令窗口,其中控制包括用于进行以下的操作:将指令块映射到指令窗口中,以使得新的指令块替换提交的指令块,为新的指令块分配资源,其中资源包括控制位或操作数,并且将指令窗口从一个或多个操作数缓冲区解耦合,其中指令块和操作数块被独立地管理,以使得资源在指令块被刷新时被预验证。在另一示例中,基于指令块的微架构还包括用于基于在指令块的标头中所指定的限制来映射指令块的配置。在另一示例中,如权利要求8所述的基于指令块的微架构,其中所指定的限制包括以下一项:对准限制或指令窗口的指令块容量限制。在另一示例中,基于指令块的微架构还包括用以跟踪指令窗口中的指令块的顺序并且无序地提交指令块的配置。在另一示例中,基于指令块的微架构还包括片上网络,该片上网络使得多个处理器内核能够被组合或分解。在另一示例中,基于指令块的微架构还包括用以在多个处理器内核被组合时维持逻辑指令窗口与一个或多个逻辑操作数缓冲区之间的解耦合的配置。在另一示例中,基于指令块的微架构还包括用以在多个处理器内核被分解时维持逻辑指令窗口与一个或多个逻辑操作数缓冲区之间的解耦合的配置。在另一示例中,基于指令块的微架构还包括用于刷新所述指令块而不从指令高速缓存重新提取所述指令块的配置。
另一示例包括一种布置在处理器中的控制单元,该处理器被布置为执行用于指令块管理的方法,该方法包括:维持用于缓冲一个或多个指令块的指令窗口;维持用于为一个或多个指令块缓冲资源的一个或多个操作数缓冲区;使用指令块与缓冲资源之间的指针来跟踪状态;在刷新指令块时,跟随指针以重新使用跟踪状态。在另一示例中,控制单元还包括:在提交指令块时清除控制位并且设置新的指针。在另一示例中,控制单元还包括将指令窗口与一个或多个操作数缓冲区解耦合,以使得在非对应的基础上维持指令块和操作数块。在另一示例中,控制单元还包括批量分配缓冲的资源,以使得为指令块中的所有指令获得资源。在另一示例中,控制单元还包括维持包括多个处理器内核的逻辑指令窗口。在另一示例中,控制单元还包括维持包括多个处理器内核的逻辑操作数缓冲区,并且进一步将逻辑操作数缓冲区与逻辑指令窗口解耦合,使得能够在刷新指令块时预验证状态而不重新提取。
上述主题被提供仅作为说明,而不应当被解释为限制。可以对本文中描述的主题进行各种修改和改变,而不遵循示出和描述的示例实施例和应用,并且不偏离在以下权利要求中阐述的本公开的真实精神和范围。

Claims (14)

1.一种用于管理指令窗口中的指令块的方法,所述指令窗口在布置处理器中,所述方法包括:
将指令块从指令高速缓存映射到所述指令窗口中,所述指令块包括一个或多个解码指令;
为所述指令块分配资源,其中所述资源包括与所述指令块中的所述一个或多个解码指令中的每一个解码指令相关联的控制位和操作数;
维持所述资源和所述块中的所述一个或多个解码指令之间的一个或多个指针;
刷新所述指令块,而不从所述指令高速缓存重新提取所述指令块;以及
通过跟随所述一个或多个指针来重新使用所述资源。
2.根据权利要求1所述的方法,还包括:为从所述指令高速缓存提取的每个指令块执行批量分配,以获取与所述指令块中的所述一个或多个指令中的每一个指令相关联的资源。
3.根据权利要求1所述的方法,还包括在与所述指令窗口解耦合的操作数缓冲区中维持操作数和控制位,以使得资源在指令块被刷新时被预验证。
4.根据权利要求3所述的方法,其中所述控制位包括操作数就绪状态。
5.根据权利要求1所述的方法,其中所述资源包括操作码。
6.根据权利要求5所述的方法,还包括:基于程序来利用指令块,以及在使用编程循环来实现所述程序的执行时刷新所述指令块。
7.一种基于指令块的微架构,包括:
控制单元;
一个或多个操作数缓冲区;以及
指令窗口,所述指令窗口被配置为存储要在所述控制单元的控制之下的解码指令块,其中所述控制包括用于进行以下的操作:
将指令块映射到所述指令窗口中,以使得新的指令块替换已提交的指令块,
为所述新的指令块分配资源,其中所述资源包括控制位或操作数,以及
将所述指令窗口从所述一个或多个操作数缓冲区解耦合,其中指令块和操作数块被独立地管理,以使得资源在指令块被刷新时被预验证。
8.根据权利要求7所述的基于指令块的微架构,还包括用以基于在所述指令块的标头中所指定的限制来映射所述指令块的配置。
9.根据权利要求8所述的基于指令块的微架构,其中指定的所述限制包括以下一项:对准限制或所述指令窗口的指令块容量限制。
10.根据权利要求7所述的基于指令块的微架构,还包括用以跟踪所述指令窗口中的所述指令块的顺序并且无序地提交指令块的配置。
11.根据权利要求7所述的基于指令块的微架构,还包括片上网络,所述片上网络支持多个处理器内核被组合或分解。
12.根据权利要求11所述的基于指令块的微架构,还包括用以在所述多个处理器内核被组合时维持逻辑指令窗口与一个或多个逻辑操作数缓冲区之间的解耦合的配置。
13.根据权利要求11所述的基于指令块的微架构,还包括用以在所述多个处理器内核被分解时维持逻辑指令窗口与一个或多个逻辑操作数缓冲区之间的解耦合的配置。
14.根据权利要求7所述的基于指令块的微架构,还包括用以刷新所述指令块而不从指令高速缓存重新提取所述指令块的配置。
CN201680037470.2A 2015-06-26 2016-06-23 解耦合的处理器指令窗口和操作数缓冲区 Active CN107810476B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/752,724 US10346168B2 (en) 2015-06-26 2015-06-26 Decoupled processor instruction window and operand buffer
US14/752,724 2015-06-26
PCT/US2016/038850 WO2016210027A1 (en) 2015-06-26 2016-06-23 Decoupled processor instruction window and operand buffer

Publications (2)

Publication Number Publication Date
CN107810476A true CN107810476A (zh) 2018-03-16
CN107810476B CN107810476B (zh) 2021-02-23

Family

ID=56369215

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680037470.2A Active CN107810476B (zh) 2015-06-26 2016-06-23 解耦合的处理器指令窗口和操作数缓冲区

Country Status (16)

Country Link
US (2) US10346168B2 (zh)
EP (1) EP3314399B1 (zh)
JP (1) JP2018518775A (zh)
KR (1) KR102502780B1 (zh)
CN (1) CN107810476B (zh)
AU (1) AU2016281599A1 (zh)
BR (1) BR112017024301A2 (zh)
CA (1) CA2986266A1 (zh)
CL (1) CL2017003310A1 (zh)
CO (1) CO2017013252A2 (zh)
HK (1) HK1246443A1 (zh)
IL (1) IL256168A (zh)
MX (1) MX2017016197A (zh)
PH (1) PH12017550124A1 (zh)
TW (1) TW201712533A (zh)
WO (1) WO2016210027A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112000420A (zh) * 2020-11-02 2020-11-27 武汉中科通达高新技术股份有限公司 一种数据处理方法和装置
CN115617402A (zh) * 2022-11-18 2023-01-17 北京数渡信息科技有限公司 一种适用于通用处理器的解耦合分支预测方法及装置

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
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
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
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US9720693B2 (en) * 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9940136B2 (en) * 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9952867B2 (en) * 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11531552B2 (en) * 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10824429B2 (en) * 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
US11630668B1 (en) * 2021-11-18 2023-04-18 Nxp B.V. Processor with smart cache in place of register file for providing operands
US20240111654A1 (en) * 2022-09-29 2024-04-04 Intel Corporation Hybrid performance monitoring unit (pmu) enumeration

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0992894A1 (en) * 1998-10-06 2000-04-12 Texas Instruments Inc. Apparatus and method for loop execution
US7207038B2 (en) * 2003-08-29 2007-04-17 Nokia Corporation Constructing control flows graphs of binary executable programs at post-link time
CN101002169A (zh) * 2004-05-19 2007-07-18 Arc国际(英国)公司 微处理器架构
US7260694B2 (en) * 2003-04-10 2007-08-21 Arm Limited Data processor memory circuit
JP2008299790A (ja) * 2007-06-04 2008-12-11 Digital Electronics Corp マイクロプロセッサ
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
CN102364431A (zh) * 2011-10-20 2012-02-29 北京北大众志微系统科技有限责任公司 一种实现读指令执行的方法及装置
US20150127928A1 (en) * 2013-11-07 2015-05-07 Microsoft Corporation Energy Efficient Multi-Modal Instruction Issue
CN104731718A (zh) * 2013-12-24 2015-06-24 上海芯豪微电子有限公司 一种缓存系统和方法

Family Cites Families (298)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142631A (en) 1989-02-03 1992-08-25 Digital Equipment Corporation System for queuing individual read or write mask and generating respective composite mask for controlling access to general purpose register
US5333280A (en) 1990-04-06 1994-07-26 Nec Corporation Parallel pipelined instruction processing system for very long instruction word
US5551033A (en) 1991-05-17 1996-08-27 Zenith Data Systems Corporation Apparatus for maintaining one interrupt mask register in conformity with another in a manner invisible to an executing program
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
US5333283A (en) 1991-10-29 1994-07-26 International Business Machines Corporation Case block table for predicting the outcome of blocks of conditional branches having a common operand
TW226016B (zh) 1991-12-30 1994-07-01 Sterling Winthrop Inc
WO1993020505A2 (en) 1992-03-31 1993-10-14 Seiko Epson Corporation Superscalar risc instruction scheduling
US5346345A (en) * 1992-07-31 1994-09-13 Ford Motor Company High-force linear motor assembly using tandem axes
EP0583089B1 (en) 1992-08-12 2000-01-26 Advanced Micro Devices, Inc. Instruction decoder
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
US5999737A (en) 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
WO1996007139A1 (en) 1994-09-01 1996-03-07 Mcalpine Gary L A multi-port memory system including read and write buffer interfaces
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5832297A (en) 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5933642A (en) 1995-04-17 1999-08-03 Ricoh Corporation Compiling system and method for reconfigurable computing
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
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US5799167A (en) 1996-05-15 1998-08-25 Hewlett-Packard Company Instruction nullification system and method for a processor that executes instructions out of order
US5903750A (en) 1996-11-20 1999-05-11 Institute For The Development Of Emerging Architectures, L.L.P. Dynamic branch prediction for branch instructions with multiple targets
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
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
US6044222A (en) 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US7272703B2 (en) 1997-08-01 2007-09-18 Micron Technology, Inc. Program controlled embedded-DRAM-DSP architecture and methods
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
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6058438A (en) 1998-02-06 2000-05-02 Hewlett-Packard Company Method and apparatus for performing high speed data transfers between a host memory and a geometry accelerator of a graphics machine
US6055623A (en) 1998-04-07 2000-04-25 International Business Machine Corporation Specialized millicode instruction for editing functions
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
US6212622B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Mechanism for load block on store address generation
US6275919B1 (en) 1998-10-15 2001-08-14 Creative Technology Ltd. Memory storage and retrieval with multiple hashing functions
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
JP3565314B2 (ja) 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
US6477683B1 (en) 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
GB2348305A (en) 1999-03-24 2000-09-27 Int Computers Ltd Instruction execution mechanism
US6453344B1 (en) 1999-03-31 2002-09-17 Amdahl Corporation Multiprocessor servers with controlled numbered of CPUs
US6438671B1 (en) 1999-07-01 2002-08-20 International Business Machines Corporation Generating partition corresponding real address in partitioned mode supporting system
US6523110B1 (en) 1999-07-23 2003-02-18 International Business Machines Corporation Decoupled fetch-execute engine with static branch prediction support
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
JP2001092662A (ja) 1999-09-22 2001-04-06 Toshiba Corp プロセッサコア及びこれを用いたプロセッサ
US6986137B1 (en) 1999-09-28 2006-01-10 International Business Machines Corporation Method, system and program products for managing logical processors of a computing environment
US7051188B1 (en) 1999-09-28 2006-05-23 International Business Machines Corporation Dynamically redistributing shareable resources of a computing environment to manage the workload of that environment
US6651125B2 (en) 1999-09-28 2003-11-18 International Business Machines Corporation Processing channel subsystem pending I/O work queues based on priorities
JP2003511754A (ja) 1999-10-01 2003-03-25 サン・マイクロシステムズ・インコーポレイテッド 投機的なかつ順不同(out−of−order)のロードの場合に正確なトラップ処理をするための方法
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
US6732203B2 (en) 2000-01-31 2004-05-04 Intel Corporation Selectively multiplexing memory coupling global bus data bits to narrower functional unit coupling local bus
US6725335B2 (en) 2000-02-09 2004-04-20 Hewlett-Packard Development Company, L.P. Method and system for fast unlinking of a linked branch in a caching dynamic translator
US6732260B1 (en) 2000-03-06 2004-05-04 Intel Corporation Presbyopic branch target prefetch method and apparatus
US6615340B1 (en) 2000-03-22 2003-09-02 Wilmot, Ii Richard Byron Extended operand management indicator structure and method
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US6654860B1 (en) 2000-07-27 2003-11-25 Advanced Micro Devices, Inc. Method and apparatus for removing speculative memory accesses from a memory access queue for issuance to memory or discarding
US7069555B1 (en) 2000-09-29 2006-06-27 Microsoft Corporation Super-region instruction scheduling and code generation for merging identical instruction into the ready-to-schedule instruction
US6934254B2 (en) 2001-01-18 2005-08-23 Motorola, Inc. Method and apparatus for dynamically allocating resources in a communication system
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
US6957435B2 (en) 2001-04-19 2005-10-18 International Business Machines Corporation Method and apparatus for allocating processor resources in a logically partitioned computer system
US7453899B1 (en) 2001-05-08 2008-11-18 Lsi Corporation Field programmable network application specific integrated circuit and a method of operation thereof
US6965982B2 (en) 2001-06-29 2005-11-15 International Business Machines Corporation Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread
US7002956B2 (en) 2001-07-05 2006-02-21 International Business Machines Corporation Network addressing method and system for localizing access to network resources in a computer network
US7353287B2 (en) 2001-09-26 2008-04-01 Adobe Systems Incorporated Marked foreign data blocks
WO2003038645A2 (en) 2001-10-31 2003-05-08 University Of Texas A scalable processing architecture
EP1313012A1 (en) 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
JP2003162411A (ja) 2001-11-28 2003-06-06 Hitachi Ltd データプロセッサ
US7228402B2 (en) 2002-01-02 2007-06-05 Intel Corporation Predicate register file write by an instruction with a pending instruction having data dependency
US7055021B2 (en) 2002-02-05 2006-05-30 Sun Microsystems, Inc. Out-of-order processor that reduces mis-speculation using a replay scoreboard
US7032101B2 (en) 2002-02-26 2006-04-18 International Business Machines Corporation Method and apparatus for prioritized instruction issue queue in a processor
US6877059B2 (en) 2002-03-29 2005-04-05 Emc Corporation Communications architecture for a high throughput storage processor
WO2003088048A1 (en) 2002-04-08 2003-10-23 University Of Texas System Non-uniform cache apparatus, systems, and methods
WO2004001584A2 (en) 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
JP4243463B2 (ja) 2002-08-19 2009-03-25 株式会社半導体理工学研究センター 命令スケジューリングのシミュレーション方法とシミュレーションシステム
US7296259B2 (en) 2002-09-11 2007-11-13 Agere Systems Inc. Processor system with cache-based software breakpoints
US6934828B2 (en) 2002-09-17 2005-08-23 Intel Corporation Decoupling floating point linear address
GB2393274B (en) 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
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
US20040123078A1 (en) 2002-12-24 2004-06-24 Hum Herbert H Method and apparatus for processing a load-lock instruction using a scoreboard mechanism
US20040139299A1 (en) 2003-01-14 2004-07-15 International Business Machines Corporation Operand forwarding in a superscalar processor
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
US6996698B2 (en) 2003-05-12 2006-02-07 International Business Machines Corporation Blocking processing restrictions based on addresses
US7284100B2 (en) 2003-05-12 2007-10-16 International Business Machines Corporation Invalidating storage, clearing buffer entries, and an instruction therefor
US7349968B2 (en) 2003-07-31 2008-03-25 International Business Machines Corporation Method, system and program product for asynchronously processing requests
CN1842770A (zh) 2003-08-28 2006-10-04 美普思科技有限公司 一种在处理器中挂起和释放执行过程中计算线程的整体机制
US7539974B2 (en) 2003-10-24 2009-05-26 Microsoft Corporation Scalable synchronous and asynchronous processing of monitoring rules
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
US7500087B2 (en) 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
EP1731998A1 (en) 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program
US7392524B2 (en) 2004-04-06 2008-06-24 International Business Machines Corporation Method, system, and storage medium for managing computer processing functions
EP1870814B1 (en) 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
US7334143B2 (en) 2004-04-19 2008-02-19 Hewlett-Packard Development Company, L.P. Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value
US7873776B2 (en) 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7685354B1 (en) 2004-06-30 2010-03-23 Sun Microsystems, Inc. Multiple-core processor with flexible mapping of processor cores to cache banks
US8607241B2 (en) 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US8230252B2 (en) 2004-07-20 2012-07-24 Hewlett-Packard Development Company, L.P. Time of day response
US8166282B2 (en) 2004-07-21 2012-04-24 Intel Corporation Multi-version register file for multithreading processors with live-in precomputation
US7606995B2 (en) 2004-07-23 2009-10-20 Hewlett-Packard Development Company, L.P. Allocating resources to partitions in a partitionable computer
US7747992B2 (en) 2004-08-23 2010-06-29 Intel Corporation Methods and apparatus for creating software basic block layouts
US7748001B2 (en) 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
JP4345630B2 (ja) 2004-09-29 2009-10-14 ソニー株式会社 情報処理装置、割り込み処理制御方法、並びにコンピュータ・プログラム
US8015392B2 (en) 2004-09-29 2011-09-06 Intel Corporation Updating instructions to free core in multi-core processor with core sequence table indicating linking of thread sequences for processing queued packets
JP4982971B2 (ja) 2004-09-29 2012-07-25 ソニー株式会社 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
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
US8151092B2 (en) 2005-01-12 2012-04-03 International Business Machines Corporation Control signal memoization in a multiple instruction issue microprocessor
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
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
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
US7526633B2 (en) 2005-03-23 2009-04-28 Qualcomm Incorporated Method and system for encoding variable length packets with variable instruction sizes
US7447882B2 (en) 2005-04-20 2008-11-04 Arm Limited Context switching within a data processing system having a branch prediction mechanism
US7673119B2 (en) 2005-05-13 2010-03-02 Texas Instruments Incorporated VLIW optional fetch packet header extends instruction set space
US7581082B2 (en) 2005-05-13 2009-08-25 Texas Instruments Incorporated Software source transfer selects instruction word sizes
JP4322232B2 (ja) 2005-06-14 2009-08-26 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US7437518B2 (en) 2005-09-07 2008-10-14 Intel Corporation Hiding conflict, coherence completion and transaction ID elements of a coherence protocol
US7412353B2 (en) 2005-09-28 2008-08-12 Intel Corporation Reliable computing with a many-core processor
US7490224B2 (en) 2005-10-07 2009-02-10 International Business Machines Corporation Time-of-life counter design for handling instruction flushes from a queue
JP4720436B2 (ja) 2005-11-01 2011-07-13 株式会社日立製作所 リコンフィギュラブルプロセッサまたは装置
US7716577B2 (en) 2005-11-14 2010-05-11 Oracle America, Inc. Method and apparatus for hardware XML acceleration
KR100806274B1 (ko) 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US7475225B2 (en) 2005-12-30 2009-01-06 Intel Corporation Method and apparatus for microarchitecture partitioning of execution clusters
US7565654B2 (en) 2006-01-10 2009-07-21 National Instruments Corporation Programmatic control of tasks in a programmable logic controller
JP4923240B2 (ja) 2006-01-17 2012-04-25 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US7350027B2 (en) 2006-02-10 2008-03-25 International Business Machines Corporation Architectural support for thread level speculative execution
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
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US20070239965A1 (en) 2006-03-31 2007-10-11 Saul Lewites Inter-partition communication
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
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
JP4849606B2 (ja) 2006-04-28 2012-01-11 株式会社日立製作所 制御フロー誤り検出方法、データ処理装置、及びコンパイラ
US7958396B2 (en) 2006-05-19 2011-06-07 Microsoft Corporation Watchdog processors in multicore systems
US8473724B1 (en) 2006-07-09 2013-06-25 Oracle America, Inc. Controlling operation of a processor according to execution mode of an instruction sequence
US7461241B2 (en) 2006-07-31 2008-12-02 International Business Machines Corporation Concurrent physical processor reassignment method
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
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8028131B2 (en) 2006-11-29 2011-09-27 Intel Corporation System and method for aggregating core-cache clusters in order to produce multi-core processors
US20080148020A1 (en) 2006-12-13 2008-06-19 Luick David A Low Cost Persistent Instruction Predecoded Issue and Dispatcher
US7624254B2 (en) 2007-01-24 2009-11-24 Qualcomm Incorporated Segmented pipeline flushing for mispredicted branches
JP4957729B2 (ja) 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
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
JP4339371B2 (ja) 2007-03-22 2009-10-07 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法
US20080235493A1 (en) 2007-03-23 2008-09-25 Qualcomm Incorporated Instruction communication techniques for multi-processor system
US20080250227A1 (en) 2007-04-04 2008-10-09 Linderman Michael D General Purpose Multiprocessor Programming Apparatus And Method
US7853950B2 (en) 2007-04-05 2010-12-14 International Business Machines Corporarion Executing multiple threads in a processor
JP4987555B2 (ja) 2007-04-27 2012-07-25 株式会社東芝 情報処理装置、および情報処理システム
JP5084355B2 (ja) 2007-06-07 2012-11-28 キヤノン株式会社 フロー処理実行装置、フロー処理実行方法及びプログラム
US8161476B2 (en) 2007-07-04 2012-04-17 International Business Machines Corporation Processor exclusivity in a partitioned system
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
CN101344843B (zh) 2007-07-10 2012-11-21 北京简约纳电子有限公司 一种指令级并行处理方法
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
US8281308B1 (en) 2007-07-23 2012-10-02 Oracle America, Inc. Virtual core remapping based on temperature
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US8006070B2 (en) 2007-12-05 2011-08-23 International Business Machines Corporation Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system
US9529592B2 (en) 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US7877586B2 (en) 2008-02-01 2011-01-25 International Business Machines Corporation Branch target address cache selectively applying a delayed hit
US8146094B2 (en) 2008-02-01 2012-03-27 International Business Machines Corporation Guaranteeing delivery of multi-packet GSM messages
US7921278B2 (en) 2008-03-10 2011-04-05 International Business Machines Corporation Early exit processing of iterative refinement algorithm using register dependency disable
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
US8565065B2 (en) 2008-06-23 2013-10-22 Qualcomm Incorporated Methods and systems for utilizing a multicast/broadcast CID scheduling MAC management message
WO2010026485A1 (en) 2008-09-08 2010-03-11 Bridgeco Ag Very long instruction word architecture with multiple data queues
WO2010043401A2 (en) 2008-10-15 2010-04-22 Martin Vorbach Data processing device
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
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
JP2010198131A (ja) 2009-02-23 2010-09-09 Renesas Electronics Corp プロセッサシステム、及びプロセッサシステムの動作モード切り替え方法
US8380964B2 (en) 2009-04-03 2013-02-19 International Business Machines Corporation Processor including age tracking of issue queue instructions
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
US8438547B2 (en) 2009-05-05 2013-05-07 Freescale Semiconductor, Inc. Address translation trace message generation for debug
US8214831B2 (en) 2009-05-05 2012-07-03 International Business Machines Corporation Runtime dependence-aware scheduling using assist thread
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
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
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
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
CN102096579B (zh) 2009-12-11 2013-10-16 陈罡 一种嵌入式自适应模糊微处理器的组成与结构
CN102117198B (zh) 2009-12-31 2015-07-15 上海芯豪微电子有限公司 一种分支处理方法
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US8434074B2 (en) 2010-02-24 2013-04-30 Intel Corporation Register allocation with SIMD architecture using write masks
US8667260B2 (en) 2010-03-05 2014-03-04 International Business Machines Corporation Building approximate data dependences with a moving window
JP2011209904A (ja) 2010-03-29 2011-10-20 Sony Corp 命令フェッチ装置、および、プロセッサ
KR101664108B1 (ko) 2010-04-13 2016-10-11 삼성전자주식회사 멀티 코어의 동기화를 효율적으로 처리하기 위한 하드웨어 가속 장치 및 방법
US8290994B2 (en) 2010-05-05 2012-10-16 International Business Machines Corporation Obtaining file system view in block-level data storage systems
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
US8645714B2 (en) 2010-05-25 2014-02-04 Via Technologies, Inc. Branch target address cache for predicting instruction decryption keys in a microprocessor that fetches and decrypts encrypted instructions
US8555038B2 (en) 2010-05-28 2013-10-08 Oracle International Corporation Processor and method providing instruction support for instructions that utilize multiple register windows
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
US10241799B2 (en) 2010-07-16 2019-03-26 Qualcomm Incorporated Out-of-order command execution with sliding windows to maintain completion statuses
US20120030451A1 (en) 2010-07-28 2012-02-02 Broadcom Corporation Parallel and long adaptive instruction set architecture
US9052890B2 (en) 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
US8904115B2 (en) 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US9836304B2 (en) 2010-11-15 2017-12-05 Advanced Micro Devices, Inc. Cumulative confidence fetch throttling
US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US8589892B2 (en) 2010-11-21 2013-11-19 International Business Machines Corporation Verification of speculative execution
US8612726B2 (en) 2010-12-07 2013-12-17 King Fahd University Of Petroleum And Minerals Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type
US9164772B2 (en) 2011-02-04 2015-10-20 Qualcomm Incorporated Hybrid queue for storing instructions from fetch queue directly in out-of-order queue or temporarily in in-order queue until space is available
US9176737B2 (en) 2011-02-07 2015-11-03 Arm Limited Controlling the execution of adjacent instructions that are dependent upon a same data condition
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US8909941B1 (en) 2011-03-31 2014-12-09 Xilinx, Inc. Programmable integrated circuit and a method of enabling the detection of tampering with data provided to a programmable integrated circuit
WO2012136766A1 (en) 2011-04-06 2012-10-11 Telefonaktiebolaget L M Ericsson (Publ) Multi-core processors
CN102221987B (zh) 2011-05-11 2014-10-01 西安电子科技大学 基于嵌入式专用指令集处理器的指令集编码方法
US9652243B2 (en) 2011-06-29 2017-05-16 International Business Machines Corporation Predicting out-of-order instruction level parallelism of threads in a multi-threaded processor
US20130024676A1 (en) 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
CN102306094B (zh) 2011-08-16 2014-03-26 北京北大众志微系统科技有限责任公司 实现现代处理器间接转移预测的装置及方法
US9697002B2 (en) 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
SG11201402727WA (en) 2011-12-01 2014-06-27 Univ Singapore Polymorphic heterogeneous multi-core architecture
US8639882B2 (en) 2011-12-14 2014-01-28 Nvidia Corporation Methods and apparatus for source operand collector caching
US9442861B2 (en) 2011-12-20 2016-09-13 Intel Corporation System and method for out-of-order prefetch instructions in an in-order pipeline
WO2013095635A1 (en) 2011-12-23 2013-06-27 Intel Corporation Instruction for merging mask patterns
WO2013096894A1 (en) 2011-12-23 2013-06-27 The Arizona Board Of Regents On Behalf Of The University Of Arizona Methods of micro-specialization in database management systems
CN102566974B (zh) 2012-01-14 2014-03-26 哈尔滨工程大学 基于同时多线程的取指控制方法
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
US9348775B2 (en) 2012-03-16 2016-05-24 Analog Devices, Inc. Out-of-order execution of bus transactions
US9513922B2 (en) 2012-04-20 2016-12-06 Freescale Semiconductor, Inc. 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
EP2862058B1 (en) 2012-06-15 2021-05-19 Intel Corporation A semaphore method and system with out of order loads in a memory consistency model that constitutes loads reading from memory in order
US8880638B2 (en) 2012-06-18 2014-11-04 International Business Machines Corporation Distributed image cache for servicing virtual resource requests in the cloud
US9160815B2 (en) 2012-06-28 2015-10-13 Intel Corporation Method and apparatus for virtual machine interoperability
CN105760138B (zh) 2012-06-29 2018-12-11 英特尔公司 用于测试事务性执行状态的系统
KR101964927B1 (ko) 2012-07-17 2019-04-03 삼성전자 주식회사 캐싱 프록시 방법 및 장치
GB2505884B (en) 2012-09-12 2015-06-03 Imagination Tech Ltd Dynamically resizable circular buffers
US9122873B2 (en) 2012-09-14 2015-09-01 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US20140095847A1 (en) 2012-09-28 2014-04-03 Doron Orenstein Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
US9400650B2 (en) 2012-09-28 2016-07-26 Intel Corporation Read and write masks update instruction for vectorization of recursive computations over interdependent data
US9710276B2 (en) 2012-11-09 2017-07-18 Advanced Micro Devices, Inc. Execution of instruction loops using an instruction buffer
US8930760B2 (en) 2012-12-17 2015-01-06 International Business Machines Corporation Validating cache coherency protocol within a processor
US9619229B2 (en) 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
US9182986B2 (en) 2012-12-29 2015-11-10 Intel Corporation Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region
US9361111B2 (en) 2013-01-09 2016-06-07 Arm Limited Tracking speculative execution of instructions for a register renaming data store
US10223124B2 (en) 2013-01-11 2019-03-05 Advanced Micro Devices, Inc. Thread selection at a processor based on branch prediction confidence
GB2514956B (en) 2013-01-21 2015-04-01 Imagination Tech Ltd Allocating resources to threads based on speculation metric
US9354884B2 (en) 2013-03-13 2016-05-31 International Business Machines Corporation Processor with hybrid pipeline capable of operating in out-of-order and in-order modes
US9886277B2 (en) 2013-03-15 2018-02-06 Intel Corporation Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
US10241793B2 (en) 2013-03-15 2019-03-26 Analog Devices Global Paralleizing loops in the presence of possible memory aliases
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
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US9471318B2 (en) 2013-03-15 2016-10-18 International Business Machines Corporation System management and instruction counting
WO2014143053A1 (en) 2013-03-15 2014-09-18 Intel Corporation Dead block predictors for cooperative execution in the last level cache
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
US20140281434A1 (en) 2013-03-15 2014-09-18 Carlos Madriles Path profiling using hardware and software combination
JP6086230B2 (ja) 2013-04-01 2017-03-01 日本電気株式会社 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法
US9594700B2 (en) 2013-04-17 2017-03-14 Nvidia Corporation Speculative memory controller
WO2014189510A1 (en) 2013-05-23 2014-11-27 Intel Corporation Techniques for detecting return-oriented programming
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
GB2510655B (en) 2013-07-31 2015-02-25 Imagination Tech Ltd Prioritizing instructions based on type
US9535488B2 (en) 2013-08-28 2017-01-03 Via Technologies, Inc. Multi-core microprocessor that dynamically designates one of its processing cores as the bootstrap processor
US20150074355A1 (en) 2013-09-12 2015-03-12 Lsi Corporation Efficient caching of file system journals
CN103473508B (zh) 2013-09-17 2016-07-27 肖楠 操作系统内核运行时安全验证方法
US9448936B2 (en) 2014-01-13 2016-09-20 Apple Inc. Concurrent store and load operations
CN103744644B (zh) 2014-01-13 2017-03-01 上海交通大学 采用四核结构搭建的四核处理器系统及数据交换方法
US9785441B2 (en) 2014-05-29 2017-10-10 Mill Computing, Inc. Computer processor employing instructions with elided nop operations
US9830159B2 (en) 2014-06-02 2017-11-28 International Business Machines Corporation Suspending branch prediction upon entering transactional execution mode
CN104310225A (zh) 2014-08-19 2015-01-28 中国十七冶集团有限公司 建筑起重机械安全控制装置
US20160055004A1 (en) 2014-08-21 2016-02-25 Edward T. Grochowski Method and apparatus for non-speculative fetch and execution of control-dependent blocks
CN104239047B (zh) 2014-10-13 2017-10-24 深圳市神州海纳科技有限公司 一种信息采集的方法及其装置
US9875106B2 (en) 2014-11-12 2018-01-23 Mill Computing, Inc. Computer processor employing instruction block exit prediction
US9569613B2 (en) 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
CN104637288B (zh) 2014-12-31 2019-03-08 小米科技有限责任公司 指令组确定方法和装置
US20160274915A1 (en) 2015-03-20 2016-09-22 Qualcomm Incorporated PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA
US20160328237A1 (en) 2015-05-07 2016-11-10 Via Alliance Semiconductor Co., Ltd. System and method to reduce load-store collision penalty in speculative out of order engine
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US20160378491A1 (en) 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Determination of target location for transfer of processor control
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
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
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US20160378488A1 (en) 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Access to target address
US20170083343A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Out of order commit
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US9830152B2 (en) 2015-12-22 2017-11-28 Qualcomm Incorporated Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
US10223118B2 (en) 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0992894A1 (en) * 1998-10-06 2000-04-12 Texas Instruments Inc. Apparatus and method for loop execution
US7260694B2 (en) * 2003-04-10 2007-08-21 Arm Limited Data processor memory circuit
US7207038B2 (en) * 2003-08-29 2007-04-17 Nokia Corporation Constructing control flows graphs of binary executable programs at post-link time
CN101002169A (zh) * 2004-05-19 2007-07-18 Arc国际(英国)公司 微处理器架构
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
JP2008299790A (ja) * 2007-06-04 2008-12-11 Digital Electronics Corp マイクロプロセッサ
CN102364431A (zh) * 2011-10-20 2012-02-29 北京北大众志微系统科技有限责任公司 一种实现读指令执行的方法及装置
US20150127928A1 (en) * 2013-11-07 2015-05-07 Microsoft Corporation Energy Efficient Multi-Modal Instruction Issue
CN104731718A (zh) * 2013-12-24 2015-06-24 上海芯豪微电子有限公司 一种缓存系统和方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
HONGLIANG GAO 等: "Address-branch correlation: A novel locality for long-latency hard-to-predict branches", 《2008 IEEE 14TH INTERNATIONAL SYMPOSIUM ON HIGH PERFORMANCE COMPUTER ARCHITECTURE》 *
孙庆: "高性能DSP指令控制部件优化设计研究", 《中国优秀硕士学位论文全文数据库(电子期刊)》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112000420A (zh) * 2020-11-02 2020-11-27 武汉中科通达高新技术股份有限公司 一种数据处理方法和装置
CN115617402A (zh) * 2022-11-18 2023-01-17 北京数渡信息科技有限公司 一种适用于通用处理器的解耦合分支预测方法及装置

Also Published As

Publication number Publication date
BR112017024301A2 (pt) 2018-07-24
PH12017550124A1 (en) 2018-02-26
TW201712533A (zh) 2017-04-01
IL256168A (en) 2018-02-28
CN107810476B (zh) 2021-02-23
US10346168B2 (en) 2019-07-09
US11048517B2 (en) 2021-06-29
HK1246443A1 (zh) 2018-09-07
KR20180020985A (ko) 2018-02-28
US20160378479A1 (en) 2016-12-29
KR102502780B1 (ko) 2023-02-22
MX2017016197A (es) 2018-03-01
EP3314399B1 (en) 2022-04-20
WO2016210027A1 (en) 2016-12-29
EP3314399A1 (en) 2018-05-02
CA2986266A1 (en) 2016-12-29
CL2017003310A1 (es) 2018-06-22
AU2016281599A1 (en) 2017-11-30
CO2017013252A2 (es) 2018-01-16
JP2018518775A (ja) 2018-07-12
US20190310852A1 (en) 2019-10-10

Similar Documents

Publication Publication Date Title
CN107810476A (zh) 解耦合的处理器指令窗口和操作数缓冲区
CN107810482A (zh) 指令块到处理器指令窗口的批量分配
EP3314402B1 (en) Age-based management of instruction blocks in a processor instruction window
CN104951281B (zh) 用于实现动态无序处理器流水线的方法和装置
CN107771318B (zh) 基于块大小将指令块映射到指令窗口
CN102782672B (zh) 用于高效嵌入式同类多核平台的基于瓦片的处理器架构模型
Singh et al. MorphoSys: case study of a reconfigurable computing system targeting multimedia applications
Jeon et al. Hi-End: Hierarchical, endurance-aware STT-MRAM-based register file for energy-efficient GPUs
CN108228241A (zh) 用于在处理器中进行动态概况分析的系统、装置和方法
Tseng Braids: out-of-order performance with almost in-order complexity
Suleman An asymmetric multi-core architecture for efficiently accelerating critical paths in multithreaded programs

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: 1246443

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant