CN112328537A - 在64位数据路径上实现128位simd操作 - Google Patents
在64位数据路径上实现128位simd操作 Download PDFInfo
- Publication number
- CN112328537A CN112328537A CN202011231249.5A CN202011231249A CN112328537A CN 112328537 A CN112328537 A CN 112328537A CN 202011231249 A CN202011231249 A CN 202011231249A CN 112328537 A CN112328537 A CN 112328537A
- Authority
- CN
- China
- Prior art keywords
- register
- array
- size
- registers
- bits
- 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 claims abstract description 47
- 238000003491 array Methods 0.000 claims abstract description 8
- 230000004044 response Effects 0.000 claims description 16
- 230000000977 initiatory effect Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 12
- 238000004590 computer program Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 235000019580 granularity Nutrition 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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
- G06F9/30112—Register structure comprising data of variable length
-
- 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/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明的各实施方式总体上涉及在64位数据路径上实现128位SIMD操作。具体地,涉及一种用于实现包括第一大小的操作数和第二大小的数据路径的处理器架构的方法。该第二大小不同于该第一大小。给出第一阵列寄存器和第二阵列寄存器,该第一阵列和第二阵列的每个寄存器是第二大小,分别从第一阵列和第二阵列选择第一寄存器和对应的第二寄存器以执行第一大小的操作。这允许通过软件与硬件处理器交互的用户提供数据路径位宽而不是寄存器位宽的数据。优势在于,用户可以不知道寄存器的大小。
Description
分案申请说明
本申请是申请日为2015年11月13日、申请号为201510778947.X、名称为“在64位数据路径上实现128位SIMD操作”的中国发明专利申请的分案申请。
技术领域
本发明的各实施方式总体上涉及处理器架构,并且更具体地涉及在64位数据路径上实现128位SIMD操作。
背景技术
处理器规格可以指定待使用的数据路径参数。例如,ARMv8架构指定128位宽的数据路径用于处理128位单指令多数据(SIMD)操作。然而,硬件处理器可以通过满足处理器规格的任何方式来实现这种数据路径。
发明内容
在本公开的一个实施方式中,一种用于实现包括第一大小的操作数和第二大小的数据路径的处理器架构的方法。该第二大小不同于该第一大小。给出第一阵列寄存器和第二阵列寄存器,该第一阵列和第二阵列的每个寄存器是第二大小,分别从该第一阵列和该第二阵列选择第一寄存器和对应的第二寄存器以执行该第一大小的操作。
本领域普通技术人员可以理解该第一大小和该第二大小可以是数据大小、诸如位宽、字节宽度、位大小、字节大小或任意其他数据大小。
在一个实施方式中,第一阵列寄存器与第二阵列寄存器对应,使得第一阵列的每个寄存器对应于第二阵列的每个寄存器。
在一个实施方式中,对应于第二阵列的第二寄存器的第一阵列的第一寄存器存储与该第二寄存器中存储的多个位相比意义不同的多个位。
在一个实施方式中,该方法包括响应于接收第一非空选择值来选择第一寄存器以及响应于接收第二非空选择值来选择第二寄存器。
在一个实施方式中,该方法包括响应于接收第一非空选择值来选择第一寄存器以及在未接收第二非空选择值时不选择第二寄存器。
在一个实施方式中,该方法进一步包括在功能单元对第一寄存器的数据执行第一操作并且对对应的第二寄存器中的数据执行第二操作,该第一操作和该第二操作与相同指令有关。
在一个实施方式中,在开始对第一寄存器的数据进行操作之后,该方法进一步包括发出停止周期并且在该停止周期期间读取对应的第二寄存器的数据。
在一个实施方式中,该方法进一步包括返回第一大小的结果,该结果部分存储在第一目的地寄存器中并且部分存储在对应的第二目的地寄存器中,该第一目的地寄存器和该第二目的地寄存器分别在第一阵列和第二阵列中。
在一个实施方式中,该方法进一步包括返回第一阵列或者第二阵列中的目的地寄存器中存储的第二大小的结果。
在一个实施方式中,执行第一大小的操作包括在该操作是成对指令和跨向量指令中的任意一个时,在读取第一寄存器中的第二操作数的位的相同时钟周期中读取第二寄存器中的第一操作数的位。该实施方式进一步包括在指令是成对指令时,在下一时钟周期中在读取第四寄存器中的第二操作数的位时读取第三寄存器中的第一操作数的位。
在一个实施方式中,执行第一大小的操作包括在第二时钟周期中读取所述第一阵列的多个寄存器的位之前,在第一时钟周期中读取所述第二阵列的多个寄存器的位。
在一个实施方式中,一种用于实现包括第一大小的操作数和第二大小的数据路径的处理器架构的系统。该第二大小不同于该第一大小。该系统包括第一阵列寄存器。该第一阵列的每个寄存器是第二大小。该系统包括第二阵列寄存器。该第二阵列的每个寄存器是第二大小。该系统还包括选择模块,被配置为分别从该第一阵列和该第二阵列选择第一寄存器和对应的第二寄存器以执行第一大小的操作。
在一个实施方式中,第一阵列寄存器与第二阵列寄存器对应,使得该第一阵列的每个寄存器对应于该第二阵列的特定寄存器。
在一个实施方式中,对应于该第二阵列的第二寄存器的该第一阵列的第一寄存器存储与该第二寄存器中存储的多个位相比意义不同的多个位。
在一个实施方式中,选择模块被进一步配置为响应于接收第一非空选择值来选择第一寄存器以及响应于接收第二非空选择值来选择第二寄存器。
在一个实施方式中,选择模块被进一步配置为响应于接收第一非空选择值来选择第一寄存器以及在未接收第二非空选择值时不选择第二寄存器。
在一个实施方式中,该系统进一步包括功能单元,被配置为在功能单元对第一寄存器的数据执行第一操作并且对对应的第二寄存器中的数据执行第二操作,该第一操作和该第二操作与相同指令有关。
在一个实施方式中,该系统进一步包括发出单元,被配置为在开始对第一寄存器的数据进行操作之后,发出停止周期并且在该停止周期期间读取对应的第二寄存器的数据。
在一个实施方式中,该系统包括输出模块,该输出模块被配置为返回第一大小的结果,该结果存储在第一目的地寄存器和对应的第二目的地寄存器中,该第一目的地寄存器和该第二目的地寄存器分别在该第一阵列和该第二阵列中。
在一个实施方式中,该系统进一步包括输出模块,该输出模块被配置为返回第一阵列或者第二阵列中的目的地寄存器中存储的第二大小的结果。
在一个实施方式中,该功能单元被进一步配置为在该操作是成对指令和跨向量指令中的任意一个时,在读取第一寄存器中的第二操作数的位的相同时钟周期中读取第二寄存器中的第一操作数的位。该功能单元又被进一步配置为在指令是成对指令时,在下一时钟周期中在读取第四寄存器中的第二操作数的位时读取第三寄存器中的第一操作数的位。
在一个实施方式中,该功能单元被进一步配置为在第二时钟周期中读取第一阵列的多个寄存器的位之前,在第一时钟周期中读取第二阵列的多个寄存器的位。
在一个实施方式中,一种其上嵌入有计算机可读程序代码的非瞬态计算机可读介质,该计算机可读程序代码包括用于使得处理器执行用于实现包括第一大小的操作数和第二大小的数据路径的处理器架构的方法的指令,该第二大小不同于该第一大小。该指令在由一个或多个处理器执行时使得该一个或多个处理器给出第一阵列寄存器和第二阵列寄存器,该第一阵列和该第二阵列的每个寄存器是第二大小,分别从该第一阵列和该第二阵列选择第一寄存器和对应的第二寄存器以执行第一大小的操作。
在一个实施方式中,该第一阵列寄存器与该第二阵列寄存器对应,使得该第一阵列的每个寄存器对应于该第二阵列的每个寄存器。
在一个实施方式中,对应于第二阵列的第二寄存器的第一阵列的第一寄存器存储与该第二寄存器中存储的多个位相比意义不同的多个位。
附图说明
如附图中所图示的,通过以下本发明示例实施方式的更具体的描述容易理解前述内容和其他对象、特征和优势,在附图中相同附图标记指代贯穿不同视图的相同部分。附图不一定按比例,相反重点在于图示本发明的实施方式的原理。
图1是图示了本公开的示例实施方式的框图。
图2是图示了本公开的示例实施方式的示图。
图3是图示了与乘法器操作耦合的寄存器文件的示例实施方式的示图。
图4是图示了由本公开采用的过程的示例实施方式的流程图。
具体实施方式
为了与ARMv8架构兼容,对应的64位寄存器对可以被抽象以作为128位寄存器出现。在本公开中,技术被描述为采用64位寄存器文件用于128位单指令多数据(SIMD)操作(例如,为了在ARM处理器中使用)。硬件处理器的用户与作为128位处理器的处理器交互,然而,其内部操作使用64位寄存器。处理器接收128位指令,因此并不要求专用64位指令(例如,其接受架构位宽(例如,128位)的指令和数据)。这里描述的专用技术将数据路径自动分为两个64位数据路径,以便用户不需要在进行任何其他计算、工作或准备。
一种使用64位寄存器文件来实现128位SIMD操作的这种技术是在一个时钟周期中读取输入操作数的低64位,然后在随后时钟周期中读取该输入操作数的高64位。当执行许多128位SIMD操作时(不同于64位操作),发出单元在128位SIMD指令之后插入停止周期。该停止周期为读取输入操作数的高64位的功能单元在指令流水线中创建时隙。此空时隙稍后在返回结果的低64位的周期之后的时钟周期中返回该结果的高64位的指令流水线中也是可用的。实质上,所发出的停止周期向功能单元提供了附加时钟周期以计算结果的“较高”一半并将该结果返回存储器。
图1是图示了本公开示例实施方式的框图100。存储器寄存器单元102被操作耦合以与处理器中的功能单元104通信。功能单元104可以例如是处理器的算术逻辑单元(ALU)。
针对每片数据,存储器寄存器单元102将数据路径大小的数据存储在两个寄存器(低寄存器和高寄存器)中。同样,在第一时钟周期,响应于两个输入(例如,输入1和输入2)的指令,存储器寄存器102向功能单元104输出输入1-低106a和输入2-低108a。继而,在下一时钟周期,存储器寄存器102向功能单元104转发输入1-高106b和输入2-高108b。
功能单元104在对应于第一时钟周期和第二时钟周期的时钟周期接收两个输入106和108,但是可以基于由于包含存储器寄存器单元102和功能单元104的处理器中的流水线产生的延时而延迟。在一个示例中,功能单元104在第三时钟周期对低输入(输入1-低106a和输入2-低108a)进行操作,然后在第四时钟周期对高输入(输入1-高106b和输入2-高108b)进行操作。然而,本领域普通技术人员可以理解不同的流水线架构可以增加或减少功能单元104读取高和低输入1 106和输入2 108与对其执行操作之间的延迟。
在前述示例中,功能单元104在第三时钟周期执行其功能。在另一示例中,功能单元104在第二时钟周期对低输入开始工作,同时高输入正从存储器寄存器单元102读取。在又一示例中,功能单元104由于流水线延时在某个其他时钟周期对低输入开始工作。
在此第三时钟周期,功能单元104对两个低输入106a和108a执行其功能(例如,算术功能或其他按位操作)。在第四时钟周期,功能单元104向存储器寄存器102转发输出-低110a(表示两个低输入106a和108a的操作的结果)以存储在由指令指定的目的寄存器中。同时,在第四时钟周期,功能单元104对两个高输入106b和108b执行其功能。继而,在第五时钟周期,功能单元104向存储器寄存器102转发输出-高110b(表示两个高输入106b和108b的操作的结果)以存储在由指令指定的目的寄存器中。
因此,存储器寄存器102将输出110a-b两者存储在相应的低寄存器和高寄存器中。通过此方式,仅使用一个大小(例如,128位)的寄存器,功能单元接收输入并产生该一个大小(例如,128位)的输出,存储器寄存器102和功能单元104通过将操作分发在不止一个时钟周期上来实现第二大小(例如,64位)的数据路径。
图2是图示了本公开的示例实施方式的示图200。高寄存器阵列(URA)202和低寄存器阵列(LRA)204各自包括32个对应的64位寄存器。在许多情况下,URA 202和LRA 204的寄存器对应,例如,LRA 204的寄存器0(“寄存器L0”)对应于URA 202的寄存器0(“寄存器U0”),以使得两个寄存器一起存储128位值。在此示例中,寄存器L0存储该128位值的低64位并且寄存器U0存储该128位值的高64位。本领域普通技术人员可以理解高寄存器和低寄存器可以通过不同方式和模式(例如,经由不同的索引模式)对应,其中若干方式和模式稍后更加详细地描述。本领域普通技术人员还可以理解URA 202和LRA 204中的某些寄存器可以不具有对应的寄存器例如以存储64位值而不是128位值。然而,逻辑上,存储64位值的寄存器虽然仅使用一个寄存器但仍被认为是128位宽值。例如,第二寄存器可以不用于存储该值的较高一半,但是未写入的一半仍然逻辑上存在。在一个方便的示例中,URA 202和LRA 204位于单个物理阵列中。
寄存器阵列URA 202和LRA 204都还能够一次递送32位数据。通过此方式,寄存器可以将正被存储的64位中的32位数据归零。如果需要,这可以提供具有64位粒度和32位粒度两者的指令。例如,向寄存器文件写入值可以以32位增量执行。从寄存器文件读取值以64位增量执行(即使所有64位都没有被功能单元使用)。然而,即使URA 202和LRA 204被修改为提供32位部分归零数据,该URA 202和LRA 204仍然还是64位寄存器。
URA 202和LRA 204各自被配置为从功能单元(诸如ALU或其他模块)接收结果。URA202和LRA 204各自被配置为从功能单元接收写回作为结果1 212或结果0 214。结果1 212或结果0 214的写回是64位结果。
URA 202和LRA 204各自被连接到解复用器(未示出)和复用器(未示出),该解复用器选择待向其写入的活动寄存器并且该复用器选择待从其读取的活动寄存器。在一个实施方式中,该解复用器和复用器可以选择多个寄存器以在相同时钟周期分别向多个寄存器写入并且从多个寄存器读取。在所示实施方式中,该解复用器和复用器可以在相同时钟周期期间选择3个寄存器,但是在其他实施方式中,更多或更少寄存器还可以被选择(即,存在更多或更少操作数选择)。针对每个选定寄存器,该解复用器和复用器分别接收针对URA 202和LRA 204的选择值208和210,该选择值可以是5位值。在许多示例中,该选择值208和210针对给定时钟周期是相同的。然而,存在该选择值208和210针对给定时钟周期是不相同的实施方式。例如,该选择值208和210可以在如下实施方式中不同,其中URA 202的寄存器的索引不对应于LRA 204的寄存器的索引。
URA 202继而向选择复用器206输出3个高值216并且LRA 204向选择复用器206输出3个低值218。该选择复用器206基于输入值(选择信号)选择从URA 202发送高值216还是从LRA 204发送低值218以向功能单元输出。对选择复用器206的输入值基于处理器相对于指令接收的时钟周期。
系统还可以具有多个选择MUX 206。每个选择MUX 206可以基于针对每对高输入和低输入的不同选择信号来选择URA 202和LRA204的不同输出。例如,在上述其中URA 202和LRA 204各自产生3个相应高值216和低值218的实施方式中,相应的选择MUX 206可以使用相应选择信号来在每个高值216和低值218之间进行选择。如此,每个选择MUX 206总共在连续时钟周期输出由从相应URA 202和LRA 204接收的相应高值216和低值218形成的128位数。
在最常见的阵列访问序列中,去往复用器206的输入值(或选择信号)先前已足够了解以分别影响对URA 202和LRA 204的选择值208和210馈送。在一个方便的示例中,如果已知复用器206将仅从LRA 204选择操作数,则URA 202接收从例如控制器发送的特殊“空”选择值。
取决于每个周期活动的选择的数目,阵列可以接收一个或多个“空”选择值。例如,在图2所示的示例中,其中URA 202接收3个选择值,并且URA 202可以接收3个“空”选择值。在其他示例中,诸如切断时钟,不预充电字线和位线的技术或者其他功率最小化机制被应用于没有正被访问的阵列,而不是接收特殊“空”值。
类似地,如果已知复用器206将仅从URA 202选择操作数,则LRA 204接收特殊“空”选择值或者上述技术中的任一技术被应用于LRA 204。前述示例是有益的,这是因为在阵列的选择值是“空”(或者上述技术之一被使用)的情况下,该阵列消耗的功率小于具有非“空”选择值的阵列。减少功率在处理器设计方面非常值得关注,诸如当前所述的示例。
图3是图示了与乘法器320操作耦合的寄存器文件310(例如,浮点单元(FPU)寄存器文件或SIMD寄存器文件)的示例实施方式的示图300。乘法器320是被配置为对2个64位操作数进行操作的功能单元的示例。(其他功能单元可以对1个64位操作数或者两个或更多64位操作数进行操作)。数据路径被配置使得乘法器320或功能单元可以在随后的时钟周期中对2个高和低64位操作数进行操作,并且该数据路径稍后可以将结果的2个一半接合在一起以形成128位结果。
寄存器文件310包括URA 202和LRA 204。URA 202和LRA 204是64位宽,并且组合是128位宽。URA 202和LRA 204是具有32个条目的阵列。第一索引值312(V1_idx)从URA 202和LRA 204选择第一值,其作为2个64位值(V1[63:0]和V1[127:64])向复用器318a输出。第二索引值314从URA 202和LRA 204选择第二值,其作为2个64位值(V2[63:0]和V2[127:64])向复用器318b输出。每个时钟周期,寄存器文件310向乘法器320提供64位的2个输入操作数。每个时钟周期,乘法器320将64位结果各自写回寄存器文件310。
在一个实施方式中,第三复用器(未示出)可以提供第三源值。在这种情况下,第三复用器从第三值接收高值和低值,并且通过与复用器318a-b相同的方式基于高/低选择值316来选择高值或低值。
在第一周期,复用器318a-b接收高/低选择值316。该高/低选择值316确定复用器318a-b并因此寄存器文件310将寄存器文件的高或低值传递至乘法器320还是其他功能单元。在图3中,基于选择值316,低值(V1[63:0]和V2[63:0])或高值(V1[127:64]和V2[127:64])被复用器318a-b多路复用为V1_MUX[63:0]和V2_MUX[63:0]。
在SIMD架构中,乘法器可以对不同宽度的数据进行操作,其中操作数的总宽度为64位。这包括所有向量指令。例如,对SIMD乘法器320的输入可以被认为是以下各项中的任意一项:
8个8位输入;
4个16位输入;以及
2个32位输入;
然而,在使用SIMD架构的实施方式中,不允许1个64位输入。然而,其他架构可以允许这种实施方式。
为了实现由SIMD架构提供的不同水平的位宽粒度,SIMD乘法器320采用多个子乘法器。在一个实施方式中,SIMD乘法器320包括以下乘法器:
2个32位乘法器,各自接收2个32位输入并且产生64位输出;
2个16位乘法器,各自接收2个16位输入并且产生32位输出;以及
4个8位乘法器,各自接收4个8位输入并且产生16位输出。
针对将输入操作数认为是8个8位操作数的指令,2个32位乘法器和2个16位乘法器作为4个8位乘法器。针对将输入操作数认为是4个16位操作数的指令,2个32位乘法器作为2个16位乘法器。
指令格式可以看似如下:“SQDMLAL<Q><Vd>.<Ta>,<Vn>.<Tb>,<Vm>.<Tb>”。该指令是“长”指令,意味着其输出数据宽度是其输入数据宽度的两倍长。Vm和Vn是输入,而Vd是输出。Vm和Vn总共128位宽,但针对给定时钟周期只有64位用于任意SIMD乘法器指令。Q是确定应当接收输入的高64位还是低64位的选择器。数据路径是64位宽,并且所有SIMD乘法器指令应当具有相同延时而不考虑<Q>说明符。因此,128位中的适当64位需要在每个周期被发送至SIMD乘法器。这涉及寄存器文件310中的2:1MUX(例如,复用器318a-b),其被配置为使用<Q>作为选择值来在输入的低64位或高64位之间进行挑选。
以下是此指令的示例组合:
1.SQDMLAL V3.4S,V2.4H,V1.4H
2.SQDMLAL V3.2D,V2.2S,V1.2S
3.SQDMLAL2 V3.4S,V2.4H,V1.4H
4.SQDMLAL2 V3.2D,V2.2S,V1.2S
如用<Q>指定的,上述指令1和2对V2和V1的低64位进行操作。“4H”表示输入的64位将被认为是4个16位输入,而“4S”表示乘法操作产生4个32位输出。
如用<Q>指定的,上述指令3和4对V2和V1的高64位进行操作。在寄存器文件310中,<Q>选择器在V1[63:0]与V1[127:64]之间选择以形成v1_mux,其为64位宽。V1_mux是对乘法器320的输入操作数之一。类似地,在寄存器文件310中,<Q>选择器在V2[63:0]与V2[127:64]之间选择以形成v2_mux,其为64位宽。V2_mux是对乘法器320的另一输入操作数。
基于输入操作数的大小,对应的输出例如通过向乘法器320的复用器使用大小选择器来从32位乘法器、16位乘法器或8位乘法器中进行选择。
本领域普通技术人员可以理解乘法器320可以被布置有不同的子单元以实现输入宽度和输出宽度的不同粒度。此外,乘法器320可以是SIMD架构中使用的可以在2个时钟周期接收高64位输入和低64位输入以形成2个64位输出的任何功能单元。
本领域普通技术人员还可以理解这里描述的实施方式描述了向使用128位数据路径的架构应用64位单元和操作数的使用。然而,本公开的教导可以被应用于其他位宽。作为一个非限制备选示例,128位单元和操作数可以被应用于使用256位数据路径的架构。作为另一非限制备选示例,32位单元和操作数可以被应用于使用64位数据路径的架构。在又一示例中,64位寄存器可以被用于通过向复用器添加附加的64位寄存器和附加的输入来实现256位数据路径。然而,本领域普及技术人员可以想到利用本公开的教导来实现其他位宽组合。
图4是图示了由本公开采用的过程的示例实施方式的流程图400。首先,该过程接收对第一大小的操作数和第二大小的数据路径的操作的指令(402)。在一个实施方式中,操作数的大小(第一大小)是64位而数据路径的大小(第二大小)是128位。指令可以接收一个或多个操作数,取决于指令的类型。例如,乘法指令可以接收2个操作数以具有被乘数和乘数两者。然而,其他指令(诸如,求逆、变窄或变宽)仅使用一个操作数,这是因为在这些指令中不需要第二操作数。其他指令(诸如乘积累加)接收3个操作数。
该过程继而通过向相应复用器转发第二大小的高部分(例如,64位)和第二大小的低部分(例如,64位)来转发第一大小的操作数(404)。在具有2个操作数的指令的情况下,2个复用器接收每个操作数的高部分和低部分。在具有1个操作数的指令的情况下,1个复用器接收单个操作数的高部分和低部分。
该过程继而在第一时钟周期向功能单元转发低操作数以执行针对低位的指令(406)。然而,在某些特殊情况下,高操作数可以首先被转发至功能单元。相应复用器的选择位基于指令和时钟周期确定。该过程还发出来自发出单元的停止周期(408)。该停止周期在指令开始允许功能单元额外时钟周期来处理第二64位计算时发出。
该过程继而在第二时钟周期向功能单元转发高操作数以执行针对操作数高位的指令(410)。然而,如上文所述,如果功能单元首先接收高操作数,则在第二时钟周期功能单元反而接收低操作数。功能单元在其计算高操作数的部分结果时将低操作数的结果写入低目的地寄存器(412)。继而,在完成高操作数的部分结果之后,其将高结果写入高目的地寄存器(414)。基于处理器流水线中的延迟,功能单元可以对操作数进行操作随后在从存储器寄存器读取之后的时钟周期将低结果和高结果写回。该延迟可以在不同实施方式中变化。在一个示例中,该延迟是存储器最初读取之后的两个周期。
因此,在一个实施方式中,该过程利用64位寄存器和功能单元来实现128位数据路径。此外,在各抽象层次,诸如用户通过软件与硬件处理器交互,例如,用户通过提供数据路径位宽而不是寄存器位宽的数据进行交互。通过此方式,用户可以不知道寄存器的大小。
该过程的其他示例可以由更多或更少处理框描述。例如,在该过程的一个方便示例中,其中停止周期被发出的处理框408和其中指令被执行的处理框410可以被组合。在此示例中,发出停止周期和执行指令的动作在相同周期中发生。该过程的另一示例包括处理框410与412之间描述如上文参考图1论述的功能单元104的动作的处理框。
上述技术针对许多操作均有效,然而下面描述的某些操作数/指令例外。例如,变窄指令对2个128位操作数进行操作并且返回作为仅64位的结果。例如,ADDHN{2}指令可以接收2个128位操作数并且仅返回64位结果。指令的“非‘2’”版本向低寄存器阵列写入该结果;而指令的“2”版本向高寄存器阵列写入该结果。
在其他情况下,某些指令可以要求在第一时钟周期中读取一个或多个输入操作数的高64位。例如,乘法器可以首先读取其操作数的高64位。
某些“逐元”指令可以跨计算中的所有道应用单个元操作数。例如,指令SQDMLAL<Q><Vd>.<Ta>,<Vn>.<Tb>,<Vm>.<Ts>[<index>]是逐元乘法指令。索引位字段确定该元驻留在Vm(乘法器的操作数之一)中的位置。索引位字段确定从较低的一半还是从较高的一半夺取该元,而不是<Q>选择操作数之一(在此情况下为Vm)的较高的一半还是较低的一半。该元继而在乘法器内的所有道上被复制。
某些“变宽”和“长”指令可以仅读取某些操作数的低64位或高64位,并且仍然写入128位结果。在此情况下,只有1个周期需要用于读取1个64位寄存器。继而,低64位结果和高64位结果在随后的时钟周期中被写回对应的寄存器。发出单元发出停止周期以允许功能单元向寄存器写回这两个64位结果。在变宽指令中,第一操作数中的元是第二操作数和结果中元的大小的一半。指令被配置为仅读取‘2’flavor中第一、较小大小操作数的低部分和该较小大小操作数的高部分。
某些加载操作和存储操作要求仅读取输入操作数的高64位。例如,在大端模式中加载和读取数据还具有另一层的复杂性。考虑指令“STR<Qt>,[<Xn|SP>],#<simm>”。该指令将<Qt>的内容(其为128位宽)从寄存器文件(例如,图3的寄存器文件310)存储至外部存储器位置(未示出),如由<Xn>或<SP>限定。外部存储器中的数据可以以大端格式或小端格式存储。寄存器文件中的内容通常以小端格式存储。针对大端存储,<Qt>中的内容以64位边界翻转。因此,在从寄存器文件中读取时,低64位和高64位被交换。翻转的数据继而被存储至由<Xn>或<SP>限定的外部存储位置。
在某些情况下,一个输入操作数低64位和高64位均在第一周期读取。例如,某些“成对”或“交叉向量”指令要求相同时钟周期中单个操作数的两个一半。然而,在某些这种情况下,第二输入操作数的低64位和高64位两者可以在第二时钟周期读取。
在本公开中,指令解码必须快速指定操作数访问的特定序列,并且限定结果如何被写回寄存器文件。
当某些状态必须跨128位操作的两个周期被保留时,数据路径元中还存在实现方式。针对某些128位指令(如ZIP、TRN、EXT、UZP),来自存储器的数据在两个时钟周期接收;较低的一半在时钟周期1中接收,并且较高的一半在时钟周期2中接收。取决于指令,来自两个一半数据的元被选择。这要求在第二周期保留数据的较低的一半。同样,通常所有128位指令在2个周期执行。因为发出单元在周期1发出指令并且在周期2发出停止,所以指令本身需要在第二周期被保留。功能单元在第一周期解码该指令是否需要,如果需要,则在第二周期保留该指令。
上述系统和方法可以在数字电子电路、计算机硬件、固件和/或软件中实现。实现可以作为计算机程序产品。实现例如可以在机器可读存储设备中,用于由数据处理装置执行,或者用于控制数据处理装置的操作。实现例如可以是可编程处理器、计算机和/或多个计算机。
计算机程序可以利用任何形式的编程语言来编写,包括编译和/或解释语言,并且计算机程序可以部署在任何形式中,包括作为适合在计算环境中使用的独立程序或者作为子例程、元件和/或其他单元。计算机程序可以部署用于在一个计算机上执行,或者在一个站点处的多个计算机上执行。
方法步骤可以由一个或多个可编程处理器来执行,该一个或多个可编程处理器运行计算机程序,以通过操作输入数据和生成输出来执行本发明的功能。方法步骤还可以由一种装置来执行,并且该装置可以实现为专用逻辑电路。该电路例如可以是FPGA(现场可编程门阵列)和/或ASIC(专用集成电路)。子例程和软件代理可以指计算机程序、处理器、专用电路、软件和/或实现该功能性的硬件的部分。
适于计算机程序运行的处理器例如包括通用微处理器和专用微处理器二者,以及任何种类的数字计算机的任意一个或多个处理器。通常,处理器从只读存储器或者随机访问存储器或者二者接收指令和数据。计算机的基本元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机可以包括、可以可操作地耦合至用于存储数据的一个或多个海量存储设备(例如,磁盘、磁光盘或者光盘),以从其接收数据和/或向其传送数据。
数据传输和指令可以在通信网络上发生。适于具体化计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,例如包括示例半导体存储器设备。信息载体例如可以是EPROM、EEPROM、闪速存储器设备、磁盘、内置硬盘、可移动盘、磁光盘、CD-ROM和/或DVD-ROM盘。处理器和存储器可以由专用逻辑电路进行补充和/或并入在其中。
为了提供与用户的交互,上述技术可以在具有显示器设备的计算机上实现。显示器设备例如可以是阴极射线管(CRT)和/或液晶显示(LCD)监视器。与用户的交互例如可以是显示针对用户的信息,以及用户可通过其向计算机提供输入(例如,与用户接口元件的交互)的键盘和指点设备(例如,鼠标或者轨迹球)。其他种类的设备可以用于提供与用户的交互。其他设备例如可以是以任何形式的感知反馈(例如,视觉反馈、听觉反馈或者触觉反馈)向用户提供的反馈。来自用户的输入例如可以是以任何形式接收的(包括听觉、话音和/或触觉输入)。
上述技术可以在包括后端组件的分布式计算系统中实现。后端组件例如可以是数据服务器、中间件组件和/或应用服务器。上述技术可以在包括前端组件的分布式计算系统中实现。前端组件例如可以是具有图形用户接口的客户端计算机;用户可以通过其与示例实现进行交互的Web浏览器;以及/或者用于传输设备的其他图形用户接口。系统的组件可以通过任何形式或者数字数据通信的介质(例如,通信网络)互连。通信网络的示例包括局域网(LAN)、广域网(WAN)、因特网、有线网和/或无线网。
系统可以包括客户端和服务器。客户端和服务器通常是彼此相距遥远的,并且通常通过通信网络进行交互。客户端和服务器的关系通过运行在相应计算机上并且彼此具有客户端-服务器关系的计算机程序来实现。
基于分组的网络例如可以包括因特网、载波互联网协议(IP)网络(例如,局域网(LAN)、广域网(WAN)、校园区域网络(CAN)、城域网(MAN)、家庭区域网络(HAN))、专用IP网络、IP专用支线交换机(IPBX)、无线网络(例如,无线电接入网络(RAN)、802.11网络、802.16网络、通用分组无线电服务(GPRS)网络、HiperLAN)和/或其他基于分组的网络。基于电路的网络例如可以包括公共交换电话网(PSTN)、专用支线交换机(PBX)、无线网络(例如,RAN、蓝牙、码分多址(CDMA)网络、时分多址(TDMA)网络、全球移动通信系统(GSM)网络)和/或其他基于电路的网络。
传输设备例如可以包括计算机、具有浏览器设备的计算机、电话、IP电话、移动设备(例如,蜂窝电话、个人数字助理(PDA)设备、膝上型计算机、电子邮件设备)和/或其他通信设备。浏览器设备例如包括具有万维网浏览器(例如,从Microsoft公司可得的Internet从Mozilla公司可得的Firefox)的计算机(例如,台式计算机、膝上型计算机)。移动计算设备例如包括
包括、包含和/或每一种的复数形式是开放式的,并且包括所列举的部分,以及可以包括没有列举的其他部分。和/或是开放式的,并且包括一个或多个所列举的部分以及所列举的部分的组合。
本领域技术人员应当理解本发明可以以其他特定形式来实施而不脱离其精神或实质性特征。因此认为之前的实施方案在所有方面都是说明性的,而非本文中所述发明的限制。因此本发明的范围由所附权利要求来决定,而不是由之前的描述来决定,并且因此确定在权利要求等同性的含义和范围内的所有变化包括在本发明中。
Claims (25)
1.一种实现处理器架构的方法,所述方法包括:
供应所述处理器架构的处理器,所述处理器架构具有第一大小的操作数和第二大小的数据路径,所述第二大小与所述第一大小不同;以及
给出第一阵列寄存器和第二阵列寄存器,所述第一阵列和所述第二阵列的每个寄存器是所述第二大小,并且被包括在寄存器文件中,
响应于接收选择值,由被包括在寄存器文件中的至少一个复用器从所述第一阵列和所述第二阵列分别选择第一寄存器和第二寄存器中的一个,以在所述第二大小的所述数据路径上执行所述第一大小的操作。
2.根据权利要求1所述的方法,其中所述第一阵列的每个寄存器对应于所述第二阵列的特定寄存器,并且其中所述第一阵列的所述第一寄存器中存储的位和所述第二阵列的对应的所述第二寄存器中存储的位表示所述第一大小的所述操作数中的操作数。
3.根据权利要求2所述的方法,其中对应于所述第二阵列的所述第二寄存器的所述第一阵列的所述第一寄存器存储与所述第二阵列的所述第二寄存器中存储的多个位相比意义不同的多个位。
4.根据权利要求1所述的方法,其中选择所述第一寄存器和所述第二寄存器中的所述一个包括:响应于接收所述选择值的第一非空选择值来选择所述第一寄存器,以及响应于接收所述选择值的第二非空选择值来选择所述第二寄存器。
5.根据权利要求1所述的方法,其中选择所述第一寄存器和所述第二寄存器中的所述一个包括:响应于接收所述选择值的第一非空选择值来选择所述第一寄存器,以及在未接收所述选择值的第二非空选择值时不选择所述第二寄存器。
6.根据权利要求1所述的方法,进一步包括:
在功能单元对所述第一寄存器的数据执行所述操作中的第一操作以及对对应的所述第二寄存器的数据执行所述操作中的第二操作,其中所述第一操作和所述第二操作与相同指令有关。
7.根据权利要求6所述的方法,其中执行所述第一大小的所述操作包括在所述相同指令是成对指令和跨向量指令中的任意一个时,在读取所述第一寄存器中的所述操作数中的第二操作数的位的相同时钟周期中读取所述第二寄存器中的所述操作数中的第一操作数的位,并且所述方法进一步包括在所述相同指令是成对指令时,在跟随所述相同时钟周期的下一时钟周期中、在读取所述第一阵列的第四寄存器中的所述第二操作数的位时读取所述第二阵列的第三寄存器中的所述第一操作数的位。
8.根据权利要求6所述的方法,其中执行所述第一大小的所述操作包括当在第二时钟周期中读取所述第一阵列的多个寄存器的位之前,在第一时钟周期中读取所述第二阵列的多个寄存器的位。
9.根据权利要求1所述的方法,进一步包括:
在开始对所述第一寄存器的数据的所述操作中的操作之后:
发出停止周期;以及
在所述停止周期期间读取对应的所述第二寄存器的数据。
10.根据权利要求1所述的方法,进一步包括:
返回所述第一大小的结果,其中所述结果部分存储在第一目的地寄存器中并且部分存储在对应的第二目的地寄存器中,所述第一目的地寄存器和所述第二目的地寄存器分别在所述第一阵列和所述第二阵列中。
11.根据权利要求1所述的方法,进一步包括:
返回所述第一阵列或者所述第二阵列中的目的地寄存器中存储的所述第二大小的结果。
12.一种用于实现处理器架构的方法,所述系统包括:
第一大小的操作数和第二大小的数据路径,所述第二大小与所述第一大小不同;
寄存器文件,其中所述寄存器文件包括:
第一阵列寄存器,所述第一阵列的每个寄存器是所述第二大小;
第二阵列寄存器,所述第二阵列的每个寄存器是所述第二大小;以及
至少一个复用器,被配置为响应于选择值的接收,从所述第一阵列和所述第二阵列分别选择第一寄存器和第二寄存器中的一个,以在所述第二大小的所述数据路径上执行所述第一大小的操作。
13.根据权利要求12所述的系统,其中所述第一阵列的每个寄存器对应于所述第二阵列的特定寄存器,并且其中所述第一阵列的所述第一寄存器中存储的位和所述第二阵列的对应的所述第二寄存器中存储的位表示所述第一大小的所述操作数中的操作数。
14.根据权利要求13所述的系统,其中对应于所述第二阵列的所述第二寄存器的所述第一阵列的所述第一寄存器存储与所述第二阵列的所述第二寄存器中存储的多个位相比意义不同的多个位。
15.根据权利要求12所述的系统,其中所述至少一个复用器被配置为:响应于所述选择值的第一非空选择值的接收来选择所述第一寄存器,以及响应于所述选择值的第二非空选择值的接收来选择所述第二寄存器。
16.根据权利要求12所述的系统,其中所述至少一个复用器被配置为:响应于所述选择值的第一非空选择值的接收来选择所述第一寄存器,以及在没有所述选择值的第二非空选择值的接收时不选择所述第二寄存器。
17.根据权利要求12所述的系统,进一步包括:
功能单元,被配置为对所述第一寄存器的数据执行所述操作中的第一操作以及对对应的所述第二寄存器的数据执行所述操作中的第二操作,其中所述第一操作和所述第二操作与相同指令有关。
18.根据权利要求17所述的系统,其中所述功能单元进一步被配置为基于所述操作中的操作基于成对指令和跨向量指令中的至少一个时,在读取所述第一寄存器中的所述操作数中的第二操作数的位的相同时钟周期中读取所述第二寄存器中的所述操作数中的第一操作数的位,并且在所述相同指令是成对指令时,在跟随所述相同时钟周期的下一时钟周期中、在读取所述第一阵列的第四寄存器中的所述第二操作数的位时读取所述第二阵列的第三寄存器中的所述第一操作数的位。
19.根据权利要求17所述的系统,其中所述功能单元进一步被配置为当在第二时钟周期中读取所述第一阵列的多个寄存器的位之前,在第一时钟周期中读取所述第二阵列的多个寄存器的位。
20.根据权利要求12所述的系统,进一步包括:
发出单元,被配置为在开始对所述第一寄存器的数据的所述操作中的操作之后:
发出停止周期;以及
在所述停止周期期间读取对应的所述第二寄存器的数据。
21.根据权利要求12所述的系统,进一步包括:
输出模块,被配置为返回所述第一大小的结果,其中所述结果部分存储在第一目的地寄存器中并且部分存储在对应的第二目的地寄存器中,所述第一目的地寄存器和所述第二目的地寄存器分别在所述第一阵列和所述第二阵列中。
22.根据权利要求12所述的系统,进一步包括:
输出模块,被配置为返回所述第一阵列或者所述第二阵列中的目的地寄存器中存储的所述第二大小的结果。
23.一种其上嵌入有计算机可读程序代码的非瞬态计算机可读介质,包括用于实现处理器架构的指令,所述指令在由所述处理器执行时,使得所述处理器:
供应第一大小的操作数和第二大小的数据路径,所述第二大小与所述第一大小不同;以及
给出第一阵列寄存器和第二阵列寄存器,所述第一阵列和所述第二阵列的每个寄存器是所述第二大小,并且被包括在寄存器文件中,响应于选择值的接收,由被包括在所述寄存器文件中的至少一个复用器从所述第一阵列和所述第二阵列分别选择第一寄存器和第二寄存器中的一个,以在所述第二大小的所述数据路径上执行所述第一大小的操作。
24.根据权利要求23所述的非瞬态计算机可读介质,其中所述第一阵列的每个寄存器对应于所述第二阵列的特定寄存器,并且其中所述第一阵列的所述第一寄存器中存储的位和所述第二阵列的对应的所述第二寄存器中存储的位表示所述第一大小的所述操作数中的操作数。
25.根据权利要求24所述的非瞬态计算机可读介质,其中对应于所述第二阵列的所述第二寄存器的所述第一阵列的所述第一寄存器存储与所述第二阵列的所述第二寄存器中存储的多个位相比意义不同的多个位。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462079881P | 2014-11-14 | 2014-11-14 | |
US62/079,881 | 2014-11-14 | ||
CN201510778947.XA CN105608051B (zh) | 2014-11-14 | 2015-11-13 | 在64位数据路径上实现128位simd操作 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510778947.XA Division CN105608051B (zh) | 2014-11-14 | 2015-11-13 | 在64位数据路径上实现128位simd操作 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112328537A true CN112328537A (zh) | 2021-02-05 |
Family
ID=55961830
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510778947.XA Active CN105608051B (zh) | 2014-11-14 | 2015-11-13 | 在64位数据路径上实现128位simd操作 |
CN202011231249.5A Pending CN112328537A (zh) | 2014-11-14 | 2015-11-13 | 在64位数据路径上实现128位simd操作 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510778947.XA Active CN105608051B (zh) | 2014-11-14 | 2015-11-13 | 在64位数据路径上实现128位simd操作 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10810011B2 (zh) |
CN (2) | CN105608051B (zh) |
TW (1) | TWI681300B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9519460B1 (en) * | 2014-09-25 | 2016-12-13 | Cadence Design Systems, Inc. | Universal single instruction multiple data multiplier and wide accumulator unit |
GB2533292B (en) * | 2014-12-15 | 2016-11-02 | Ibm | Differential data access |
US10255072B2 (en) * | 2016-07-01 | 2019-04-09 | Intel Corporation | Architectural register replacement for instructions that use multiple architectural registers |
US10802826B2 (en) | 2017-09-29 | 2020-10-13 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US11256504B2 (en) | 2017-09-29 | 2022-02-22 | Intel Corporation | Apparatus and method for complex by complex conjugate multiplication |
US10514924B2 (en) * | 2017-09-29 | 2019-12-24 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
CN112506468B (zh) * | 2020-12-09 | 2023-04-28 | 上海交通大学 | 支持高吞吐多精度乘法运算的risc-v通用处理器 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5315178A (en) * | 1993-08-27 | 1994-05-24 | Hewlett-Packard Company | IC which can be used as a programmable logic cell array or as a register file |
US6233671B1 (en) * | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
CN101052947A (zh) * | 2004-11-03 | 2007-10-10 | 皇家飞利浦电子股份有限公司 | 支持simd指令的可编程数据处理电路 |
CN101203830A (zh) * | 2005-04-26 | 2008-06-18 | 高通股份有限公司 | 用于在交错的多线程环境中操作的数字信号处理器的寄存器堆 |
US20140297994A1 (en) * | 2013-03-30 | 2014-10-02 | Edward T. Grochowski | Processors, methods, and systems to implement partial register accesses with masked full register accesses |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6230253B1 (en) * | 1998-03-31 | 2001-05-08 | Intel Corporation | Executing partial-width packed data instructions |
US6192467B1 (en) * | 1998-03-31 | 2001-02-20 | Intel Corporation | Executing partial-width packed data instructions |
GB2382672B (en) * | 2001-10-31 | 2005-10-05 | Alphamosaic Ltd | Repeated instruction execution |
US7694114B2 (en) * | 2005-06-09 | 2010-04-06 | Qualcomm Incorporated | Software selectable adjustment of SIMD parallelism |
US8103858B2 (en) * | 2008-06-30 | 2012-01-24 | Intel Corporation | Efficient parallel floating point exception handling in a processor |
US8332447B2 (en) * | 2009-09-08 | 2012-12-11 | Kabushiki Kaisha Toshiba | Systems and methods for performing fixed-point fractional multiplication operations in a SIMD processor |
US9323529B2 (en) * | 2012-07-18 | 2016-04-26 | International Business Machines Corporation | Reducing register read ports for register pairs |
US9424045B2 (en) * | 2013-01-29 | 2016-08-23 | Arm Limited | Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit |
-
2015
- 2015-11-12 TW TW104137305A patent/TWI681300B/zh active
- 2015-11-13 CN CN201510778947.XA patent/CN105608051B/zh active Active
- 2015-11-13 US US14/940,585 patent/US10810011B2/en active Active
- 2015-11-13 CN CN202011231249.5A patent/CN112328537A/zh active Pending
-
2020
- 2020-10-16 US US17/072,378 patent/US11709674B2/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5315178A (en) * | 1993-08-27 | 1994-05-24 | Hewlett-Packard Company | IC which can be used as a programmable logic cell array or as a register file |
US6233671B1 (en) * | 1998-03-31 | 2001-05-15 | Intel Corporation | Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
CN101052947A (zh) * | 2004-11-03 | 2007-10-10 | 皇家飞利浦电子股份有限公司 | 支持simd指令的可编程数据处理电路 |
CN101203830A (zh) * | 2005-04-26 | 2008-06-18 | 高通股份有限公司 | 用于在交错的多线程环境中操作的数字信号处理器的寄存器堆 |
US20140297994A1 (en) * | 2013-03-30 | 2014-10-02 | Edward T. Grochowski | Processors, methods, and systems to implement partial register accesses with masked full register accesses |
Also Published As
Publication number | Publication date |
---|---|
US11709674B2 (en) | 2023-07-25 |
CN105608051B (zh) | 2020-11-20 |
US20210034363A1 (en) | 2021-02-04 |
CN105608051A (zh) | 2016-05-25 |
TW201633178A (zh) | 2016-09-16 |
US10810011B2 (en) | 2020-10-20 |
TWI681300B (zh) | 2020-01-01 |
US20160140079A1 (en) | 2016-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105608051B (zh) | 在64位数据路径上实现128位simd操作 | |
JP7256914B2 (ja) | ベクトル縮小プロセッサ | |
US20210165635A1 (en) | Transposing in a matrix-vector processor | |
US10042641B2 (en) | Method and apparatus for asynchronous processor with auxiliary asynchronous vector processor | |
US11281965B2 (en) | Reconfigurable processing unit | |
US11275992B2 (en) | Special purpose neural network training chip | |
US20170364476A1 (en) | Instruction and logic for performing a dot-product operation | |
RU2263947C2 (ru) | Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных | |
US10755242B2 (en) | Bitcoin mining hardware accelerator with optimized message digest and message scheduler datapath | |
KR20190117714A (ko) | 하드웨어에서 매트릭스 곱셈을 수행 | |
US11520582B2 (en) | Carry chain for SIMD operations | |
US20120079233A1 (en) | Vector logical reduction operation implemented on a semiconductor chip | |
WO2008016902A1 (en) | Method and system to combine multiple register units within a microprocessor | |
JP2018504667A (ja) | ベクトルパックドタプル相互比較機能を提供する方法、装置、命令、およびロジック | |
US11663011B2 (en) | System and method of VLIW instruction processing using reduced-width VLIW processor | |
US20120110037A1 (en) | Methods and Apparatus for a Read, Merge and Write Register File | |
US11544065B2 (en) | Bit width reconfiguration using a shadow-latch configured register file |
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: 40037888 Country of ref document: HK |