CN109661647B - 数据处理装置和方法 - Google Patents
数据处理装置和方法 Download PDFInfo
- Publication number
- CN109661647B CN109661647B CN201780054281.0A CN201780054281A CN109661647B CN 109661647 B CN109661647 B CN 109661647B CN 201780054281 A CN201780054281 A CN 201780054281A CN 109661647 B CN109661647 B CN 109661647B
- Authority
- CN
- China
- Prior art keywords
- vector
- value
- instruction
- scalar
- result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 183
- 238000000034 method Methods 0.000 title claims description 37
- 239000013598 vector Substances 0.000 claims abstract description 412
- 230000004044 response Effects 0.000 claims abstract description 30
- 230000008569 process Effects 0.000 claims description 19
- 238000003860 storage Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 3
- 238000009738 saturating Methods 0.000 claims description 2
- 230000001066 destructive effect Effects 0.000 description 12
- 230000000873 masking effect Effects 0.000 description 9
- 230000006399 behavior Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000009467 reduction Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 229920006395 saturated elastomer Polymers 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- XPYGGHVSFMUHLH-UUSULHAXSA-N falecalcitriol Chemical compound C1(/[C@@H]2CC[C@@H]([C@]2(CCC1)C)[C@@H](CCCC(O)(C(F)(F)F)C(F)(F)F)C)=C\C=C1\C[C@@H](O)C[C@H](O)C1=C XPYGGHVSFMUHLH-UUSULHAXSA-N 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003278 mimic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000135 prohibitive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012546 transfer Methods 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/8053—Vector processors
- G06F15/8076—Details on data register access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- 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
-
- 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/30098—Register arrangements
-
- 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
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/30141—Implementation provisions of register files, e.g. ports
Abstract
装置2包括处理电路系统4、许多向量寄存器14及许多标量寄存器12。提供了指令译码器6,该指令译码器支持译码指定至少一个向量寄存器14及至少一个标量寄存器12的向量乘加指令。响应于向量乘加指令,译码器6控制处理电路系统4执行向量乘加指令,其中各处理道产生相对应于乘积值与加数值的和或差的相应的结果数据元素,其中乘积值包括第一向量值的相应数据元素与乘数值的乘积。在各处理道中,乘数值及加数值中的至少一者被指定为储存在标量寄存器12中的标量值的一部分。
Description
技术领域
本技术关于数据处理的领域。
背景技术
某些数据处理系统支持向量指令的处理,对于该处理而言,来源操作数(operand)或指令的结果值是包括多个数据元素的向量。通过支持响应于单一指令而处理许多相异的数据元素,可改良代码密度且指令的提取及译码的负荷减少了。可通过将数据值加载进向量操作数的相应元素及使用单一向量指令一次数个元素地处理数据值来更高效地处理要处理的数据值数组。
发明内容
至少某些示例提供了一种装置,该装置包括:
处理电路系统,用于执行数据处理;
多个向量寄存器,用于储存包括多个数据元素的向量值;
多个标量寄存器,用于储存标量值;及
一指令译码器,用于译码指定多个寄存器的一向量乘加指令,以控制处理电路系统在储存在一第一向量寄存器中的一第一向量值上执行包括多个处理道(lane ofprocessing)的一向量乘加运算,以产生包括多个结果数据元素的一结果向量值,该多个寄存器包括至少一个向量寄存器及至少一个标量寄存器,该第一向量寄存器是由该向量乘加指令所指定的;
各处理道包括产生该结果向量值的一相应的结果数据元素,该结果向量值相对应于一乘积值与一加数值的一和或差,该乘积值相对应于该第一向量值的一相应数据元素与一乘数值的一乘积;
其中对于各处理道而言,该乘数值及该加数值中的至少一者包括储存在一标量寄存器中的一标量值的至少一部分,该标量寄存器是由该向量乘加指令所指定的。
至少某些示例提供了一种装置,该装置包括:
用于执行数据处理的模块;
多个储存模块,用于储存包括多个数据元素的向量值;
用于储存标量值的多个模块;及
译码模块,用于译码一向量乘加指令,以控制用于执行数据处理的该模块在储存在用于储存向量值的一第一模块中的一第一向量值上执行包括多个处理道的一向量乘加运算,以产生包括多个结果数据元素的一结果向量值,该向量乘加指令指定至少一个用于储存向量值的模块及至少一个用于储存标量值的模块,该第一模块是由该向量乘加指令所指定的;
各处理道包括产生该结果向量值的一相应的结果数据元素,该结果向量值相对应于一乘积值与一加数值的一和或差,该乘积值相对应于该第一向量值的一相应数据元素与一乘数值的一乘积;
其中对于各处理道而言,该乘数值及该加数值中的至少一者包括储存在用于储存标量值的一模块中的一标量值的至少一部分,用于储存标量值的该模块是由该向量乘加指令所指定的。
至少某些示例提供了一种数据处理方法,该方法包括以下步骤:
译码指定多个寄存器的一向量乘加指令,该多个寄存器包括至少一个向量寄存器及至少一个标量寄存器;及
响应于该向量乘加指令,控制处理电路系统在储存在一第一向量寄存器中的一第一向量值上执行包括多个处理道的一向量乘加运算,以产生包括多个结果数据元素的一结果向量值,该第一向量寄存器是由该向量乘加指令所指定的;
各处理道包括产生该结果向量值的一相应的结果数据元素,该结果向量值相对应于一乘积值与一加数值的一和或差,该乘积值相对应于该第一向量值的一相应数据元素与一乘数值的一乘积;
其中对于各处理道而言,该乘数值及该加数值中的至少一者包括储存在一标量寄存器中的一标量值的至少一部分,该标量寄存器是由该向量乘加指令所指定的。
至少某些示例提供了一种虚拟机计算机程序,该虚拟机计算机程序包括用于控制一主机数据处理装置提供相对应于如上文所讨论的装置的一指令执行环境的程序指令。
亦可提供一种储存虚拟机计算机程序的计算机可读取储存媒体。储存媒体可为非暂时性储存媒体。
附图说明
将通过以下的示例说明理解本技术的进一步的态样、特征及优点,要与随附的绘图结合阅读该示例说明,在该等绘图中:
图1示意性地绘示了具有处理电路系统的装置的示例,该处理电路系统支持处理包括二或更多个数据元素的向量值;
图2绘示了向量乘加指令(vector multiply-add instruction)的第一变体的示例,其中针对该向量乘加指令由标量寄存器指定用于乘加运算的加数值;
图3示出了向量乘加指令的第一变体的示例,其中针对该向量乘加指令由标量寄存器指定用于乘加运算的乘数值;
图4示出了第二变体的另一示例;
图5示出了向量乘加指令的非破坏性变体;
图6示出了基于谓述(predication)指示来遮蔽与结果向量的某些部分相关联的运算的示例;
图7示出了用于在到达向量化循环的末端时遮蔽向量处理道(lane of vectorprocessing)的基于循环的谓述的示例;
图8到10示出了重迭向量指令的执行的相应的节拍(beat)的示例;
图11示出了向量乘加指令的减法变体;
图12为一表格,绘示向量乘加指令的饱和变体的处理;
图13示出了如何可在标量寄存器较向量操作数的数据元素大小为宽时将储存在标量寄存器中的较小部分的标量值用于向量乘加运算;
图14示出了向量乘加指令的元素加宽变体的示例;
图15示出了截断道的结果以针对向量乘加指令的保留元素大小的变体产生相对应的结果数据元素的五个不同示例;
图16及17示出了浮点向量乘加运算的融合的及分裂的变体;
图18为一流程图,绘示了处理向量乘加指令的方法;及
图19绘示了可使用的虚拟机实施方式。
具体实施方式
数据处理装置可具有用于执行数据处理的处理电路系统、用于储存包括多个数据元素的向量值的许多向量寄存器及用于储存包括单一数据元素的标量值的许多标量寄存器。可提供指令译码器以译码要执行的程序指令,及控制处理电路系统执行由这些指令所表示的数据处理操作。指令译码器支持指定多个寄存器的向量乘加指令,该等寄存器包括至少一个向量寄存器及至少一个标量寄存器。响应于向量乘加指令,指令译码器控制处理电路系统执行向量乘加运算,该向量乘加运算包括在储存在第一向量寄存器中的第一向量值上执行的多个处理道,该第一向量寄存器是由向量乘加指令所指定的。处理电路系统基于向量乘加运算的成果来产生包括许多结果数据元素的结果向量值。各处理道包括产生相对应于乘积值与加数值的和或差的结果向量值的相应结果数据元素,其中乘积值相对应于第一向量值的相应数据元素与乘数值的乘积。对于各处理道而言,乘数值及加数值中的至少一者包括储存在标量寄存器中的标量值的至少一部分,该标量寄存器是由向量乘加指令所指定的。
向量处理(其中是响应于单一指令而执行单一向量寄存器内所表示的独立数据元素的多个处理道)一般已用在相对大的处理器中且是针对效能而不是低电力或电路面积而设计的。在这样的高效能处理器中,向量寄存器文件及向量数据路径一般在电路面积上是相对大的,用于标量处理的标量寄存器文件及标量数据路径亦是如此。因此,让向量算术指令直接存取标量寄存器文件及向量寄存器文件两者一般而言还是不实用的,因为这些区块的大的电路面积意味着,需要相对长的布线来从标量寄存器文件向向量处理电路系统传送数据值,且因此沿着这样的线路的讯号传播延迟会是太长的,而使得难以满足这样的处理器的时序需求及效能要求。因此,除了用于在标量及向量寄存器文件之间传输数据的几个专用的指令以外,向量算术指令一般会指定所有输入操作数作为储存在向量寄存器中的向量操作数。
然而,最近开始将向量处理技术用在具有较低的电力消耗及较小的电路面积的较小的处理器实施方式中,使得标量寄存器文件及向量算术数据路径在芯片上更靠近在一起。发明人已认识到,这使得让处理电路系统在处理向量算术指令时存取标量寄存器是更实用的。尽管如此,正常预期的是,为了支持不同处理操作的最大弹性,对于向量运算的输入中的各者应被指定为向量,以允许将不同的数值用于向量处理道中的各者中的操作数中的各者。在许多数据处理算法中相对通用的一个算术运算是乘加运算,其中两个操作数被乘在一起,且乘积及第三个操作数相加或相减以产生结果。因为乘加运算是三输入的运算,正常预期的是向量乘加指令指定三个向量寄存器来界定三个输入向量。
然而,一般而言很少有运算需要三个输入操作数,且因此若乘加指令将其所有输入指定为向量,则这会需要在向量寄存器文件中实施第三个向量寄存器读取端口,该端口不太可能用于其他的运算。并且,即使特定的处理装置确实具有两个以上的向量寄存器读取端口,若并非所有的读取端口皆被给定的指令使用,则这可允许使用备用的寄存器读取端口来平行执行另一指令。因此,通过将向量乘加运算的乘数值及加数值中的至少一者指定为标量值,这避免了将第三个向量寄存器读取端口用于向量乘加运算的需要,这可通过根本不实施第三个寄存器读取端口来节省电路面积及电力消耗,或通过允许另一指令使用备用的读取端口平行执行来允许改良的效能。
虽然可能预期的是,使用标量寄存器来指定乘数值及加数值中的一或两者会限制向量乘加指令的效用(因为道中的各者会被限定为针对乘数及/或加数使用相同的值),实际上存在着某些相对通用的使用案例,其中乘数及加数中的至少一者无论如何跨道中的各者将是相同的值。例如,某些数据处理算法中的通用运算可为针对多个x值的形式ax3+bx2+cx+d的多项式的估算,这可使用向量乘加指令来进行,其中不同的x值被分配到输入向量的不同元素且系数a、b、c、d对于各道而言是相同的。因此,提供具有至少一个标量输入的向量乘加指令的另一益处是,这消除了让额外的指令跨输入向量的元素中的各者复制相同的标量值的需要,若是向量乘加指令将该指令的操作数中的各者指定为向量则会需要该复制行为。因此,可减少代码大小或增加代码密度。
图1示意性地绘示了支持向量指令的处理的数据处理装置2的示例。将理解的是,为了容易解释起见这是简化图,且实际上该装置可具有为了简洁而未图示在图1中的许多构件。装置2包括用于响应于由指令译码器6所译码的指令而实现数据处理的处理电路系统4。从存储器系统8提取程序指令且由指令译码器译码该等指令以产生控制讯号,该等控制讯号控制处理电路系统4以使用由指令集架构所界定的方式来处理指令。例如,译码器6可解译经译码指令的运算码及指令的任何额外的控制字段,以产生使得处理电路系统4启动适当硬件单元以执行例如为算术运算、加载/储存操作或逻辑运算的操作的控制讯号。装置具有一组寄存器10,该等寄存器用于储存要由处理电路系统4处理的数据值及用于配置处理电路系统的操作的控制信息。响应于算数或逻辑指令,处理电路系统4从寄存器10读取操作数且将指令的结果写回寄存器10。响应于加载/储存指令,透过处理逻辑在寄存器10及存储器系统8之间传输数据值。存储器系统8可包括一或更多个等级的高速缓存以及主存储器。
寄存器10包括标量寄存器文件12,该标量寄存器文件包括用于储存标量值的许多标量寄存器,该等标量值包括单一数据元素。由指令译码器6及处理电路系统4所支持的某些指令为标量指令,该等标量指令处理从标量寄存器12读取的标量操作数以产生被写回标量寄存器的标量结果。
寄存器10亦包括向量寄存器文件14,该向量寄存器文件包括许多向量寄存器,各个向量寄存器用于储存包括多个数据元素的向量值。响应于向量指令,指令译码器6控制处理电路系统4以在从向量寄存器14中的一者读取的向量操作数的相应元素上执行许多向量处理道,以产生要写入到标量寄存器12的标量结果或要写入到向量寄存器14的进一步向量结果。某些向量指令可从一或更多个标量操作数产生向量结果,或可在标量寄存器文件中的标量操作数上执行额外的标量运算以及在从向量寄存器文件14读取的向量操作数上执行向量处理道。因此,某些指令可为混合式的标量向量指令,针对该等指令,指令的一或更多个来源寄存器及目的地寄存器中的至少一者是向量寄存器14,而一或更多个来源寄存器及目的地寄存器中的另一者是标量寄存器12。向量指令亦可包括向量加载/储存指令,该等指令使得数据值在向量寄存器14及存储器系统8中的位置之间传输。加载/储存指令可包括:邻接的向量加载/储存指令,对于该等指令而言,内存中的位置相对应于邻接的地址范围;或分散/聚排类型的向量加载/储存指令,该等指令指定许多离散的地址且控制处理电路系统4以从那些地址中的各者将数据加载进向量寄存器的相应元素,或从向量寄存器的相应元素将数据储存到离散的地址。
处理电路系统4可支持处理具有一定范围的不同数据元素大小的向量。例如,128位的向量寄存器14例如可被划分成十六个8位的数据元素、八个16位的数据元素、四个32位的数据元素或两个64位的数据元素。寄存器库10内的控制寄存器可指定所使用的目前数据元素大小,或替代性地这可为要执行的给定向量指令的参数。
寄存器库10亦包括了用于储存控制信息的寄存器,该控制信息用于控制处理电路系统4的操作。控制寄存器可包括例如为以下的寄存器:程序计数寄存器,用于指示相对应于目前执行点的指令的地址;堆栈指针寄存器,指示堆栈数据结构的存储器系统8中的位置的地址,该堆栈数据结构用于在处置异常(exception)时储存/恢复寄存器状态;及链接寄存器,用于储存函数回传地址,其中处理行为要在执行函数之后分路(branch)到该地址。为了简洁,这些并未绘示在图1中。
如图1中所示,寄存器亦包括:循环计数器16,用于追踪向量化循环的进度;元素大小寄存器18,用于储存指示在一循环内所处理的向量的数据元素中的位数量的参数;向量宽度寄存器20,用于储存指示一个向量寄存器中的总位数量的参数;及向量谓述寄存器22,用于控制向量运算的谓述。在某些示例中,向量宽度寄存器20可取决于用于给定设备的向量寄存器14中所实施的特定向量宽度而在装置的制造期间被固线化(hardwired)。或者,若向量寄存器文件14支持具有不同向量宽度的不同配置,则向量宽度寄存器20可为可编程的以指示所使用的目前宽度。类似地,元素大小寄存器18可在总是将特定的元素大小用于给定装置时被固线化,或可在装置支持在使用不同数据元素大小的向量的情况下进行处理时为可变的。虽然循环计数器16被图示为专用的控制寄存器,其他示例可使用一般用途标量寄存器12中的一者来追踪向量化循环的进度。
图2示意性地绘示了向量乘加指令的处理的示例。该指令指定第一及第二向量寄存器Q0、Q1及标量寄存器R0。此示例图标指令的破坏性变体,其中第一向量寄存器Q0亦充当指令的结果寄存器,使得乘加运算中所产生的结果数据元素被写入到寄存器Q0以覆写先前储存在相对应的寄存器部分中的值。这避免了用于指令编码中的单独的目的地寄存器指定符的编码空间的需要,这可是用的,因为指令编码空间通常是难得的。
图2示出了向量乘加指令的第一变体,针对该指令,标量寄存器R0指定要用在各处理道中的乘加运算中的加数值,而向量寄存器Q0、Q1指定要在各道中乘在一起的值。因此,各处理道依据Q0[i]*Q1[i]+R0产生相应的数据元素Q0'[i],其中0≤i≤3,因为在此示例中每个向量有四个数据元素。亦即,各处理道产生相对应于第一及第二向量Q0、Q1的相应数据元素的乘积与加数值R0的和的相应结果数据元素。加数值R0对于道中的各者而言是相同的。
此类型的指令可能是有用的计算示例示于下文。让我们想象,应用程序希望估算以下的多项式:ax3+bx2+cx+d(存在着该指令是有用的许多其他实例,但这实例将充当很好的示例)。在使用霍纳法的情况下,这可以计算上更高效的形式x(x(ax+b)+c)+d来表示。这通常同等于三个乘法累加运算。
应用程序希望使用一种向量实施方式来高效地估算此多项式以最小化处理时间。在传统的向量实施方式中,这样的向量实施方式会类似以下(假设每个向量4个元素):
通过将(1)及(2)结合成单一的向量乘加指令,这可显著地增加效能:VMULADD Qd,Q1,Q2,Q3。然而,造成的指令会接着需要三个向量读取端口(用于Q1、Q2及Q3)以及用于Qd的写入向量端口。这在小的核心上是个问题,因为可用的读取端口不足(由于面积及/或电力限制而受限),或因为它们从原本会能够平行执行的其他指令偷取了资源。
通过使用形式(I1)向量=向量*向量+标量或(I2)向量=向量*标量+向量的乘加指令,这些指令通过反而从标量寄存器文件进行读取而避免了向量寄存器文件的读取端口限制。在这些新的指令的帮助下,以上的示例算法可被简化为:
进一步的优化是可能的,例如将系数加载及初始复制行为放到循环外,若必要的寄存器是可用的话。亦可能的是,如下文图8到10中所解释地管线化若干数据向量的处理,这造成了高度高效的实施方式。以上示例示出了指令的一个使用案例,但所提出的指令本质上适用于许多其他使用案例。
图3示出了向量乘加指令的第二变体。再次地,该指令指定了两个向量寄存器Q0、Q1及标量寄存器R0,且第一向量寄存器Q0充当该指令的目的地寄存器。再次地,各处理道相对应于乘加运算,其中两个值相乘而形成乘积且该乘积接着与加数值相加。然而,在此变体中,标量寄存器指定了要在各道中与第一输入向量Q0的相应元素相乘的乘数值R0而加数是第二输入向量Q1的相对应数据元素。因此,对于第二变体而言,依据Q0[i]*R0+Q1[i]产生了给定的结果数据元素Q0'[i]。再次地,在此示例中,0≤i≤3。
图4示出了图3中所示的第二变体的替代版本,其中第二向量寄存器Q1充当目的地寄存器而不是Q0充当。因此,在图3中,是以结果覆写了被乘的向量操作数,而在图4中,是以结果覆写了充当加数的向量操作数。某些系统可仅支持图3及4中所示的版本中的一者,而其他系统可支持两个类型。
并且,图5示出了向量乘加指令的非破坏性变体的示例,该指令指定了充当用于该指令的目的地寄存器的额外向量寄存器Q2,该寄存器与界定输入操作数的两个向量寄存器Q0、Q1分离。在使用此变体的情况下,输入操作数不因为乘加运算而被覆写,且因此仍然可用于由后续的指令处理。某些系统除了如图2-4中所示的破坏性变体以外可支持如图5中所示的非破坏性变体,而其他实施方式可仅选择破坏性及非破坏性变体中的一者。虽然图5示出了被实施为非破坏性指令的指令的第二变体的示例(其中标量寄存器指定加数),其他示例可类似地实施第一变体的非破坏性版本(其中标量寄存器指定乘数)。
类似地,虽然下文所讨论的示例为了简洁起见是使用相对应于如图2中所示的向量乘加指令的第一变体的示例来描述(其中标量值指定用于各道的加数),将理解的是,这些示例中的各者亦可应用于图3或4中所示的第二变体(其中标量指定乘数值)。
并且,向量乘加指令的另一变体可使用相应的标量值来指定乘数值及加数值两者。对于这样的变体而言,指令会使用相对应的向量及标量寄存器来指定一个向量操作数及两个标量操作数。例如,指令可指定向量寄存器Q0及两个标量寄存器R0、R1,且可依据Q0'[i]=Q0[i]x R0+R1来产生各个结果数据元素。再次地,若Q1[i]=Q0[i]x R0+R1,则亦可提供指定两个向量寄存器Q0、Q1及两个标量寄存器R0、R1的非破坏性版本。
因此,在给定上文所讨论的不同变体的情况下,一般而言,向量乘加指令可指定至少一个向量寄存器及至少一个标量寄存器,且取决于变体,第三个操作数可为向量或标量。
处理电路系统4可平行地、依序地或部分平行部分依序地针对给定的向量指令执行处理道。例如,某些实施方式可具有充足的算术电路单元来平行执行所有处理道以在相同的循环中产生所有结果数据元素。其他的电路实施方式可能提供单一的算数单元组,该算数单元组处理一次处理单一的道,且在此情况下,可在单独的循环中依序处理各道。虽然在此情况下效能可能是较慢的,依序处理向量道相对于标量实施方式仍然提供了优点,因为其减少了处理给定算法所需的指令提取及指令译码操作的数量,而减少了电力消耗。其他实施方式可具有可平行处理高达某个位宽度的算数单元,该位宽度可能小于向量的总宽度。在此情况下,可平行执行二或更多个处理道的区块,但若向量大小大于硬件中所支持的位宽度,则可依序执行多次通过算术单元的处理,使得部分平行及部分依序地完成向量处理。
以上示例示出了在处理道中的各者中以结果数据元素更新结果寄存器Q0'的情况。然而,可基于谓述指示来遮蔽与结果向量的给定部分相关联的操作,该谓述指示识别是否应遮蔽给定的部分。存在实施这样的谓述行为的许多方式,其中的两个图示在图6及7中。
图6示出了向量谓述寄存器(VPR)22包括了许多谓述位的示例,取决于结果向量的相对应部分是否应让该相对应部分的操作被遮蔽,该等谓述位可被设定为0或1。例如,VPR22的各位可相对应于结果向量的一部分,该部分相对应于由装置2所支持的最小数据元素大小,且在与结果向量的给定部分相关联的位是0时,这可使得相对应的操作被遮蔽以防止向量运算的结果被写入到结果向量的该部分。可以不同的方式来实施遮蔽行为。在一个示例中,预定值(例如零)可被写入到结果向量要被遮蔽的部分。在另一示例中,结果向量的经遮蔽部分可保留它们先前的值,使得它们不因为向量指令而更新。另一选项是,根本防止执行经遮蔽的处理道的算术运算。某些实施方式可仅支持这些遮蔽选项中的一者。其他实施方式可支持一个选项以上,且程控器或编译程序可指定要将哪个特定的遮蔽选项用于给定的指令(例如可将指令指定为使用将零写入到经遮蔽部分的归零遮蔽法或将未经遮蔽的部分的结果与经遮蔽部分中的现存值合并而保留该等值的先前值的合并遮蔽法)。在图6中所示的示例中,道0及3中的VPR位是0,且道1及2中的VPR位是1,这指示的是,要遮蔽道0及3,而道1及2未被谓述且以与图2的相同方式处理以更新结果向量的相对应部分。虽然图6图示了应用于图2中所示的向量乘加指令的第一变体的示例,将理解的是,其亦可应用于第二变体或本文中所述的任何其他变体。
谓述可为有用的,因为通常而言给定的处理算法可能需要执行条件运算,其中可能仅在目标数据值符合某个条件时才需要计算(例如其是否大于临限值)。向量比较指令可将若干目标值与相关准则进行比较,且依据用于各道的准则是否被满足来设定VPR 22的位,且接着这可控制后续向量指令(例如图6中所示的向量乘加指令)的执行。
图6示出了VPR位被设定为使得在后续的向量乘加指令中遮蔽整个处理道的情况。然而,亦可能遮蔽结果向量相对应于一宽度的部分,该宽度小于用于向量指令的数据元素大小。例如,若设定VPR 22的比较指令相较于后续的乘加指令使用了较小的数据元素大小,则这可使得乘加指令的给定处理道有某些VPR位被设定为1且某些位被设定为0,这可使得只有结果数据元素用于该道的部分被写入到结果向量的相对应部分而其他部分被遮蔽。因此,可以较数据组件大小为精细的粒度来控制遮蔽行为。
图6示出了未在编码向量乘加指令时指定谓述寄存器22的示例。反而,谓述寄存器22为隐含地控制任何向量指令的遮蔽行为的默认寄存器。然而,另一方法是将向量乘加指令编码为明确参照指定要用于控制遮蔽行为的谓述指示的谓述寄存器。例如,可提供二或更多个谓述寄存器的库,且可将不同的谓述字节写入到谓述寄存器以供控制后续的向量指令的谓述,该等向量指令各参照要用于该指令的特定的谓述寄存器。使用明确谓述寄存器参照的方法可具有减少代码大小的某些优点,因为若可同时保留多个谓述字节,则可能较不需要重复更新谓述寄存器。另一方面来说,图6中所示的使用未由指令所参照的隐含的谓述寄存器的方法可具有通过提供较少的谓述寄存器来节省指令编码空间及减少电路面积及电力消耗的优点。任一方法皆可与本技术的向量乘加指令一同使用。
图7示出了谓述的第二示例。向量指令的一般用法是用在向量化循环中,其中需要将某个操作序列施用于内存中所储存的数组80的各元素a0、a1等等。在高等代码中每个元素迭代一次的循环被编译成包括具有较少迭代的循环的向量化代码,该等迭代中的各者将元素区块加载进向量寄存器、使用一系列的向量指令来处理元素及将各处理道的结果存回内存。因此,各个迭代可处理相对应于一个向量寄存器中的数据元素数量的元素区块。若要处理的数组中的元素总数是NE,且一个向量中的数据元素数量是NV(等于向量宽度VW除以数据元素大小ES),则可以最少NE/NV个迭代来处理整个数组。然而,元素总数NE通常可能不是一个向量中的元素数量NV的精确倍数,且因此在最后一个循环迭代中,不是所有的向量元素皆将填有要处理的真实值。若允许未经遮蔽地继续进行未填入的道的处理,则这可造成错误。例如,数组80的末端之外的内存地址空间可能还未被映像在分页表中,因此若加载/储存操作是针对处理数组尾部的最终迭代中的“未使用”的道中的一者而执行的,则可能有内存存取错误或损毁与数组相邻的数据。
因此,可能想要遮蔽最终循环迭代中的未使用的道中的操作。如图1中所示,处理电路系统4可被提供为具有用于控制给定向量化循环的哪些道被启用或遮蔽的循环谓述电路系统90。在向量化循环开始之后,循环计数器16被设定为指定要在循环中处理的元素总数NE的值。例如,循环开始指令可指定要处理的元素数量,且可响应于循环开始指令而设定循环计数器16。在各个循环迭代结束时,将一个向量中的元素数量NV从循环计数器16减去,以计算要处理的剩余元素的数量NE剩余。在给定的循环迭代开始之后,若NE剩余<NV,则循环谓述电路系统90控制处理电路系统4以例如通过抑制向量处理道本身(例如防止发出加载/储存请求)及/或停用将处理结果写入经遮蔽的道中的行为或如上文所讨论地将经遮蔽的道设定为零,来遮蔽与上部的NV-NE剩余个向量处理道相关联的操作。
因此,循环谓述电路系统90可为独立于向量乘加指令本身的编码而实施谓述的另一方式,因为该循环谓述电路系统可直接控制处理电路系统来遮蔽某些道而在指令编码时不需要任何明确的参照。图6及7中所示的方法可结合,且在某些情况下,由谓述电路系统90所提供的谓述指示可与从VPR 22或另一类型的谓述寄存器所提供的谓述指示AND在一起以控制向量处理的整体遮蔽行为,使得结果被写入到结果向量不被循环谓述电路系统90或谓述寄存器22遮蔽的那些部分。
虽然为了简洁起见未在其他示例中示出谓述,谓述可与本文中所示的任何示例一同使用。因此,将理解的是,虽然处理电路系统被配置为响应于向量乘加指令而执行多个处理道,取决于所施加的遮蔽,该处理电路系统不需要总是实现所有的道。
如图8到10中所示,向量指令(包括本文中所述的向量乘加指令)的处理可为交错的,使得处理一个向量指令的行为可在先前的向量指令已完成之前开始。具体而言,响应于给定的向量指令,处理电路系统4可执行多个处理节拍,各节拍相对应于向量的区段(其中该区段可小于、等于或大于用于该向量指令的特定数据元素大小),且处理电路系统可支持第一及第二向量指令的重迭执行,其中第二向量指令的第一节拍子集合与第一向量指令的第二节拍子集合平行执行。
此方法可为有用的,因为处理电路系统4可包括用于处理不同指令类别的许多相异的硬件区块。例如,与存储器系统8交互作用的加载/储存指令可由专用的加载/储存单元处理,而算术或逻辑指令可由算术逻辑单元(ALU)处理。ALU本身可被进一步划分成用于执行涉及乘法的运算的乘法累加单元(multiply-accumulate unit,MAC)及用于处理其他种类的ALU运算的进一步单元。亦可提供浮点单元以供处置浮点指令。不涉及任何向量处理的纯的标量指令亦可相较于向量指令而言由单独的硬件区块处置,或重复使用相同的硬件区块。
在例如为数字讯号处理(DSP)的某些应用中,可能存在大致相等数量的ALU及加载/储存指令,且因此例如为MAC的某些大区块可能被闲置大量的时间。此无效率可能在向量架构上恶化,因为执行资源与向量道的数量成比例以获得较高的效能。在较小的处理器上(例如单发(single issue)、成序(in-order)的核心),完全横向扩展(scaled out)的向量管线的面积负担成本可能是令人望而却步的。最小化面积影响同时更佳地使用可用的执行资源的一个方法是重迭指令的执行,如图8中所示。在此示例中,三个向量指令包括加载指令VLDR、乘法指令VMUL及移位指令VSHR,且所有这些指令可同时执行,即使在它们之间存在着数据相依性。这是因为VMUL的元素1仅取决于Q1的元素1,而非取决于整个Q1寄存器,因此VMUL的执行可在VLDR的执行已完成之前开始。通过允许指令重迭,可将像是乘数的昂贵区块保持有效更多的时间。
因此,可能想要允许微架构实施方式重迭向量指令的执行。然而,若架构假设存在着固定量的指令重迭,则虽然这可在微架构实施方式实际上匹配指令由架构所假设的重迭量时提供高效率,这可能在缩放到使用不同的重迭或根本不重迭的不同微架构时造成问题。
确实,架构可支持一定范围的不同重迭,如图9的示例中所示。向量指令的执行被分割成称为“节拍”的部分,其中各个节拍相对应于预定大小的向量的一部分的处理。节拍是向量指令被完全执行或根本不被执行的基元部分,且不能被部分执行。在一个节拍中所处理的向量部分的大小是由架构所界定的,且可为向量的任意分数。在图9的示例中,节拍被界定为相对应于向量宽度的四分之一的处理,使得每个向量宽度有四个节拍。明显地,这仅是一个示例,且其他架构可使用不同数量的节拍(例如两个或八个)。相对应于一个节拍的向量部分可为相同的大小,该大小大于或小于所处理的向量的数据元素大小。因此,即使组件大小从实施方式到实施方式有所不同或在不同指令之间的运行时间有所不同,节拍是向量处理的某个固定宽度。若在一个节拍中所处理的向量部分包括多个数据元素,则可在相应元素之间的边界处停用进位讯号以确保各个元素被独立处理。若在一个节拍中所处理的向量部分仅相对应于元素的一部分且硬件不足以并行计算若干节拍,则在一个处理节拍期间所产生的进位输出可被输入到之后的处理节拍作为进位输入,使得两个节拍的结果一起形成数据元素。
如图9中所示,处理电路系统4的不同的微架构实施方式可在抽象架构频率的一个“刻点(tick)”中执行不同数量的节拍。在此处,“刻点”相对应于架构状态前进的单位(例如在简单的架构上,各个刻点可相对应于更新与执行指令相关联的所有架构状态的实例,包括更新程序计数器以指向下个指令)。将由本领域中具技艺者所理解的是,例如为管线化的已知微架构技术可意味的是,单一刻点可能需要多个频率周期来在硬件层级下执行,且确实,硬件层级下的单一频率周期可处理多个指令的多个部分。然而,这样的微架构技术对于软件来说是不可见的,因为刻点在架构层级下是基元。为了简洁起见,在进一步描述此揭示案的期间忽略这样的微架构。
如图9的下方示例中所示,通过提供充足的硬件资源以供在一个刻点内平行处理所有节拍,某些实施方式可将向量指令的所有四个节拍排程在相同的刻点中。这可适用于较高效能的实施方式。在此情况下,在架构层级下在指令之间不需要任何重迭,因为可在一个刻点中完成整个指令。
另一方面来说,更有面积效益的实施方式可提供每个刻点仅可处理两个节拍的较窄的处理单元,如图9的中间示例中所示。
又更有能源/面积效益的实施方式可提供硬件单元,该等硬件单元是更窄的且仅可一次处理单一节拍,且在此情况下,每个刻点可处理一个节拍,其中指令执行被重迭且交错一个节拍,如图9的顶部示例中所示(这与上文图8中所示的示例相同)。
将理解的是,图9中所示的重迭仅为某些示例,且其他的实施方式亦是可能的。例如,处理电路系统4的某些实施方式可支持在相同的刻点中平行双发(dual issue)多个指令,使得有更大的指令处理量。在此情况下,在一个循环中一起开始的二或更多个向量指令可能有某些节拍与在下个循环中开始的二或更多个向量指令重迭。
除了从实施方式到实施方式变化重迭量以缩放到不同的执行点以外,向量指令之间的重迭量亦可在程序内的不同的向量指令执行实例之间在运行时间改变。因此,处理电路系统4可被提供为具有用于控制用于相对于先前的指令执行给定指令的时序的电路系统。这让微架构能够自由选择在较难以实施的某些边界情况(corner case)下或取决于指令的可用资源而不重迭指令。例如,若存在着需要相同资源的给定类型的背对背指令(backto back instruction),且所有可用的MAC或ALU资源已经被另一指令使用,则可能没有足够的自由资源来开始执行下个指令,且因此第二指令的发出可等待直到第一指令已完成为止,而不是进行重迭。
如图10中所示,若存在着中介的标量指令,则亦可防止两个向量指令之间的重迭。这是因为标量指令可能取决于向量指令的最后一个节拍的成果,而第二向量指令可能在该第二向量指令的所有节拍中皆取决于标量结果,所以避免将向量指令与标量指令重迭可能是较安全的。
以上的示例示出向量乘加指令的加法变体,其中加数与输入向量元素及乘数的乘积相加。然而,如图11中所示,亦可能提供向量乘加指令的减法变体,其中从乘积减去加数。图11图标图2中所示的第一指令形式的减法变体,但将理解的是,亦可针对图3或4中所示的第二指令形式提供减法变体。类似地,亦可提供与图5类似的减法变体的非破坏性版本。因此,对于减法变体而言,结果向量的结果数据元素相对应于乘积与加数之间的差(例如Q0'[i]=Q0[i]*Q1[i]–R0)。因此,本文中对于乘加运算的指称包括了乘减运算(multiply-subtract operation)。实际上,可使用通用的加法电路来计算加法及减法变体两者,因为可仅通过产生加数的二补码以在将加数与乘积相加之前负化加数来实施减法变体。
向量乘加运算可使用模数的或饱和的算术来计算各道的结果。在模算术中,在运算结果超过可使用结果值中可用的位数来表示的最大值时,结果“绕回”到可使用那些位来表示的范围的最低端,且结果实际上指示已会被表示的结果值的最低有效部分让更大的可用位数量是可用的(可在控制寄存器中设定溢出位以指示结果溢出)。亦即,结果值实际上同等于真实结果模除某个常数,该常数取决于结果值中的位数量。
相较之下,在使用饱和算术的情况下,在真实结果超过可在结果值中表示的最大可能值时,则结果被箝制在最大值处。类似地,若结果小于可在结果值中表示的最小值,则结果被箝制到最小值且不绕回。如图12中所示,在给定道的结果L[i]小于饱和的最小边界时,结果数据元素Q0'[i]被设定为等于该最小边界,在道的结果L[i]等于最小或最大边界或在最小及最大边界之间时,结果数据元素Q0'[i]就等于道的结果,且在更大的结果大于最大边界时,则结果数据元素Q0'[i]等于最大边界。若饱和已发生(亦即若道的结果L[i]小于最小值或大于最大值),则控制寄存器中的固着位(sticky bit)被设定为1。若结果并未饱和,则固着位保持其先前的值。因此,在处理指令序列时,一旦被设定为1的用于给定道的固着位将在序列的其余部分保持在1以指示饱和在序列期间发生在某个时点处。某些系统针对向量乘加指令可仅支持模数或饱和算术中的一者。在其他情况下,处理电路系统4可针对两个形式的算术支持向量乘加指令变体。
以上示例示出将向量乘加指令应用于各具有4个数据元素的向量的情况,但明显地,这不是必要的,且向量可包括任何数量的数据元素。如上所述,在某些系统中,给定的向量操作数位数可被分成不同的数据元素大小,例如128位的向量可被分成8位、16位、32位或64位的数据元素。因此,图13图示了替代示例,其中各向量包括8个数据元素。
对于某些数据元素大小而言,数据元素的大小可较标量寄存器12中的一者的宽度为窄。例如,如图13中所示,给定的向量乘加指令执行实例的各个数据元素可具有某个位数J,但标量寄存器R0可能具有J个位以上。在此情况下,只有标量寄存器中的标量值的一部分可在向量处理的各道中用作乘加处理的加数值或乘数值。例如,如图13中所示,标量寄存器的选出部分R0'可为最低有效的J个位,其中J是用于目前所执行的指令的目前数据元素大小。或者,其他示例可将要用于向量处理的标量值部分选作标量寄存器的最高有效的J个位。因此,将理解的是,在本文中所讨论的所有示例中,将标量寄存器中的整个标量值用于乘加处理并不是必要的,而是可能只将标量值具有相对应于数据元素大小的宽度的一部分用作乘数值或加数值。
并且,虽然上文所示的示例以与输入向量的数据元素相同的大小的数据元素产生结果值,这并不是必要的,且如图14中所示,可提供向量乘加指令的元素加宽变体,该变体从具有J位数据元素的一或更多个输入向量产生具有K位结果数据元素的结果向量值,其中K>J。在结果数据元素大于输入数据元素时,则并非所有输入数据元素皆可有助于造成结果。例如,如图14的情况中所示,各个结果数据元素Q0'[i]可能是基于输入向量的偶数道0、2、4、6的相对应数据元素来产生的,且奇数元素可被忽略。替代示例可例如使用奇数元素或使用向量的上端或下端处的相邻元素的区块,来从不同的位置选择元素。或者,可使用所有输入元素,使得输入元素的数量与结果元素的数量相同,在此情况下,结果向量的宽度会大于输入向量的宽度。实施K=2J的元素加宽指令使得各个结果数据元素的大小是输入数据元素的大小的两倍可能是特别有用的。这是因为,乘加处理的给定道中所执行的乘法将产生具有两倍的输入位数的结果,且因此通过使用向量乘加指令的元素加宽变体,此增加的准确度可被保留在结果中。
另一方面来说,对于向量乘加指令的保留元素大小的变体(其中结果向量值具有与输入向量的数据元素相同的大小(J位)的结果数据元素)而言,如何截断乘加运算的道的结果L[i]来产生J位的结果数据元素存在着不同的选项。一般而言,将两个J位的数据元素乘在一起且与第三个J位的数据元素相加可产生包括位[2J:0]的2J+1位的道结果L[i],其中位0指的是最低有效位而位2J指的是最高有效位。图15图示了如何截断道的结果L[i]来产生相对应的结果数据元素Q0'[i]的五个示例:
a)可选择道结果L[i]的最低有效的J个位(例如2J+1位的道结果的位[J-1:0])。
b)可选择道结果L[i]的最高有效的J个位(例如2J+1位的道结果的位[2J:J+1])。
c)可选择道结果L[i]的最高有效的J个位且基于道结果的至少一个最低有效位来进行数值简化(round)。例如,不包括在选出部分中的最高有效位可与选出部分相加以数值简化到J位的结果数据元素Q0'[i],或替代性地,可将一个以上的较低有效位用于数值简化以实施更复杂的数值简化模式。通过执行数值简化,可避免由截断所造成的结果的负偏差。
d)可忽略道结果L[i]的最高有效位[2J],且选择下J个最高有效位[2J-1:J]来形成结果。2J+1位的结果的顶部位一般将仅在所有三个J位的输入元素处于或接近该等输入元素的最大值时才为1,因此对于大部分的计算而言该顶部位通常将是0。因此,顶部位以外的下J个位可更常提供有用的信息,因此将这些位用于截断的结果可能是较佳的。
e)以与示例c)类似的方式,可基于至少一个较低有效位来数值简化道结果L[i]的位[2J-1:J]以产生结果。
某些实施方式可仅支持三个截断技术中的一者,而其他实施方式可支持一个技术以上且允许程控器/编译程序指定要将哪个技术用于给定的指令。
注意,虽然截断的结果相对应于在实际上产生完整的2J+1位的道结果且接着以图15中所示的方式截断该道结果时会产生的值,让硬件实际上产生完整的2J+1位的道结果并不是必要的。在某些情况下,让硬件从输入操作数直接产生截断的值可以是可能的(例如在部分a)的示例中,不需要在乘加运算期间产生道结果的上部位)。因此,硬件产生相对应于从2J+1位的道结果值截断的选出位的结果数据元素是足够的,但并不需要实际上如此产生结果数据元素。
某些实施方式可支持乘加指令的整数/定点(fixed-point)变体及浮点变体两者。或者,其他实施方式可仅支持向量乘加指令的整数/定点变体或浮点变体。对于向量乘加指令的整数或定点变体而言,指令译码器可控制处理电路系统以执行向量乘加运算来使用定点或整数算术(例如二补码二进制算术)产生各个结果数据。另一方面来说,对于浮动变体而言,可使用浮点算术。不像值的各个位具有某个固定有效度的整数或定点值,在使用浮点值的情况下,数据值的有效位是由尾数(significand)所表示的,且提供单独的指数来指示尾数的有效度。一般而言,可分别针对浮点算术及整数/定点算数提供处理电路系统4内的不同的处理单元,因为浮点单元可能需要额外的电路系统以供数值简化浮点值(以将处理结果数值简化到可使用所使用的特定浮点格式来表示的值)或供对准浮点操作数(以在将该等操作数进行加法或减法之前产生同等的有效度的值)。
若支持指令的浮点变体,则这可分别如图16及17中所示地实施为融合的乘加运算或分裂的乘加运算。在使用融合的乘加的情况下,执行乘法以产生未经数值简化的乘积值,且在不先将乘积数值简化的情况下将未经数值简化的乘积与加数值相加。因此,在使用图16的融合运算的情况下,仅有单一的数值简化步骤,该步骤在乘积及加数的加法或减法已执行之后执行。此方法具有某些优点,因为避免额外的数值简化步骤保持了未经数值简化的乘积的增加的准确度,且可提供更精确的结果,同时其亦允许与乘法本身平行地执行用于将加数值与未经数值简化的乘积对准的移位行为来改良效能(然而某些融合的乘加方法可选择将对准行为延迟到之后以允许在后来的运算级处输入加数值,这可改良不同指令之间的管线化)。
另一方面来说,在使用图17中所示的分裂的乘加方法的情况下,首先执行乘法,执行数值简化步骤以产生经数值简化的乘积,且接着在后续的加法及减法级中将经数值简化的乘积与经对准的加数相加,接着进行第二数值简化运算以数值简化由加法器所产生的和或差以产生最后结果。在某些情况下,分裂方法在硬件中可能较容易实施,因为其可更高效地与被提供为用于执行独立的乘法或加法指令的现存的乘及加电路系统迭加。
因此,针对向量乘加指令的浮动变体,某些系统设计可仅实施融合的乘加或仅实施分裂的乘加。其他系统可支持两个类型的运算,使得可能存在着浮点向量乘加指令的单独的融合的乘加及分裂的乘加的变体。
上文讨论了许多向量乘加指令的变体。一般而言,可以任何需要的组合来结合这些变体,例如分裂的乘加浮点变体,该分裂的乘加浮点变体将加数值指定为标量值且使用输入向量中的一者亦是目的地寄存器的破坏性形式。因此,虽然为了简洁起见还未描述这些指令的所有组合,依需要结合不同的变体是可能的。一般而言,不同的指令变体可以任何方式区隔,例如通过使用不同的指令运算码来区隔,或通过使用指令编码的另一位域以指定要由处理电路系统执行什么运算变体来区隔。亦可相对于指令编码单独地指定界定乘加指令的变体的某些参数,例如使用控制寄存器中的控制位来指定。
图18为一流程图,绘示处理向量指令的示例。在步骤103处,从存储器系统8提取要执行的下个指令。在步骤100处,指令译码器6判定要处理的经提取指令是否是指定至少一个标量寄存器及至少一个向量寄存器的向量乘加指令。若否,则以适用于所遭遇到的指令类型的方式处理指令。在遭遇到这样的向量乘加指令时,则该指令被译码,且指令译码器6在步骤102处产生控制讯号,以控制处理电路系统4执行包括许多向量处理道的向量乘加运算。各个未经谓述的道产生结果数据元素,该结果数据元素相对应于乘积值与加数值的和或差,其中乘积值是第一向量值的相应数据元素与乘数的乘积。加数及乘数值中的至少一者被指定为储存在由向量乘加指令所指定的标量寄存器中的标量值的一部分。
概括而言,通过提供使用标量寄存器来识别加数及乘数中的一或两者的向量乘加指令,这针对一定范围的通用算术运算提供了处理数据的高效的方式,该方式特别适合具有受限的向量寄存器读取端口的处理器核心,因为实体上仅提供了受限数量的该等端口,或因为在同时执行的指令之间共享了资源。该等指令亦帮助减少实施某些处理算法所需的指令数量,藉此减少了代码大小或增加了代码密度。减少要执行的指令数量亦可增加效能。
图19绘示了可使用的虚拟机实施方式。虽然先前所述的实施例在用于操作支持所涉及的技术的特定处理硬件的装置及方法的意义上实施本发明,亦可能提供硬设备的所谓的虚拟机实施方式。这些虚拟机实施方式运行在主机处理器150上,该主机处理器150运行支持虚拟机程序130的主机操作系统140。一般而言,需要大的强力处理器来提供在合理速度下执行的虚拟机实施方式,但这样的方法在某些环境中可能是被合理化的,例如在基于兼容性或重复使用的理由而有需要运行另一处理器的原生代码时。虚拟机程序130向访客程序120提供了虚拟硬件接口,该虚拟硬件接口与会由真实硬件所提供的硬件接口相同,该真实硬件是被虚拟机程序130模仿的设备。因此,可使用虚拟机程序130从访客程序120内执行程序指令(包括上述的内存存取的控制),以模仿该等程序指令与虚拟机硬件进行的交互作用。访客程序120可为裸金属程序(bare metal program),或替代性地其可为以与主机OS140如何运行虚拟机应用程序类似的方式运行应用程序的访客操作系统。亦将理解的是,存在着不同类型的虚拟机,且在某些类型中,虚拟机在不需要主机OS 140的情况下直接运行在主机硬件150上。
在本案中,用词“配置为……”用于意指的是,装置的构件具有能够实现所界定的操作的配置。在此背景下,“配置”意指硬件或软件互连的布置或方法。例如,装置可具有提供所界定操作的专用硬件,或处理器或其他处理装置可编程为执行该功能。“配置为”并不暗示的是,装置构件需要以任何方式改变以提供所界定的操作。
虽然已参照随附的绘图在本文中详细描述本发明的说明性实施例,要了解的是,本发明不限于那些准确的实施例,且本领域中具技艺者可在该等实施例中作出各种改变及更改而不脱离如由随附权利要求所界定的发明的范围及精神。
Claims (23)
1.一种数据处理的装置,包括:
处理电路系统,其用于执行数据处理;
多个向量寄存器,其用于储存包括多个数据元素的向量值;
多个标量寄存器,其用于储存标量值;以及
指令译码器,其用于译码指定多个寄存器的向量乘加指令,以控制处理电路系统在储存在第一向量寄存器中的第一向量值上执行包括多个处理道的向量乘加运算,以产生包括多个结果数据元素的结果向量值,所述多个寄存器包括至少一个向量寄存器和至少一个标量寄存器,所述第一向量寄存器是由所述向量乘加指令所指定的;
各处理道包括产生所述结果向量值的相应的结果数据元素,所述结果向量值相对应于乘积值与加数值的和或差,所述乘积值相对应于所述第一向量值的相应数据元素与乘数值的乘积;
其中,对于各处理道而言,所述乘数值和所述加数值中的至少一个包括储存在标量寄存器中的标量值的至少一部分,所述标量寄存器是由所述向量乘加指令所指定的,
其中,所述指令译码器被配置为译码指令,以控制所述处理电路系统处理由指令集架构定义的指令;
响应于标量指令,所述指令译码器被配置为控制所述处理电路系统从所述标量寄存器读取标量操作数,并处理所述标量操作数以产生被写回所述标量寄存器之一的标量结果。
2.根据权利要求1所述的装置,其中,对于各处理道而言,所述乘数值和所述加数值中的一个包括所述标量值的所述至少一部分,并且所述乘数值和所述加数值中的另一个包括储存在第二向量寄存器中的第二向量值的相应数据元素,所述第二向量寄存器是由所述向量乘加指令所指定的。
3.根据权利要求2所述的装置,其中,响应于所述向量乘加指令的第一变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中对于各处理道而言,所述加数值包括所述标量值的所述至少一部分,并且所述乘数值包括所述第二向量值的所述相应数据元素。
4.根据权利要求2和3中的任一项所述的装置,其中,响应于所述向量乘加指令的第二变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中对于各处理道而言,所述乘数值包括所述标量值的所述至少一部分,并且所述加数值包括所述第二向量值的所述相应数据元素。
5.根据权利要求1所述的装置,其中,所述处理电路系统被配置为响应于谓述指示而遮蔽与所述结果向量值的给定部分相关联的运算,所述谓述指示识别所述给定部分是要遮蔽的一部分。
6.根据权利要求5所述的装置,其中,用于所述结果数据元素的各部分的所述谓述指示被指定在谓述寄存器中,所述谓述寄存器是由所述向量乘加指令所指定的。
7.根据权利要求5所述的装置,其中,用于所述结果数据元素的各部分的所述谓述指示是独立于所述向量乘加指令的编码而由谓述电路系统所提供的或在谓述寄存器中所指定的。
8.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于给定的向量指令,所述处理电路系统被配置为执行多个处理节拍,各处理节拍相对应于向量值的区段;以及
所述处理电路系统被配置为支持第一向量指令和第二向量指令的重迭执行,其中,所述第二向量指令的第一节拍子集合与所述第一向量指令的第二节拍子集合平行执行。
9.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于所述向量乘加指令的加法变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中,各处理道包括产生相对应于所述加数值与所述乘积值的和的相应结果数据元素。
10.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于所述向量乘加指令的减法变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中,各处理道包括产生相对应于所述加数值与所述乘积值的差的相应结果数据元素。
11.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于所述向量乘加指令的饱和变体,所述指令译码器被配置为控制所述处理电路系统在相对应的处理道的结果是在预定范围之外时将所述结果向量值的给定的结果数据元素箝制到预定范围的最小值或最大值。
12.根据权利要求1-3、5-7中的任一项所述的装置,其中,所述第一向量值包括具有由所述处理电路系统所支持的多个数据元素大小中的一个的数据元素。
13.根据权利要求1-3、5-7中的任一项所述的装置,其中,在所述第一向量值的数据元素的数据元素大小小于所述标量寄存器的宽度时,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中所述乘数值和所述加数值中的所述至少一个相对应于具有相对应于所述数据元素大小的宽度的标量值的一部分。
14.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于所述向量乘加指令的整数或定点变体,所述指令译码器被配置为控制所述处理电路系统以使用整数或定点算术来产生所述结果向量值的所述相应结果数据元素。
15.根据权利要求14所述的装置,其中,响应于所述向量乘加指令的元素加宽变体,所述指令译码器被配置为控制所述处理电路系统在包括J位数据元素的所述第一向量值上执行所述向量乘加运算以产生包括K位结果数据元素的结果向量值,其中K>J。
16.根据权利要求14所述的装置,其中,响应于所述向量乘加指令的保留元素大小的变体,所述指令译码器被配置为控制所述处理电路系统在包括J位数据元素的所述第一向量值上执行所述向量乘加运算以产生包括J位结果数据元素的结果向量值。
17.根据权利要求16所述的装置,其中,响应于所述向量乘加指令的所述保留元素大小的变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中对于给定的处理道而言,所述相应的结果数据元素相对应于以下中的一个:
相对应于所述乘积值与所述加数值的所述和或所述差的值的最低有效的J个位;
相对应于所述和或所述差的所述值的最高有效的J个位;
相对应于所述和或所述差的所述值的最高有效的J个位,其基于所述值的至少一个较所述最高有效的J个位为低的有效位而被数值简化,所述值相对应于所述和或所述差;
相对应于所述乘积值与所述加数值的所述和或所述差的2J+1位的值的位[2J-1:J];及
所述2J+1位的值的位[2J-1:J],其基于所述2J+1位的值的位[J-1:0]中的至少一个而被数值简化。
18.根据权利要求1-3、5-7中的任一项所述的装置,其中,响应于所述向量乘加指令的浮点变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加指令以使用浮点算术来产生所述结果向量值的相应结果数据元素。
19.根据权利要求18所述的装置,其中,响应于所述向量乘加指令的分裂的浮点变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中,各处理道包括:产生所述第一向量值的所述相应数据元素与所述乘数值的经数值简化的乘积,以及根据经数值简化的乘积与所述加数值的和或差产生该结果向量值的相应结果数据元素。
20.根据权利要求18所述的装置,其中,响应于所述向量乘加指令的融合的浮点变体,所述指令译码器被配置为控制所述处理电路系统执行所述向量乘加运算,其中各处理道包括:产生所述第一向量值的所述相应数据元素与所述乘数值的未经数值简化的乘积,以及根据未经数值简化的乘积与所述加数值的和或差产生所述结果向量值的相应结果数据元素。
21.一种数据处理装置,包括:
用于执行数据处理的模块;
用于储存向量值的多个模块,所述向量值包括多个数据元素;
用于储存标量值的多个模块;以及
译码模块,用于译码向量乘加指令,以控制用于执行数据处理的模块在储存在用于储存向量值的第一模块中的第一向量值上执行包括多个处理道的向量乘加运算,以产生包括多个结果数据元素的结果向量值,向量乘加指令指定至少一个用于储存向量值的模块和至少一个用于储存标量值的模块,所述第一模块是由该向量乘加指令所指定的;
各处理道包括生成所述结果向量值的相应的结果数据元素,所述结果向量值相对应于乘积值与加数值的和或差,所述乘积值相对应于所述第一向量值的相应数据元素与乘数值的乘积;
其中对于各处理道而言,所述乘数值和所述加数值中的至少一个包括储存在用于储存标量值的模块中的标量值的至少一部分,所述用于储存标量值的模块是由所述向量乘加指令所指定的,
其中,译码模块被配置为译码指令,以控制用于执行数据处理的模块处理由指令集架构定义的指令;
响应于标量指令,译码模块被配置为控制用于执行数据处理的模块从用于储存标量值的模块读取标量操作数,并处理所述标量操作数以产生被写回用于储存标量值的模块之一的标量结果。
22.一种数据处理方法,包括以下步骤:
译码指定多个寄存器的向量乘加指令,所述多个寄存器包括至少一个向量寄存器和至少一个标量寄存器;以及
响应于所述向量乘加指令,控制处理电路系统在储存在第一向量寄存器中的第一向量值上执行包括多个处理道的向量乘加运算,以产生包括多个结果数据元素的结果向量值,所述第一向量寄存器是由所述向量乘加指令所指定的;
各处理道包括产生所述结果向量值的相应的结果数据元素,所述结果向量值相对应于乘积值与加数值的和或差,所述乘积值相对应于所述第一向量值的相应数据元素与乘数值的乘积;
其中对于各处理道而言,所述乘数值和所述加数值中的至少一个包括储存在标量寄存器中的标量值的至少一部分,所述标量寄存器是由所述向量乘加指令所指定的,
其中,所述方法还包括:
译码指令,以控制所述处理电路系统处理由指令集架构定义的指令;
响应于标量指令,控制所述处理电路系统从所述标量寄存器读取标量操作数,并处理所述标量操作数以产生被写回所述标量寄存器之一的标量结果。
23.一种计算机可读取储存媒体,储存用于控制主机数据处理装置提供相对应于根据权利要求1到20中的任一项所述的装置的指令执行环境的程序指令的虚拟机计算机程序。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1615526.9 | 2016-09-13 | ||
GB1615526.9A GB2553783B (en) | 2016-09-13 | 2016-09-13 | Vector multiply-add instruction |
PCT/GB2017/052386 WO2018051057A1 (en) | 2016-09-13 | 2017-08-14 | Vector multiply-add instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109661647A CN109661647A (zh) | 2019-04-19 |
CN109661647B true CN109661647B (zh) | 2023-03-03 |
Family
ID=57234431
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780054281.0A Active CN109661647B (zh) | 2016-09-13 | 2017-08-14 | 数据处理装置和方法 |
Country Status (9)
Country | Link |
---|---|
US (1) | US11188330B2 (zh) |
EP (1) | EP3513281B1 (zh) |
JP (1) | JP7203016B2 (zh) |
KR (1) | KR102413832B1 (zh) |
CN (1) | CN109661647B (zh) |
GB (1) | GB2553783B (zh) |
IL (1) | IL264683B (zh) |
TW (1) | TWI763698B (zh) |
WO (1) | WO2018051057A1 (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11789734B2 (en) * | 2018-08-30 | 2023-10-17 | Advanced Micro Devices, Inc. | Padded vectorization with compile time known masks |
US11327862B2 (en) * | 2019-05-20 | 2022-05-10 | Micron Technology, Inc. | Multi-lane solutions for addressing vector elements using vector index registers |
US11507374B2 (en) | 2019-05-20 | 2022-11-22 | Micron Technology, Inc. | True/false vector index registers and methods of populating thereof |
US11403256B2 (en) | 2019-05-20 | 2022-08-02 | Micron Technology, Inc. | Conditional operations in a vector processor having true and false vector index registers |
US11340904B2 (en) | 2019-05-20 | 2022-05-24 | Micron Technology, Inc. | Vector index registers |
CN112286578A (zh) * | 2019-07-25 | 2021-01-29 | 北京百度网讯科技有限公司 | 由计算设备执行的方法、装置、设备和计算机可读存储介质 |
CN110750232B (zh) * | 2019-10-17 | 2023-06-20 | 电子科技大学 | 一种基于sram的并行乘加装置 |
CN111027018B (zh) * | 2019-12-20 | 2023-03-31 | 支付宝(杭州)信息技术有限公司 | 加速计算设备建模的方法、装置、计算设备及介质 |
US11355175B2 (en) | 2020-04-09 | 2022-06-07 | Micron Technology, Inc. | Deep learning accelerator and random access memory with a camera interface |
US11887647B2 (en) * | 2020-04-09 | 2024-01-30 | Micron Technology, Inc. | Deep learning accelerator and random access memory with separate memory access connections |
US11874897B2 (en) | 2020-04-09 | 2024-01-16 | Micron Technology, Inc. | Integrated circuit device with deep learning accelerator and random access memory |
CN112181494B (zh) * | 2020-09-28 | 2022-07-19 | 中国人民解放军国防科技大学 | 一种浮点物理寄存器文件的实现方法 |
CN113220268B (zh) * | 2021-06-11 | 2022-08-02 | 上海交通大学 | 光电混合乘累加计算结构 |
CN114579083B (zh) * | 2022-05-09 | 2022-08-05 | 上海擎昆信息科技有限公司 | 一种基于矢量处理器的数据处理装置和方法 |
US20240103858A1 (en) * | 2022-09-22 | 2024-03-28 | Apple Inc. | Instruction Support for Matrix Multiplication |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5226171A (en) * | 1984-12-03 | 1993-07-06 | Cray Research, Inc. | Parallel vector processing system for individual and broadcast distribution of operands and control information |
JPH0962655A (ja) * | 1995-08-24 | 1997-03-07 | Hitachi Ltd | マルチプロセッサシステム |
EP1369789A2 (en) * | 2002-06-03 | 2003-12-10 | Matsushita Electric Industrial Co., Ltd. | Processor executing SIMD instructions |
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN102197369A (zh) * | 2008-10-08 | 2011-09-21 | Arm有限公司 | 用于执行simd乘法-累积运算的装置及方法 |
CN103440121A (zh) * | 2013-08-20 | 2013-12-11 | 中国人民解放军国防科学技术大学 | 一种面向向量处理器的三角矩阵乘法向量化方法 |
CN104461449A (zh) * | 2014-11-14 | 2015-03-25 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN105373367A (zh) * | 2015-10-29 | 2016-03-02 | 中国人民解放军国防科学技术大学 | 支持标向量协同工作的向量simd运算结构 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5081573A (en) | 1984-12-03 | 1992-01-14 | Floating Point Systems, Inc. | Parallel processing system |
US4974198A (en) | 1986-07-16 | 1990-11-27 | Nec Corporation | Vector processing system utilizing firm ware control to prevent delays during processing operations |
US5197130A (en) | 1989-12-29 | 1993-03-23 | Supercomputer Systems Limited Partnership | Cluster architecture for a highly parallel scalar/vector multiprocessor system |
JP2580371B2 (ja) | 1990-07-18 | 1997-02-12 | 株式会社日立製作所 | ベクトルデ―タ処理装置 |
JP3940542B2 (ja) | 2000-03-13 | 2007-07-04 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
US6857061B1 (en) * | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
GB2409063B (en) * | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
JP4079923B2 (ja) | 2004-07-26 | 2008-04-23 | エヌイーシーコンピュータテクノ株式会社 | ベクトル処理装置、情報処理装置、および、ベクトル処理方法 |
JP2006171827A (ja) | 2004-12-13 | 2006-06-29 | Seiko Epson Corp | 演算処理装置および演算処理プログラム |
JP5000248B2 (ja) | 2006-09-27 | 2012-08-15 | エヌイーシーコンピュータテクノ株式会社 | 情報処理装置、及び情報処理方法 |
US8631224B2 (en) | 2007-09-13 | 2014-01-14 | Freescale Semiconductor, Inc. | SIMD dot product operations with overlapped operands |
US7877582B2 (en) * | 2008-01-31 | 2011-01-25 | International Business Machines Corporation | Multi-addressable register file |
GB2474901B (en) | 2009-10-30 | 2015-01-07 | Advanced Risc Mach Ltd | Apparatus and method for performing multiply-accumulate operations |
US8667042B2 (en) * | 2010-09-24 | 2014-03-04 | Intel Corporation | Functional unit for vector integer multiply add instruction |
US9092213B2 (en) | 2010-09-24 | 2015-07-28 | Intel Corporation | Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation |
US9411585B2 (en) | 2011-09-16 | 2016-08-09 | International Business Machines Corporation | Multi-addressable register files and format conversions associated therewith |
WO2013095614A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Super multiply add (super madd) instruction |
CN106775592B (zh) * | 2011-12-23 | 2019-03-12 | 英特尔公司 | 处理器、用于计算系统的方法、机器可读介质和计算机系统 |
US9501276B2 (en) * | 2012-12-31 | 2016-11-22 | Intel Corporation | Instructions and logic to vectorize conditional loops |
US9275014B2 (en) * | 2013-03-13 | 2016-03-01 | Qualcomm Incorporated | Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods |
JP6381019B2 (ja) | 2014-03-31 | 2018-08-29 | Necプラットフォームズ株式会社 | 情報処理装置及び制御方法 |
CN105849690B (zh) | 2014-07-02 | 2019-03-15 | 上海兆芯集成电路有限公司 | 融合乘积-累加运算的处理器与方法 |
-
2016
- 2016-09-13 GB GB1615526.9A patent/GB2553783B/en active Active
-
2017
- 2017-08-14 US US16/324,239 patent/US11188330B2/en active Active
- 2017-08-14 CN CN201780054281.0A patent/CN109661647B/zh active Active
- 2017-08-14 EP EP17752473.3A patent/EP3513281B1/en active Active
- 2017-08-14 JP JP2019512719A patent/JP7203016B2/ja active Active
- 2017-08-14 KR KR1020197009798A patent/KR102413832B1/ko active IP Right Grant
- 2017-08-14 WO PCT/GB2017/052386 patent/WO2018051057A1/en unknown
- 2017-08-16 TW TW106127746A patent/TWI763698B/zh active
-
2019
- 2019-02-06 IL IL264683A patent/IL264683B/en unknown
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5226171A (en) * | 1984-12-03 | 1993-07-06 | Cray Research, Inc. | Parallel vector processing system for individual and broadcast distribution of operands and control information |
JPH0962655A (ja) * | 1995-08-24 | 1997-03-07 | Hitachi Ltd | マルチプロセッサシステム |
EP1369789A2 (en) * | 2002-06-03 | 2003-12-10 | Matsushita Electric Industrial Co., Ltd. | Processor executing SIMD instructions |
CN102197369A (zh) * | 2008-10-08 | 2011-09-21 | Arm有限公司 | 用于执行simd乘法-累积运算的装置及方法 |
CN101986264A (zh) * | 2010-11-25 | 2011-03-16 | 中国人民解放军国防科学技术大学 | 用于simd向量微处理器的多功能浮点乘加运算装置 |
CN103440121A (zh) * | 2013-08-20 | 2013-12-11 | 中国人民解放军国防科学技术大学 | 一种面向向量处理器的三角矩阵乘法向量化方法 |
CN104461449A (zh) * | 2014-11-14 | 2015-03-25 | 中国科学院数据与通信保护研究教育中心 | 基于向量指令的大整数乘法实现方法及装置 |
CN105373367A (zh) * | 2015-10-29 | 2016-03-02 | 中国人民解放军国防科学技术大学 | 支持标向量协同工作的向量simd运算结构 |
Non-Patent Citations (2)
Title |
---|
A low-power, high-speed implementation of a PowerPC/sup TM/ microprocessor vector extension;M.S. Schmookler等;《IEEE》;20020806;1-8 * |
使用融合乘加加速快速傅里叶变换计算的向量化方法;刘仲 等;《国防科技大学学报》;20150428;72-78 * |
Also Published As
Publication number | Publication date |
---|---|
KR20190045316A (ko) | 2019-05-02 |
WO2018051057A1 (en) | 2018-03-22 |
TWI763698B (zh) | 2022-05-11 |
EP3513281A1 (en) | 2019-07-24 |
EP3513281B1 (en) | 2022-11-23 |
KR102413832B1 (ko) | 2022-06-28 |
US20190196825A1 (en) | 2019-06-27 |
JP7203016B2 (ja) | 2023-01-12 |
TW201812571A (zh) | 2018-04-01 |
JP2019526866A (ja) | 2019-09-19 |
US11188330B2 (en) | 2021-11-30 |
GB201615526D0 (en) | 2016-10-26 |
IL264683B (en) | 2021-10-31 |
CN109661647A (zh) | 2019-04-19 |
GB2553783B (en) | 2020-11-04 |
GB2553783A (en) | 2018-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109661647B (zh) | 数据处理装置和方法 | |
EP3436928B1 (en) | Complex multiply instruction | |
KR100705507B1 (ko) | 확장가능한 프로세서 아키텍처에 진보된 명령어들을부가하는 방법 및 장치 | |
GB2474901A (en) | Multiply-accumulate instruction which adds or subtracts based on a predicate value | |
CN111381939A (zh) | 多线程处理器中的寄存器文件 | |
US10303399B2 (en) | Data processing apparatus and method for controlling vector memory accesses | |
CN111381880A (zh) | 加载-存储指令 | |
US11106465B2 (en) | Vector add-with-carry instruction | |
US11714641B2 (en) | Vector generating instruction for generating a vector comprising a sequence of elements that wraps as required | |
JP2000029696A (ja) | プロセッサおよびパイプライン処理制御方法 | |
Shipman | A Proposed Approach to Hybrid Software-Hardware Application Design for Enhanced Application Performance | |
JP2001501329A (ja) | データ処理装置レジスタ |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |