CN108475198A - 用于在运行时的指令的上下文向量化的系统和方法 - Google Patents
用于在运行时的指令的上下文向量化的系统和方法 Download PDFInfo
- Publication number
- CN108475198A CN108475198A CN201780007959.XA CN201780007959A CN108475198A CN 108475198 A CN108475198 A CN 108475198A CN 201780007959 A CN201780007959 A CN 201780007959A CN 108475198 A CN108475198 A CN 108475198A
- Authority
- CN
- China
- Prior art keywords
- instruction
- sequence
- suboptimum
- processor
- source 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000005457 optimization Methods 0.000 claims abstract description 51
- 230000008569 process Effects 0.000 claims description 13
- 230000008859 change Effects 0.000 claims description 9
- 230000001052 transient effect Effects 0.000 claims description 4
- 230000003139 buffering effect Effects 0.000 claims description 2
- 238000001514 detection method Methods 0.000 abstract description 3
- 230000015654 memory Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 238000012549 training Methods 0.000 description 5
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000001343 mnemonic effect Effects 0.000 description 4
- 239000000203 mixture Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000001154 acute effect Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006735 deficit Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 208000015181 infectious disease Diseases 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013102 re-test Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
-
- 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/3017—Runtime instruction translation, e.g. macros
-
- 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/30181—Instruction operation extension or modification
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
公开了涉及在运行时与上下文有关地优化指令的处理器的方法和装置。在一个实施例中,处理器包括用于从指令存储装置获取指令的获取电路,该指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中指令存储装置包括次优指令的序列,其前面是序列开始指令,后面是序列结束指令。所公开的处理器还包括解码电路,以解码指令,以检测序列开始指令和序列结束指令,以缓冲它们之间的次优指令的序列,以访问查找表以标识一个或多个优化指令来用于替代次优指令的序列中的一个或多个,以及以选择要分派给执行电路的所解码的指令或一个或多个优化指令的序列。
Description
技术领域
本文描述的实施例一般涉及处理器。特别地,所描述的实施例一般涉及配置成在运行时与上下文有关地优化指令的处理器。
背景技术
并行处理一般比一次一个数据点的标量执行更快。具有多个处理元件的单指令多数据(SIMD)计算机(其在多个数据点上执行相同的操作)通过利用并行性和同时使用多个并行执行核来达到性能提升。
SIMD处理器可以在执行数学运算中和移动数据中利用并行性。SIMD处理器可以同时加载或存储多个数据项,与一次加载或存储一个数据的较慢的标量处理器相比,引起性能提升。当在具有并行资源的处理器上执行计算机程序时,利用SIMD指令比使用标量指令提供更好的性能。
然而,使用SIMD指令集架构(ISA)进行编程可以是有挑战性的。例如,SIMD ISA通常是处理器特定的。使用SIMD指令的程序可能需要被重新编写和定制,以适应新处理器世代。对将标量指令适配新指令集架构所需的工作可能需要部分或全部重复以用于与指令集架构的每个新世代(例如MMX、SSE、SSE2、SSE3、SSE4、AVX、AVX 2、AVX 3.1和AVX 3.2)重复使用,所述所需的工作包括重写代码、为代码制作文档;使编译器能够发出(emit)代码,培训用户使用代码,调试和收集代码执行的记录。因此,所需要的是一种允许程序员利用SIMD指令集架构同时避免传统解决方案中固有的挑战的方法。
此外,传统的解决方案是受限的,因为它们在执行期间提前静态地而不是动态地优化代码。编译器试图优化某些代码序列的执行,但它们在不知道机器或寄存器的状态的情况下在静态环境中操作。即使是传统上人工编码的SIMD代码也不能够根据机器和寄存器的运行时状态来优化代码。因此,需要一种在知道寄存器的状态及其内容的情况下在运行时优化指令的方法。
附图说明
图1是示出根据一个实施例的对于处理器用于在运行时与上下文有关地优化指令的过程的流程框图。
图2是示出根据一个实施例的由处理器用于在运行时与上下文有关地优化指令的处理组件的框图。
图3示出了根据一个实施例的指令及其各种字段。
图4示出了根据一实施例的由优化表2的Vectorbeam代码的处理器进行的示例性寄存器分配。
图5示出了根据一个实施例的用于并行处理图4的分配的寄存器的多个计算资源的示例性分配。
图6示出了根据一个实施例的列示对于标量指令的向量指令替代物的查找表的一部分。
图7示出了根据一个实施例的向量处理器寄存器堆。
具体实施方式
在以下描述中,阐述了许多特定细节。然而,应该理解,可以在没有这些特定细节的情况下实践本公开的实施例。在其它实例中,未详细示出公知电路、结构和技术,以便不使本描述的理解晦涩。
说明书中对“一个实施例”、“一实施例”、“示例实施例”等的引用指示所描述的实施例可以包括具体特征、结构或特性,但是每个实施例不一定包括该特定的特征、结构或特征。而且,此类短语不一定指的是同一实施例。此外,当结合实施例描述具体特征、结构或特性时,认为结合其他实施例来影响此类特征、结构或特性在本领域技术人员的知识内,无论是否明确描述。
(例如,硬件)处理器或处理器的集合从指令集(例如,指令集架构(ISA))执行指令。指令集是与编程相关的计算机架构的一部分,通常包括本机数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。应当注意,这里的术语指令可以指宏指令,例如,被提供给处理器以用于执行的指令。处理器(例如,具有用于解码和/或执行指令的一个或多个核)可以对数据进行操作,例如,在执行算术、逻辑、数据移动或其他功能中。
运行时的上下文优化
根据本发明,处理器在运行时与上下文有关地优化指令。特定地,处理器在运行时动态地优化次优指令的序列。本文使用的次优指令指的是不太充分使用处理器的可用资源的指令,或者其可以被优化以利用处理器的指令集架构。在一个实施例中,次优指令的序列存储在指令存储装置中,并由开始和结束定界指令包围。通常,出于公开的目的,由序列开始和序列结束指令包围的次优代码序列在本文中称为Vectorbeam代码。本文的权利要求不受名称Vectorbeam的限制。在备选实施例中,代码可以由不同的名称引用。Vectorbeam指令不限于具体操作码或记忆符的选择。
根据所公开的实施例,处理器被配置成检测次优指令的Vectorbeam代码序列、缓冲序列、以及访问查找表以标识一个或多个指令,以替代和优化Vectorbeam代码序列的一个或多个次优指令。
定界符:序列开始和序列结束
在一个实施例中,可以选择序列开始指令和序列结束指令以向处理器提供关于如何优化代码序列的提示。在一个实施例中,处理器可以推测次优指令的序列应该是迭代循环,因为次优指令的序列前面是序列开始定界指令、“foreach”,并且后面是序列结束定界指令、“next”。类似地,在备选实施例中,序列开始指令可提示,通过使用定界指令“foreach”或“do until”或“repeat until”或“do while”来迭代次优指令的序列。可以类似地命名序列结束指令,以便建议其功能(例如“end”、“exit”、“stop”、“continue”、“return”)。序列开始和序列结束指令还可以具有预定值,这些预定值不是人类可读的,或者是数字的,或者已在没有人类干涉的情况下自动或随机被选择。
次优指令的序列
如本文所使用的,次优指令的序列次指的是计算机指令,其不太充分利用处理器(那些指令应该在其上执行)中可用的并行资源。
例如,次优指令的序列可以是迭代、标量循环,其如所写的那样使用比处理器中可用的并行资源更少的并行资源。
作为另一示例,次优指令的序列可以已经被写成使用64位寄存器,但是要在其上执行那些指令的处理器具有可用的128位寄存器。
作为另一示例,次优指令的序列涉及多媒体操作,诸如调暗像素屏幕的亮度。在此类示例中,标量数学运算可以用宽向量指令代替。
元数据
根据本公开,序列开始指令可以包括操作数,其向将实现Vectorbeam代码序列的处理器提供元数据。在一个实施例中,元数据向处理器给予关于如何优化代码的提示。在一个实施例中,次优指令的序列之前是序列开始指令“foreach rax,0,64,1”。元数据“rax,0,64,and 1”将向处理器提供如下提示:应使用寄存器rax作为循环索引、从0开始改变rax 64次、以对于每次迭代的跨距为1来循环次优代码。
说明性实施例的描述
图1是示出根据一个实施例的对于处理器在运行时与上下文有关地优化指令的过程的流程框图。特定地,配置成用于执行根据框流程图100的在运行时与上下文有关地优化指令的过程的处理器在102获取指令、在104解码指令、并在106测试它是否处于优化模式。在一个实施例中,待获取的指令存储在指令缓冲器中。在备选实施例中,指令可以存储在指令寄存器、通用寄存器、程序栈或存储器中,包括静态和动态随机存取存储器。执行流程图100的过程的处理器在104对所获取的指令(例如,宏指令)进行解码以生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出。
根据本公开,由一系列次优指令组成的Vectorbeam代码序列存储在存储器中,之前是序列开始指令并且之后是序列结束指令。在一个实施例中,序列开始指令可以采用人类可读的汇编代码被编码,并且具有以一方式定义的记忆符,以便建议应该如何优化次优指令。例如,仅举几个例子,序列开始指令可以是“foreach”、或“do until”、或“repeatuntil”、或“do while”。可以类似地命名序列结束指令以便建议其功能(例如“end”、“exit”、“stop”、“continue”、“return”、“abort”、“undo”或“commit”)。序列开始和序列结束指令还可以具有预定值,这些预定值不是人类可读的,或者是数字的,或者已在没有人类干涉的情况下自动或随机被选择。
在一个实施例中,Vectorbeam代码的次优代码序列被写成模仿标量记忆符并且看起来具有标量和/或串行执行流程,使得它们易于理解和调试。用易于理解的定界符来对次优代码序列进行定界可以增强代码的可读性,并且还可以向处理器建议在运行时如何优化代码。
如果处理器在106确定它没有以优化模式运行,则它分派要在114执行的解码指令,并在116提交或退休该指令。
如上所述,在一个实施例中进入优化模式发生在当在104解码的指令是序列开始指令的运行时期间。在另一实施例中,处理器在通电时或复位后进入优化模式。在另一实施例中,处理器当在102获取具体指令的序列、在104解码它们、以及检测一个或多个次优指令(诸如标量指令或来自较旧指令集架构的指令)之后隐式地进入优化模式。在备选实施例中,响应于预定义的运行时事件,处理器在运行时间期间隐式地进入优化模式。
如上所述,在一个实施例中退出优化模式发生在当在104解码的指令是序列结束指令时的运行时期间。在备选实施例中,处理器在条件发生之后隐式地退出优化模式,所述条件诸如一段时间未能标识替代指令。在备选实施例中,处理器无限期地保持于优化模式。
如果处理器在106确定它已经处于优化模式,或者如果处理器检测到序列开始指令,则它在107处将解码的指令入队到指令缓冲器中。一个实施例中的指令缓冲器是一系列通用寄存器。在其他实施例中,指令缓冲器可以利用指令寄存器、标量寄存器、移位寄存器、栈存储器、静态或动态RAM存储器或高速缓冲存储器。
在操作中并且在运行时期间,处理器在108将指令缓冲器中的指令与查找表进行比较,以确定合适的替代指令是否可用,包括将产生更好性能的替代指令。在108评估合适的替代指令是否可用时,一个实施例中的处理器由包括序列开始定界符的元数据引导。在108评估合适的替代指令是否可用时,一个实施例中的处理器由寄存器堆(下面相对于图7进一步描述)的状态和内容引导。
下面相对于表1和表2讨论实现Vectorbeam代码并由元数据引导的所公开的处理器的示例。在一个实施例中,Vectorbeam代码的次优指令包括标量指令,并且替代指令包括向量指令或SIMD指令。在一个实施例中,Vectorbeam代码的次优指令包括来自较老世代处理器的指令集架构的指令,并且替代指令是从较新的处理器的指令集中选择的。在一个实施例中,Vectorbeam代码的次优指令的序列由指令的迭代循环组成,替代指令用更少的循环或用向量指令完成操作。在另一实施例中,指令缓冲器中的次优指令的序列由条件循环组成,并且替代指令用更少的循环或用向量指令完成操作。如果处理器在108确定将产生将产生更好性能的替代指令是可用的,则其在110选择一个或多个替代指令。
在112,处理器选择用于执行的解码指令(如果在108没有替代指令可用)或者选择在110被选择的一个或多个替代指令。在一个实施例中,处理器将指令的序列维持在指令缓冲器中。在另一个实施例中,处理器限制存储在指令缓冲器中的指令的数量,并且如果指令的数量超过该限制,则处理器从指令缓冲器移除一个或多个指令,并将它们分派以在114被执行。
在114,处理器执行解码的指令或所述一个或多个替代指令。在执行之后,处理器在116退休或提交指令,确保将执行结果被写到或已写到其目的地,并解放或释放资源以用于以后使用。
图2是示出根据一个实施例的由处理器用于在运行时与上下文有关地优化Vectorbeam代码指令的处理组件的框图。特定地,框图200包括指令存储装置202、获取电路204、解码电路206、执行电路220、和退休/提交电路226。解码电路206包括解码逻辑208、优化模式检测器210、指令缓冲器212、查找表214、替代评估逻辑216和指令选择器218。框图200还包括执行电路220、寄存器222、存储器224和退休/提交电路226。
在操作中,处理器在运行时期间利用获取电路204从指令存储装置202获取指令。在一个实施例中,指令存储装置202是寄存器堆。在备选实施例中,指令存储装置202可以是指令缓冲器、指令寄存器、通用寄存器、程序栈或静态或动态随机存取存储器。
处理器将所获取的指令传递给解码电路206,解码电路206利用解码逻辑208对所获取的指令进行解码。下面相对于图3描述指令,包括其操作码和可选操作数。处理器通过优化模式检测器210检测它是否处于优化模式。如果处理器未处于优化模式,则处理器将解码的指令分派到执行电路220。
但是,如果优化模式检测器210检测到处理器处于优化模式或将处理器设置为处于优化模式,则解码的指令在指令缓冲器212中排队。如所示的,指令缓冲器212具有四个条目,但是条目的数量是可变的:如将被本领域技术人员所理解的,它可以少于四个,它可以大于四个,或者它可以动态被调整。在运行时期间,处理器使用替代评估逻辑216来评估指令缓冲器212中的解码指令。
特定地,替代评估逻辑216在运行时期间访问查找表214以确定是否有任何替代指令可用。在一个实施例中,查找表将指令缓冲器中的次优Vectorbeam指令的记忆符与替代指令的列示进行比较。在一个实施例中,替代指令是向量指令。在另一实施例中,替代指令是SIMD指令。在另一实施例中,替代指令来自比次优指令更新的指令集架构。在评估替代物中,在一个实施例中,替代评估逻辑216由被提供以序列开始指令的元数据来引导。在评估替代物中,在一个实施例中,替代评估逻辑216评估处理器寄存器的运行时状态。例如,如果在确定存储器地址中使用多个寄存器,并且如果那些存储器地址落在同一高速缓存行中,则替代评估逻辑216用向量存储器访问代替与那些存储器地址相关联的标量存储器访问。
在一个实施例中,如果替代评估逻辑216确定替代指令可用,则将替代指令传递到分派选择器218来被分派以用于执行。在备选实施例中,替代指令被写到指令缓冲器212中、添加到或替代其中的指令。如所示的,解码电路206使用分派选择器218来选择用于从指令缓冲器212或从替代评估逻辑216分派的指令。
在一个实施例中,执行电路220是向量处理器。在备选实施例中,执行电路220可以包括多个核和并行硬件。在一个实施例中,执行电路220利用寄存器222和存储器224来存储中间结果和以其他方式支持执行。在执行之后,退休/提交电路226确保将执行结果写到或已经写到其目的地,并解放或释放资源以用于以后使用。
图3示出了根据一实施例的指令及其各种字段。特定地,指令300包括操作码302和各个可选的第一、第二和第三操作数标识符304、306和308。操作码302标识待执行的指令和/或操作、以及操作数的类型(例如,“序列开始”或“序列结束”)。第一、第二和第三操作数标识符304、306和308是可选的。在一个实施例中,操作码302是“序列开始”指令,并且第一、第二和第三操作数标识符304、306和308表示描述随后的次优指令的元数据,其向处理器提供关于如何优化次优指令的提示或建议。在备选实施例中,操作码302是“序列开始”指令,其标识随后的次优指令的迭代序列,并且第一、第二和第三操作数标识符304、306和308建议多个循环迭代、用于关于每次迭代而变化的寄存器、以及关于每次迭代而按其递增变量的跨距。在备选实施例中,操作码302对应于“序列开始”指令,并且不使用第一、第二和第三操作数标识符304、306和308中的一个或多个。在备选实施例中,操作码302对应于“序列结束”指令,并且不使用第一、第二和第三操作数标识符304、306和308。
表1示出了根据一个实施例优化的次优指令的示例性序列。特定来说,表1的并排(side-by-side-by-side)代码比较示出了用于实现标记为代码1的以下循环的三个版本的指令:标量代码、AVX代码和Vectorbeam代码:
代码1 for (intl=0; I< 64; i++) { outp[i] = inpi[l] + inp2[1];]
表格1
如表1中所示的,标量代码包括要执行64次的循环,每次将寄存器rax递增1。标量代码是次优的,因为它可能无法在其64次循环迭代期间运用处理器的所有并行资源。
AVX代码在几个方面与标量代码不同。AVX寄存器、ymm0和ymm1具有不同的名称和不同的大小。AVX操作码具有不同的名称。按8而不是1通过数据迭代是为与AVX相关联的处理器的世代所特有的。通常,对发明标量指令(诸如表1中的标量指令)、对为它们制作文档、对使编译器能够发出它们、对培训用户以使用它们以及对调试和收集执行记录所作的工作可能需要部分或全部重复以用于与指令集架构的每一新世代(例如MMX、SSE、SSE2、SSE3、SSE4、AVX、AVX2、AVX 3.1和AVX 3.2)重新使用。
然而,根据本公开,在Vectorbeam代码中使用具有基本相同格式的基本相同的标量指令。特定地,Vectorbeam代码体被序列开始指令(这里是“foreach rax,0,64,1”)序列结束指令(这里是“next”)包围。在编码时,序列开始指令中的“foreach”操作码向实现流程100(图1)的处理器指示要遵循的次优代码应该是迭代代码。在编码时,操作数“rax”“0”、“64”和“1”提供元数据,其建议实现流程100(图1)的处理器使用寄存器rax作为循环索引、将rax从0改变到63、带有对于每次迭代的为1跨距来循环次优代码。换句话说,序列开始指令建议实现流程100(图1)的处理器执行64次次优代码,每次将rax改变1。原始标量代码的作者可以用基本相同的操作码和基本相同的格式准备Vectorbeam代码序列,并将其留给处理器以优化代码。处理器将优化Vectorbeam代码,以利用其具体的硬件能力和指令集架构。通过这种方式,用于实现代码1的代码序列可以移植到新一代处理器和指令集架构,而无需重写、重新制作文档、重新启用、重新测试、重新训练、重新调试和重新发布代码的工作。当新处理器变得可用时,开发人员也可以花更少的时间学习新的操作码和新的寄存器堆以及与新指令集架构关联的其他细节。
图4示出了根据一实施例的由优化表1的Vectorbeam代码的处理器进行的示例性寄存器重命名。特定地,该实施例中的Vectorbeam代码将由128位处理器(例如SSE)运行,该处理器具有将Vectorbeam上下文扩展4的默认策略。因此,第一次通过处理器必须执行对于具有值{0,1,2,3}的rax的代码。当处理器到达Vectorbeam指令movss(%rsp,%rax,4),%xmm0时,它必须执行四次加载:
xmm0[0] =(rsp + 0 * 4);
xmm0[l] =(rsp + 1 * 4);
xmm0[2] =(rsp + 2 * 4);
xmm0[3] =(rsp + 3 * 4);
尽管表1的Vectorbeam代码涉及架构寄存器xmm0和xmm1,但是执行图4的Vectorbeam代码400的处理器将架构寄存器重命名为物理寄存器。(如本领域技术人员所知的,执行代码的处理器可具有大量物理寄存器以用作各种程序线程中引用的架构寄存器,所述线程可同时或乱序运行)。如所示出的,处理器访问逻辑到物理寄存器表404以确定如何将架构寄存器映射到物理寄存器。根据表404,处理器将xmm0和xmm1指派给物理寄存器堆位置4-7和12-15。
图5示出了根据一个实施例的用于并行处理图4的分配寄存器的多个计算资源的示例性分配。这里的128位SSE处理器将其可用的硬件资源的其知识应用于优化代码和寄存器重命名。如所示的,根据本发明的处理器将架构xmm寄存器重命名为物理寄存器堆502。在该实施例中所选择的寄存器分配允许一次四个ALU并行执行添加,如由图5的504、506、508和510所示出的。
表2示出了根据一个实施例正被优化的Vectorbeam次优指令的示例性序列。特定地,表2的并排代码比较说明了用于实现代码2的条件循环的四个版本的指令:标量代码、SSE代码、AVX3代码和Vectorbeam代码,如下:
代码2. for(int i=0;i<PTS;i++){if(cond[i]){outp[i]=npl[i]+inp2[i];}}
表2。
如所示出的,标量代码(像表1和表2中所示的标量代码)是次优的,因为它需要64个循环。如果标量代码或要在现代向量处理器上运行,则它将使用比可用的更少的并行硬件资源。
与AVX代码(表1)一样,将标量代码迁移到SSE代码的程序员需要学习新的操作码、新的寄存器集合,并且SSE代码不提供跳转旁路。通常,对发明标量指令、为它们制作文档、使编译器发出它们、训练用户使用它们以及调试和收集代码的记录所做的工作可能需要每一代指令集架构(例如MMX、SSE、SSE2、SSE3、SSE4、AVX、AVX2、AVX 3.1和AVX 3.2)被部分或全部重复。
此外,SSE代码具有一些缺点。举例来说,由于SSE代码没有跳转旁路,它会无论如何对所有通道执行数学运算,然后使用BLEND指令将未触及的非条件值与条件块中所写的值进行适当合并。性能受损(BLEND比普通存储慢至约三分之二)-需要更多寄存器(5对2)。与AVX代码(表1)一样,SSE代码生成需要复杂的编译器。
像AVX代码(表1)的AVX3代码在若干方面与标量代码不同。AVX3寄存器、ymm0...n具有不同的名称和不同的大小。AVX3操作码具有不同的名称。AVX3使用‘k’个寄存器,它们按比较结果设置并然后与存储/加载结合使用。像SSE代码的AVX3代码没有分支;处理器在所有条件下执行所有操作码。通常,然后,对发明标量指令、为它们制作文档、使编译器发出它们、训练用户使用它们以及调试和收集代码的记录所做的工作可能需要对于每一代指令集架构(例如MMX、SSE、SSE2、SSE3、SSE4、AVX、AVX2、AVX 3.1和AVX 3.2)被部分或全部重复。
然而,根据本公开,基本上与(表1)相同的标量指令可以在Vectorbeam代码中以基本相同的格式使用。特定地,Vectorbeam代码以序列开始指令(此处为“foreach rax,0,64,1”)和序列结束指令(此处为“next”)开始。在编码时,“foreach”操作码向实现流程100(图1)的处理器指示要遵循的次优Vectorbeam代码是迭代代码。在编码时,操作数“rax”“0”、“64”和“1”提供元数据,其建议实现流程100(图1)的处理器使用寄存器rax作为循环索引、将rax从0改变到63、对于每次迭代的跨距为1来循环次优Vectorbeam代码。换句话说,实现流程100(图1)的处理器将被实质执行64次次优代码,每次将rax改变1。以这种方式,实现代码1的代码序列可以移植到新一代指令集架构,而无需重写\重新测试和重新发布代码的工作。开发人员也可以花更少的时间学习新的操作码和新的寄存器堆以及与新指令集架构关联的其他细节。
此外,根据本公开,知道与具体CPU相关联的具体资源、能力和指令集架构的CPU架构师可以选择如何实现在次优Vectorbeam指令的序列中描述的功能。此外,操作码302(图3)和元数据304、306和308(图3)可以在选择用什么指令代替次优Vectorbeam指令的序列时向处理器提供提示。例如,序列开始指令可以让处理器知道多个存储器加载或存储使用相同的偏移。或者,序列开始指令可提供多个存储器加载或存储到同一缓存行的提示。或者,序列开始指令可以提供多个数学运算使用相同操作数的提示,如在诸如通过增加亮度来均匀地调整像素的多媒体或图形代码例程中可以这样的情况。
图6示出了根据一个实施例的列示向量指令替代标量指令的查找表的一部分。特定地,表600列示了用于执行以下数学运算的标量指令及其对应的向量等价物:加法、减法、乘法、除法、平方根、最大值、最小值、倒数和平方根的倒数。参考并排表600,在一个实施例中,存储在指令缓冲器212(图2)中的次优Vectorbeam指令的序列包括标量加法ADDSS,并且替代评估逻辑216(图2)用向量加法ADDPS替代一个或多个次优的Vectorbeam指令。
图7示出了根据一个实施例的向量处理器寄存器堆。特定地,寄存器堆700包括向量寄存器702和通用寄存器704。如所示出的,向量寄存器702包括32个zmm寄存器706,每个512位宽,16个ymm寄存器708,每个256位宽,以及16个xmm寄存器710,每个128个位宽。作为评估对于指令缓冲器212(图2)中的次优Vectorbeam指令的替代的一部分,在一个实施例中,替代评估逻辑216(图2)将8个32位标量操作的结果指派给256位ymm寄存器。
在备选实施例中,用来自较新指令集架构的指令替代次优指令的Vectorbeam序列。在一个实施例中,利用128位XMM寄存器704的次优SSE指令的序列被AVX的序列代替,AVX的序列运行利用256位YMM寄存器706并实现更好的性能而不要求由作者重写次优代码的指令。在另一个实施例中,利用YMM寄存器706的次优AVX指令的序列被AVX-512指令的序列代替,AVX-512指令利用ZMM寄存器708并达到更好的性能而不要求由其作者重写次优代码。
在备选实施例中,操作码302(图3)可标识与存储在指令缓冲器212(图2)中的次优指令相关联的具体指令集架构。然后,替代评估逻辑216(图2)可以用与处理器的指令集架构相关联的最优指令替代次优指令。
在一个实施例中,次优指令和替代指令两者都是向量指令,但是替代指令来自较新的世代并且使用更宽的寄存器。
权利要求书(按照条约第19条的修改)
1.一种处理器,包括:
获取电路,用于从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,后面是序列结束指令;
解码电路,用于解码所述指令;以及
执行电路,用于执行从所述解码电路接收的分派的指令;
其中,所述解码电路被配置成检测所述序列开始指令和所述序列结束指令,以缓冲它们之间的所述次优指令的序列,以访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及以选择所解码的指令或所述一个或多个优化指令的序列以分派给所述执行电路。
2.一种处理器,包括:
获取电路,用于从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,后面是序列结束指令;
解码电路,用于解码所述指令,所述解码电路包括用于检测所述序列开始指令和所述序列结束指令的部件,以及用于缓冲它们之间的所述次优指令的序列的部件;以及
执行电路,用于执行从所述解码电路接收的分派的指令;
其中,所述解码电路还用于访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,并用于选择所解码的指令或所述一个或多个优化指令的序列以分派给所述执行电路。
3.如权利要求1-2中任一项所述的处理器,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
4.如权利要求1-2中任一项所述的处理器,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令多数据指令。
5.如权利要求1-2中任一项所述的处理器,其中提供有所述序列开始指令的元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
6.如权利要求1-2中任一项所述的处理器,其中,所述一个或多个优化指令的序列利用的寄存器比所述次优指令的序列利用的寄存器更宽。
7.如权利要求1-2中任一项所述的处理器,其中,所述解码电路还被配置成访问所述查找表以标识多个替代指令来替代多个所述次优指令的序列。
8.如权利要求1-2中任一项所述的处理器,其中所述序列开始指令的所述第一源操作数标识符和所述第二源操作数标识符包括提供描述所述次优指令的序列的数据的元数据。
9.如权利要求1-2中任一项所述的处理器,其中所述次优指令的序列在执行迭代序列上循环。
10.如权利要求1-2中任一项所述的处理器,其中所述第一源操作数标识符指定在所述次优指令的序列上迭代的次数,所述第二源操作数标识符指定在每次迭代期间递增的变量,以及第三个源操作数标识符指定在每次迭代期间递增所述变量所按照的跨距。
11.一种方法,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
由解码电路解码所述指令;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括检测所述序列开始指令和所述序列结束指令,缓冲它们之间的所述次优指令的序列,访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
12.一种方法,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
由解码电路解码所述指令,包括执行用于检测所述序列开始指令和所述序列结束指令的步骤,以及用于缓冲它们之间的所述次优指令的序列的步骤;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
13.如权利要求11-12中任一项所述的方法,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
14.如权利要求11-12中任一项所述的方法,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令多数据指令。
15.如权利要求11-12中任一项所述的方法,其中提供有所述序列开始指令的元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
16.如权利要求11-12中任一项所述的方法,其中,所述一个或多个优化指令的序列利用的寄存器比所述次优指令的序列利用的寄存器更宽。
17.如权利要求11-12中任一项所述的方法,其中,所述解码电路还访问所述查找表以标识多个替代指令来替代多个所述次优指令的序列。
18.如权利要求11-12中任一项所述的方法,其中所述序列开始指令的所述第一源操作数标识符和所述第二源操作数标识符包括提供描述所述次优指令的序列的数据的元数据。
19.如权利要求11-12中任一项所述的方法,其中所述次优指令的序列在执行迭代序列上循环。
20.如权利要求11-12中任一项所述的方法,其中,所述第一源操作数标识符指定在所述次优指令的序列上迭代的次数,所述第二源操作数标识符指定在每次迭代期间递增的变量,以及第三个源操作数标识符指定在每次迭代期间递增所述变量所按照的跨距。
21.一种制品,包括非暂态机器可读存储介质,所述非暂时性机器可读存储介质存储能够由处理器执行以执行以下动作的过程的指令,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
由解码电路解码所述指令;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括检测所述序列开始指令和所述序列结束指令,缓冲它们之间的所述次优指令的序列,访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
22.一种制品,包括非暂态机器可读存储介质,所述非暂时性机器可读存储介质存储能够由处理器执行以执行以下动作的过程的指令,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
由解码电路解码所述指令,包括执行用于检测所述序列开始指令和所述序列结束指令的步骤,以及用于缓冲它们之间的所述次优指令的序列的步骤;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
23.如权利要求21-22中的任一项所述的制品,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
24.如权利要求21-22中的任一项所述的制品,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令多数据指令。
25.如权利要求21-22中的任一项所述的制品,其中提供有所述序列开始指令的元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
Claims (25)
1.一种处理器,包括:
获取电路,用于从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,后面是序列结束指令;
解码电路,用于解码所述指令;以及
执行电路,用于执行从所述解码电路接收的分派的指令;
其中,所述解码电路被配置成检测所述序列开始指令和所述序列结束指令,以缓冲它们之间的所述次优指令的序列,以访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及以选择所解码的指令或所述一个或多个优化指令的序列以分派给所述执行电路。
2.一种处理器,包括:
获取电路,用于从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,后面是序列结束指令;
解码电路,用于解码所述指令,所述解码电路包括用于检测所述序列开始指令和所述序列结束指令的部件,以及用于缓冲它们之间的所述次优指令的序列的部件;以及
执行电路,用于执行从所述解码电路接收的分派的指令;
其中,所述解码还用于访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,并用于选择所解码的指令或所述一个或多个优化指令的序列以分派给所述执行电路。
3.如权利要求1-2中任一项所述的处理器,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
4.如权利要求1-2中任一项所述的处理器,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令多数据指令。
5.如权利要求1-4中任一项所述的处理器,其中元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
6.如权利要求1-5中任一项所述的处理器,其中,所述一个或多个优化指令的序列利用的寄存器比所述次优指令的序列利用的寄存器更宽。
7.如权利要求1-6中任一项所述的处理器,其中,所述解码电路还被配置成访问所述查找表以标识多个替代指令来替代多个所述次优指令的序列。
8.如权利要求1-7中任一项所述的处理器,其中所述序列开始指令的所述第一源操作数标识符和所述第二源操作数标识符包括提供描述所述次优指令的序列的数据的元数据。
9.如权利要求1-8中任一项所述的处理器,其中所述次优指令的序列在执行迭代序列上循环。
10.如权利要求1-9中任一项所述的处理器,其中所述第一源操作数标识符指定在所述次优指令的序列上迭代的次数,所述第二源操作数标识符指定在每次迭代期间递增的变量,以及第三个源操作数标识符指定在每次迭代期间递增所述变量所按照的跨距。
11.一种方法,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
解码所述指令;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括检测所述序列开始指令和所述序列结束指令,缓冲它们之间的所述次优指令的序列,访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
12.一种方法,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
解码所述指令,包括执行用于检测所述序列开始指令和所述序列结束指令的步骤,以及用于缓冲它们之间的所述次优指令的序列的步骤;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
13.如权利要求11-12中任一项所述的方法,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
14.如权利要求11-12中任一项所述的方法,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令单指令多数据指令。
15.如权利要求11-14中任一项所述的方法,其中元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
16.如权利要求11-15中任一项所述的方法,其中,所述一个或多个优化指令的序列利用的寄存器比所述次优指令的序列利用的寄存器更宽。
17.如权利要求11-16中任一项所述的方法,其中,所述解码电路还访问所述查找表以标识多个替代指令来替代多个所述次优指令的序列。
18.如权利要求11-17中任一项所述的方法,其中所述序列开始指令的所述第一源操作数标识符和所述第二源操作数标识符包括提供描述所述次优指令的序列的数据的元数据。
19.如权利要求11-18中任一项所述的方法,其中所述次优指令的序列在执行迭代序列上循环。
20.如权利要求11-19中任一项所述的方法,其中,所述第一源操作数标识符指定在所述次优指令的序列上迭代的次数,所述第二源操作数标识符指定在每次迭代期间递增的变量,以及第三个源操作数标识符指定在每次迭代期间递增所述变量所按照的跨距。
21.一种制品,包括非暂态机器可读存储介质,所述非暂时性机器可读存储介质存储能够由处理器执行以执行以下动作的过程的指令,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
解码所述指令;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括检测所述序列开始指令和所述序列结束指令,缓冲它们之间的所述次优指令的序列,访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
22.一种制品,包括非暂态机器可读存储介质,所述非暂时性机器可读存储介质存储能够由处理器执行以执行以下动作的过程的指令,包括:
从指令存储装置获取指令,所述指令的格式包括操作码、第一源操作数标识符和第二源操作数标识符;其中,所述指令存储装置包括次优指令的序列,所述次优指令的序列前面是序列开始指令,并且后面是序列结束指令;
解码所述指令,包括执行用于检测所述序列开始指令和所述序列结束指令的步骤,以及用于缓冲它们之间的所述次优指令的序列的步骤;以及
执行从所述解码电路接收的分派的指令;
其中,所述解码还包括访问查找表以标识一个或多个优化指令的序列来替代所述次优指令的序列中的一个或多个,以及选择要执行的所解码的指令或所述一个或多个优化指令的序列。
23.如权利要求22-23中的任一项所述的制品,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括向量指令。
24.如权利要求22-23中的任一项所述的制品,其中所述次优指令的序列包括标量指令,并且所述一个或多个优化指令的序列包括单指令多数据指令。
25.如权利要求22-25中的任一项所述的制品,其中元数据描述与所述次优指令相关联的指令集架构,并且其中所述一个或多个优化指令的序列与另一指令集架构相关联。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/052765 | 2016-02-24 | ||
US15/052,765 US10019264B2 (en) | 2016-02-24 | 2016-02-24 | System and method for contextual vectorization of instructions at runtime |
PCT/US2017/015052 WO2017146857A1 (en) | 2016-02-24 | 2017-01-26 | System and method for contextual vectorization of instructions at runtime |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108475198A true CN108475198A (zh) | 2018-08-31 |
Family
ID=59629990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780007959.XA Pending CN108475198A (zh) | 2016-02-24 | 2017-01-26 | 用于在运行时的指令的上下文向量化的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10019264B2 (zh) |
CN (1) | CN108475198A (zh) |
DE (1) | DE112017000968T5 (zh) |
TW (1) | TWI733746B (zh) |
WO (1) | WO2017146857A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558235A (zh) * | 2018-11-30 | 2019-04-02 | 杭州迪普科技股份有限公司 | 一种处理器的调度方法、装置及计算机设备 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10346055B2 (en) * | 2017-07-28 | 2019-07-09 | Advanced Micro Devices, Inc. | Run-time memory access uniformity checking |
US11093224B2 (en) | 2019-04-24 | 2021-08-17 | International Business Machines Corporation | Compilation to reduce number of instructions for deep learning processor |
US11775298B2 (en) * | 2020-04-24 | 2023-10-03 | Intel Corporation | Frequency scaling for per-core accelerator assignments |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1717654A (zh) * | 2002-11-28 | 2006-01-04 | 皇家飞利浦电子股份有限公司 | 数据处理器的循环控制电路 |
US20080140750A1 (en) * | 2006-12-12 | 2008-06-12 | Arm Limited | Apparatus and method for performing rearrangement and arithmetic operations on data |
US20130067196A1 (en) * | 2011-09-13 | 2013-03-14 | Qualcomm Incorporated | Vectorization of machine level scalar instructions in a computer program during execution of the computer program |
CN103299272A (zh) * | 2010-12-07 | 2013-09-11 | 超威半导体公司 | 使用存储的原子程序的可编程原子内存 |
CN103890719A (zh) * | 2011-10-18 | 2014-06-25 | 联发科技瑞典有限公司 | 数字信号处理器以及基带通信设备 |
CN104081343A (zh) * | 2012-01-31 | 2014-10-01 | 国际商业机器公司 | 事务存储器的主分支指令 |
CN104731556A (zh) * | 2013-12-23 | 2015-06-24 | 国际商业机器公司 | 用于从代码语句生成simd代码的方法和系统 |
CN104778030A (zh) * | 2013-12-20 | 2015-07-15 | 想象技术有限公司 | 具有虚拟化指令集架构的处理器和方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7249350B2 (en) * | 2002-09-30 | 2007-07-24 | Intel Corporation | Optimized translation of scalar type SIMD instructions into non-scalar SIMD instructions |
US7840954B2 (en) * | 2005-11-29 | 2010-11-23 | International Business Machines Corporation | Compilation for a SIMD RISC processor |
US8505002B2 (en) * | 2006-09-29 | 2013-08-06 | Arm Limited | Translation of SIMD instructions in a data processing system |
US8423979B2 (en) * | 2006-10-12 | 2013-04-16 | International Business Machines Corporation | Code generation for complex arithmetic reduction for architectures lacking cross data-path support |
US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
KR101595637B1 (ko) * | 2011-04-01 | 2016-02-18 | 인텔 코포레이션 | 벡터 친숙형 명령어 형식 및 그의 실행 |
CN103999045B (zh) * | 2011-12-15 | 2017-05-17 | 英特尔公司 | 使用混洗表和混合表经由矢量指令优化程序循环的方法 |
US9244677B2 (en) * | 2012-09-28 | 2016-01-26 | Intel Corporation | Loop vectorization methods and apparatus |
US9459871B2 (en) * | 2012-12-31 | 2016-10-04 | Intel Corporation | System of improved loop detection and execution |
US9052888B2 (en) | 2013-02-21 | 2015-06-09 | International Business Machines Corporation | Vectorization in an optimizing compiler |
-
2016
- 2016-02-24 US US15/052,765 patent/US10019264B2/en active Active
-
2017
- 2017-01-24 TW TW106102675A patent/TWI733746B/zh not_active IP Right Cessation
- 2017-01-26 CN CN201780007959.XA patent/CN108475198A/zh active Pending
- 2017-01-26 WO PCT/US2017/015052 patent/WO2017146857A1/en active Application Filing
- 2017-01-26 DE DE112017000968.5T patent/DE112017000968T5/de not_active Withdrawn
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1717654A (zh) * | 2002-11-28 | 2006-01-04 | 皇家飞利浦电子股份有限公司 | 数据处理器的循环控制电路 |
US20080140750A1 (en) * | 2006-12-12 | 2008-06-12 | Arm Limited | Apparatus and method for performing rearrangement and arithmetic operations on data |
CN103299272A (zh) * | 2010-12-07 | 2013-09-11 | 超威半导体公司 | 使用存储的原子程序的可编程原子内存 |
US20130067196A1 (en) * | 2011-09-13 | 2013-03-14 | Qualcomm Incorporated | Vectorization of machine level scalar instructions in a computer program during execution of the computer program |
CN103890719A (zh) * | 2011-10-18 | 2014-06-25 | 联发科技瑞典有限公司 | 数字信号处理器以及基带通信设备 |
CN104081343A (zh) * | 2012-01-31 | 2014-10-01 | 国际商业机器公司 | 事务存储器的主分支指令 |
CN104778030A (zh) * | 2013-12-20 | 2015-07-15 | 想象技术有限公司 | 具有虚拟化指令集架构的处理器和方法 |
CN104731556A (zh) * | 2013-12-23 | 2015-06-24 | 国际商业机器公司 | 用于从代码语句生成simd代码的方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109558235A (zh) * | 2018-11-30 | 2019-04-02 | 杭州迪普科技股份有限公司 | 一种处理器的调度方法、装置及计算机设备 |
CN109558235B (zh) * | 2018-11-30 | 2020-11-06 | 杭州迪普科技股份有限公司 | 一种处理器的调度方法、装置及计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
US20170242696A1 (en) | 2017-08-24 |
DE112017000968T5 (de) | 2018-12-13 |
TWI733746B (zh) | 2021-07-21 |
TW201738734A (zh) | 2017-11-01 |
WO2017146857A1 (en) | 2017-08-31 |
US10019264B2 (en) | 2018-07-10 |
WO2017146857A4 (en) | 2017-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9383999B2 (en) | Conditional compare instruction | |
US5710902A (en) | Instruction dependency chain indentifier | |
WO2018024093A1 (zh) | 一种能支持不同位宽运算数据的运算单元、方法及装置 | |
US9047077B2 (en) | Vectorization in an optimizing compiler | |
JP7335225B2 (ja) | データ処理装置におけるデータ項目内のカウント要素 | |
CN108475198A (zh) | 用于在运行时的指令的上下文向量化的系统和方法 | |
JPH0778751B2 (ja) | バイアスされた疑似ランダム・テスト・パターンを動的に生成する方法 | |
TWI785064B (zh) | 用於測試向量元素內部的位元值的設備、方法、電腦程式及電腦可讀儲存媒體 | |
KR102379894B1 (ko) | 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 | |
JP2014010832A (ja) | ステージド・ループ命令 | |
US8850266B2 (en) | Effective validation of execution units within a processor | |
IL256859A (en) | Processing vectors using loops with dynamic vector length | |
TWI613590B (zh) | 處理器流水線中的靈活的指令執行 | |
KR100316710B1 (ko) | 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치 | |
KR20180035211A (ko) | 벡터 산술 명령 | |
US20230131389A1 (en) | Quantum instruction set architecture (quasar) | |
CN116594682A (zh) | 基于simd库的自动测试方法及装置 | |
US20220075650A1 (en) | Cached and pipelined execution of software modules | |
US11354126B2 (en) | Data processing | |
GB2540944A (en) | Vector operand bitsize control | |
KR101118593B1 (ko) | Vliw 명령어 처리 장치 및 방법 |
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 |