复数乘法指令的制作方法

文档序号:16049855发布日期:2018-11-24 11:11阅读:271来源:国知局

本发明技术系关于数据处理的技术领域。

背景技术

一些数据处理应用涉及处理具有实部及虚部的复数,即,形式a+ib的数,其中i表示-1的平方根(有时-1的平方根还可表示为“j”,但本文中将使用“i”)。复数算术可尤其有用于数字信号处理(digitalsignalprocessing;dsp)应用,例如用于计算快速傅里叶变换(fastfouriertransforms;fft)。一些dsp算法可需要形式r=(a+ib)*(c+id)的多次乘法,所以处理器处理复数乘法的方式可为影响效能的因素。



技术实现要素:

至少一些示例提供一种数据处理装置,其包含:

处理电路系统,用以执行数据处理;以及

指令解码器,用以解码控制处理电路系统来执行数据处理的指令;

其中,指令解码器被配置为解码复数乘法指令以控制处理电路系统以在第一操作数向量和第二操作数向量上执行部分复数乘法运算以将目的地向量的至少一个目标元素设置为取决于增加或减去第一乘积和第二乘积的结果的值,该第一操作数向量和第二操作数向量和该目的地向量每一者包含多个数据元素,该多个数据元素包括表示复数的实部的至少一个实元素和表示复数的虚部的至少一个虚元素;

响应于复数乘法指令的第一形式,该指令解码器被配置为控制该处理电路系统以使用包含该第一操作数向量的实元素与该第二操作数向量的对应实元素的乘积的第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的对应虚元素的乘积的第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的第二形式,该指令解码器被配置为控制该处理电路系统以使用包含该第一操作数向量的实元素与该第二操作数向量的虚元素的乘积的该第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的实元素的乘积的该第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的第一形式和第二形式中的一者,该指令解码器被配置为控制该处理电路系统以使用包含该目的地向量的至少一个实元素的该至少一个目标元素执行该部分复数乘法运算;

响应于该复数乘法指令的第一形式和第二形式中的另一者,该指令解码器被配置为控制该处理电路系统以使用包含该目的地向量的至少一个虚元素的该至少一个目标元素执行该部分复数乘法运算;以及

响应于该复数乘法指令的第一形式和第二形式中的至少一者,该指令解码器被配置为控制该处理电路系统以抑制该目的地向量的至少一个元素而非该至少一个目标元素的更新。

至少一些示例提供一种数据处理装置,包含:

用于执行数据处理的器件;以及

用于解码指令的器件,以控制该用于执行数据处理的器件以执行该数据处理;

其中,该用于解码的器件被配置为解码复数乘法指令以控制该用于执行数据处理的器件以在第一操作数向量和第二操作数向量上执行部分复数乘法运算,以将目的地向量的至少一个目标元素设置为取决于增加或减去第一乘积和第二乘积的结果的值,该第一操作数向量和第二操作数向量和该目的地向量每一者包含多个数据元素,该多个数据元素包括表示复数的实部的至少一个实元素和表示复数的虚部的至少一个虚元素;

响应于该复数乘法指令的第一形式,该用于解码的器件被配置为控制该用于执行数据处理的器件以使用包含该第一操作数向量的实元素与该第二操作数向量的对应实元素的乘积的该第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的对应虚元素的乘积的该第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的第二形式,该用于解码的器件被配置为控制该用于执行数据处理的器件以使用包含该第一操作数向量的实元素与该第二操作数向量的虚元素的乘积的第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的实元素的乘积的第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的该第一形式和第二形式中的一者,该用于解码的器件被配置为控制该用于执行数据处理的器件以使用包含目的地向量的至少一个实元素的该至少一个目标元素执行该部分复数乘法运算;

响应于该复数乘法指令的第一形式和第二形式中的另一者,该用于解码的器件被配置为控制该用于执行数据处理的器件以使用包含目的地向量的至少一个虚元素的至少一个目标元素执行该部分复数乘法运算;以及

响应于该复数乘法指令的第一形式和第二形式中的至少一者,该用于解码的器件被配置为控制该用于执行数据处理的器件以抑制该目的地向量的至少一个元素而非该至少一个目标元素的更新。

至少一些示例提供一种数据处理方法,其包含以下步骤:

解码复数乘法指令以控制处理电路系统以在第一操作数向量和第二操作数向量上执行部分复数乘法运算以将目的地向量的至少一个目标元素设置为取决于增加或减去第一乘积和第二乘积的结果的值,该第一操作数向量和第二操作数向量和该目的地向量每一者包含多个数据元素,该多个数据元素包括表示复数的实部的至少一个实元素和表示复数的虚部的至少一个虚元素;

其中,响应于该复数乘法指令的第一形式,使用包含该第一操作数向量的实元素与该第二操作数向量的对应实元素的乘积的第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的对应虚元素的乘积的第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的第二形式,使用包含该第一操作数向量的实元素与该第二操作数向量的虚元素的乘积的第一乘积,及包含该第一操作数向量的虚元素与该第二操作数向量的实元素的乘积的第二乘积,执行该部分复数乘法运算;

响应于该复数乘法指令的第一形式和第二形式中的一者,使用包含该目的地向量的至少一个实元素的该至少一个目标元素执行该部分复数乘法运算;

响应于该复数乘法指令的第一形式和第二形式中的另一者,使用包含该目的地向量的至少一个虚元素的该至少一个目标元素执行该部分复数乘法运算;以及

响应于该复数乘法指令的第一形式和第二形式中的至少一者,抑制该目的地向量的至少一个元素而非该至少一个目标元素的更新。

至少一些示例提供包含程序指令的虚拟机计算机程序,这些程序指令控制主数据处理装置以提供对应于上述论述的装置的指令执行环境。

还可提供存储虚拟机计算机程序的计算机可读存储介质。存储介质可为非暂态存储介质。

附图说明

本技术的更多方面、特征和优势将从将结合附图阅读的示例的以下描述中显而易见,其中:

图1示意性地阐明了支持执行向量指令的数据处理装置的示例;

图2为示出用于使用向量指令使两个复数相乘的替换方法的对比示例;

图3示出了使用第一形式复数乘法指令和第二形式复数乘法指令使两个复数相乘的示例;

图4示出了使用第一形式指令和第二形式指令计算复共轭乘法的示例;

图5示意性地示出了第一形式复数乘法指令和第二形式复数乘法指令的第二版本;

图6阐明了分配表示复数的实部或虚部的向量的实元素和虚元素的不同示例;

图7和图8示出了执行截断以产生目的地向量的目标元素的不同方式;

图9示出了复数乘法指令的元素加宽变体;

图10和图11示出了响应于指令的元素加宽变体执行截断的两个替换方式;

图12示意性地阐明了通过在向量指令之前加上向量述语指令来控制向量指令的预测的示例;

图13示意性地阐明了在处理向量化循环期间控制预测的示例;

图14至图16示出了重迭向量指令的各个执行差拍的示例;

图17为阐明了处理复数乘法指令的方法的流程图;以及

图18阐明了可使用的虚拟机实施方式。

具体实施方式

一些特殊的示例将如下所述。将理解,本技术不限于这些确切的示例。

数据处理装置具有指令解码器,该指令解码器支持解码复数乘法指令以控制处理电路系统以在第一操作数向量和第二操作数向量上执行部分复数乘法运算以将目的地向量的至少一个目标元素设置为取决于增加或减去第一乘积和第二乘积的结果的值。第一操作数向量和第二操作数向量和目的地向量每一者包含多个数据元素,该多个数据元素包括表示复数的实部的至少一个实元素和表示复数的虚部的至少一个虚元素。

提供了两种形式的复数乘法指令。两种形式将目的地向量的至少一个目标元素设置为取决于增加或减去第一乘积和第二乘积的结果的值。对于第一形式复数乘法指令,指令解码器控制处理电路系统以使用包含第一操作数向量的实元素与该第二操作数向量的对应实元素的乘积的第一乘积,及包含第一操作数向量的虚元素与该第二操作数向量的对应虚元素的乘积的第二乘积执行该部分的复数乘法运算。对于第二形式复数乘法指令,第一乘积包含第一操作数向量的实元素与第二操作数向量的虚元素的乘积,及第二乘积包含第一操作数向量的虚元素与第二操作数向量的实元素的乘积。第一形式和第二形式的复数乘法指令中的一者具有包含目的地向量的至少一个实元素的目标元素,而另一个指向目的地向量的至少一个虚元素。第一形式和第二形式的复数乘法指令的至少一个抑制目的地向量的至少一个元素而非至少一个目标元素的更新。

此方法具有一些优势。首先,与仅支持常规向量乘法指令的系统相比,提供专用复数乘法指令,其中复数的实部和虚部通过向量的各个元素表示,可提升效能并减小寄存器压力,因为此允许使用较少指令计算形式(a+ib)(c+id)的乘法,并且在将它们累加进最终结果之前,无需分配暂时地存储乘法的个别项(例如,ac、ibc、iad、-bd)的许多向量寄存器。此减小的寄存器压力可为相对低功率实施方式中的重要因素,因为此举减少了溢出及填充存储器的需要,从而明显地改进效能。此外,提供第一形式和第二形式的复数乘法指令(其中的一个指向目的地的实元素而另一个指向虚元素)使得使用仅两个指令和两个向量寄存器读取端口便能够计算完整复数乘法结果。免去实施第三个寄存器读取端口的需要可在相对低功率实施方式中提供明显电路面积和功率节省。

为了简写,用于第一形式/第二形式指令的各个第一乘积和第二乘积将在下文称为:

·r*r-第一形式指令的第一乘积,对应于第一操作数向量的实元素与第二操作数向量的实元素的乘积。

·i*i-第一形式指令的第二乘积,对应于第一操作数向量的虚元素与第二操作数向量的虚元素的乘积。

·r*i-第二形式指令的第一乘积,对应于第一操作数向量的实元素与第二操作数向量的虚元素的乘积。

·i*r-第二形式指令的第二乘积,对应于第一操作数向量的虚元素与第二操作数向量的实元素的乘积。

第一形式复数乘法指令与第二形式复数乘法指令可以任何方式区分,例如通过使用不同作业码,或通过在指令编码中提供另一参数以指定指令是否具有第一形式或第二形式。

向量分成实元素和虚元素的特定方式为可为给定处理器实施方式任意选择的实施方式选择。应注意,存储在向量的实元素或虚元素中的数值本身不需要识别这些元素是为复数的实元素还是虚元素。向量元素可简单地存储表示多个1(用于实元素)或多个i(用于虚元素)的数值。然而,处理电路系统的硬件可包含电路互连以自向量内的适宜位置读取实元素/虚元素并根据上述论述的各乘积组合实元素/虚元素,且根据指令是具有第一形式还是第二形式填充目的地的实元素或虚元素。因此,元素是否为实元素/虚元素可根据在计算乘积的处理电路系统中提供的硬件互连而非存储在向量本身中的值来反映。当使用复数乘法指令写入或编辑程序时,可由程序员或编译员使用表示复数的实部和虚部的适宜值填充输入操作数的实元素和虚元素,并适当地解释目的地向量中的结果。因此,术语“实”和“虚”可认为是第一子集合元素和第二子集合元素的简单卷标。

处理电路系统可支持一个向量内的不同数据元素大小。例如,128位向量可分成两个64位数据元素、四个32位数据元素、八个16位数据元素或十六个8位数据元素。处理电路系统可基于与复数乘法指令关联的参数确定数据元素的数目,其可在指令编码中经指定为立即值或指示含有参数的寄存器的值。参数可指示数据元素的数目、或数据元素的宽度(每元素的位计数)、或允许待确定的数据元素的数目的任意其他值。

因此,在复数乘法指令在仅包含两个元素的向量上运算的情况下,向量可仅具有一个实元素和一个虚元素。在其他执行情况下,向量可具有多余两个数据元素,及在此情况下存在在向量中排列实元素/虚元素的不同方式。这对于在向量内交错的实元素/虚元素尤其有用。例如,实元素可为偶数编号元素且虚元素可为奇数编号元素,或反之亦然。通过交错实元素和虚元素,可使硬件设计更有效,因为用于形成通过第一形式和第二形式的复数乘法指令增加或减去的各个乘积的乘法可限制于处于相同向量路径内或仅跨入紧邻向量路径中,而非需要跨两个或两个以上向量路径的更长跨路径信号路径。

当输入向量中存在两个或两个以上实元素和两个或两个以上虚元素时,复数乘法指令可触发处理电路系统以设置目的地向量的两个或两个以上目标元素,其中每个目标元素对应于第一乘积/第二乘积之和/差,该第一乘积/第二乘积使用第一操作数向量的各个实元素/虚元素对和第二操作数向量的各个实元素/虚元素对来计算。例如,在交错实元素/虚元素的情况下,两个相邻元素(一个实元素和一个虚元素)的每个路径可基于处理第一操作数向量/第二操作数向量中的对应路径中的实元素和虚元素的结果来设定目标元素(实元素或者虚元素)。

如上所述,第一形式和第二形式的复数乘法指令中的一者指向目的地向量的实元素而另一个指向虚元素,其中第一形式计算r*r和i*i的总和及差而第二形式计算r*i和i*r的总和及差。完全复数乘法将通常需要计算r*r、i*i、r*i和i*r的每一者的一个,所以通过执行指定相同源寄存器和指向相同目的地寄存器,包括每一种形式的一个指令的一对指令,可执行完全复数乘法运算以产生包含实部和虚部两者的复数结果。执行两种形式的复数乘法指令的顺序并不特别重要,因为不管怎样皆要计算复数的两个部分。然而,第二个执行的第一形式和第二形式的复数乘法指令中的一者可抑制目的地向量的至少一个元素而非其设定的目标元素的更新,以避免改写上述复数乘法指令的结果。因此,第一形式和第二形式的复数乘法指令的至少一个可触发处理电路系统以抑制目的地向量的至少一个非目标元素而非目标元素的更新。若仅第一形式和第二形式的指令中的一者导致此种抑制更新,则此可迫使程序员或编译员确保在用于计算相同复数乘积的不同部分的第一形式/第二形式的复数乘法指令对内,抑制更新非目标元素的形式第二个执行。然而,若第一形式和第二形式的复数乘法指令两者触发处理电路系统以抑制非目标元素的更新,以便程序员/编译员自由地以任意顺序编码第一形式/第二形式的指令,如此则可提供更大灵活性。

一些示例可支持向量操作的预测,其中处理电路系统响应于预测信息以控制屏蔽与目的地向量的某一部分关联的操作。例如此可有用于对实施if-then类型条件操作。存在提供预测的许多方式。例如,一些系统可支持可在向量指令之前执行的预测指令以评估比较条件的结果并设定述词信息,该述词信息基于比较的结果指定向量的哪些部分应被屏蔽。此外,一些系统可提供若干可写入的通用述词寄存器以便设置述词信息以屏蔽其他指令的一些向量路径,在此情况下待预测的向量指令可具有指示哪些述词寄存器预测指令的参数。另一方法为,用于在执行向量化循环时,当到达循环的最终迭代时,当待由循环处理的数据元素的总数不是向量长度的整数倍时,支持部分地预测向量的一些路径的系统。

不管怎样执行预测,对于抑制目的地向量的非目标元素的更新的复数乘法指令形式,此抑制可发生,而不管该预测指示是否识别目的地向量中的对应于非目标元素的部分为待屏蔽的部分。当预测可响应于复数乘法指令影响目标元素是否实际上更新时,抑制更新的非目标元素响应于复数乘法指令不更新,即使预测指示识别目的地向量的对应部分应不被屏蔽。

可提供复数乘法指令的许多变体。这些变体的每一个可具有如上所述的第一形式和第二形式两者,其中该第一形式和第二形式分别指向实元素和虚元素中的一者或另一者。

举例而言,指令解码器可支持加变体,其中将第一乘积和第二乘积相加以产生设置为目标元素的值,以且可支持减变体,其中减去第一乘积和第二乘积。此对于允许执行形式(a+ib)(c+id)的标准复数乘法和形式(a-ib)(c+id)的复共轭乘法两者很有用。例如,可使用第一形式的减变体复数乘法指令和第二形式的加变体复数乘法指令实施标准复数乘法。可使用第一形式的加变体复数乘法指令和第二形式的减变体复数乘法指令实施复共轭乘法运算。复数乘法指令的加变体和减变体可通过具有不同作业码或通过它们的指令编码的另一参数来区分。

指令解码器还可支持复数乘法指令的第一(非换位)版本和第二(换位)版本,其根据第一形式和第二形式的哪个指向实元素及哪个指向目的地向量的虚元素而不同。

对于非换位版本,第一形式指向目的地向量的至少一个实元素和第二形式指向至少一个虚元素。因此,第一形式将一或多个实元素设置为对应于r*r和i*i的总和或差之值,且第二形式将一或多个虚元素设置为对应于r*i和i*r的总和或差之值。此允许计算形式(a±ib)*(c+id)的习知复数乘法。

另一方面,对于换位版本,第一形式指向至少一个虚元素,且第二形式指向目的地向量的至少一个实元素。因此,第一形式将一或多个虚元素设置为对应于r*r和i*i的总和或差之值,且第二形式将一或多个实元素设置为对应于r*i和i*r的总和或差之值。此允许计算形式±i*(a±ib)*(c+id)的乘法,其中两个复数乘以额外因子±i。此举可适用于一些dsp算法,因为其不再需要换位向量的实元素/虚元素以将复数乘法结果乘以±i的另一指令。

在一些实施方式中,指令解码器可仅实施第一(非换位)版本或第二(换位)版本,而其他实施方式可具有支持第一版本和第二版本两者的指令解码器。

复数乘法指令的其他变体可包括整数或定点变体,其中使用整数/定点算术计算乘积及总和/差,且可包括浮点变体,其中根据浮点算术计算乘积及总和/差。对于浮点变体,第一操作数向量/第二操作数向量和目的地向量的每个元素可以给定浮点形式表示,例如如由ieee定义的双精度、单精度或半精度浮点。在一些情况下,可对应于不同浮点形式提供指令的不同变体。

还可存在不同形式的指令,相比于目的地向量,这些指令形式根据第一操作数向量和第二操作数向量中的数据元素的相对大小而不同。元素加宽变体可作用于具有j位数据元素的第一操作数向量和第二操作数向量以产生具有较宽k位数据元素(例如,k可为2*j)的目的地向量。因为产生第一乘积/第二乘积的乘法将产生较宽数据值,此方法可允许乘积的增加的精度保留在最终结果中。实务中,产生j位值的两个乘积和加上或减去该乘积将通常产生(2j+1)位值,因此若此减少至k位(2j位)值,则可需要通过丢弃一位的一些截断。一个方法可为,选择中间值的最高有效k位,并丢弃最低有效位。然而,2j+1位(k+1位)中间值的最高有效位将几乎始终为冗余位,因为第一乘积和第二乘积的总和或差将仅当相乘的原始值全都具有它们的最大可能量时仅溢出至最高位。因此,另一种方法可为,丢弃中间值的顶部位和选择最低有效k位为截断结果,此允许保留最低有效位,该最低有效位更可能为保留精度提供有用信息。

还可提供复数乘法指令的元素大小保持变体,其中目的地向量具有与第一操作数向量和第二操作数向量的j位数据元素相同大小的j位数据元素。此外,可能需要对应于增加或减去第一乘积和第二乘积的结果的中间值的一些截断。此外,截断可使用中间值的最高有效j位,或忽略顶部位和选择下一个最高有效j位,因为顶部位可能为冗余位。

当执行截断时,简单地丢弃低于选定j位的位可在复数乘法序列的结果中产生偏差,因为其趋向有系统地减小结果的量值。为降低该偏差,当截断中间值时,选定j位可基于中间值的至少一个低于选定j位的有效位来四舍五入(例如通过在选定j位之前将最高有效丢弃位的位值增加至对应于选定j位的最低有效位的中间值的位位置,以有效地将截断值四舍五入至可使用j位表示的2j+1中间结果的最接近值)。

一些系统可支持并行处理整个向量指令,其中并行产生每个结果向量元素。然而,对于一些更低功率实施方式,可能不存在充足硬件以并行计算目的地向量的所有元素。在一些实施方式中,响应于给定向量指令,处理电路系统可执行多个处理差拍,每个差拍对应于向量值的一部分,且该处理电路系统可支持第一向量指令和第二向量指令的重复执行,其中第二向量指令的差拍的第一子集合与第一向量指令的差拍的第二子集合并行执行。差拍可对应于向量的某一固定大小的部分,其可独立于数据元素大小。重迭执行多个向量指令的可允许硬件资源的更大利用率。执行的重迭特性可对诸如在系统上运行的异常处理程序的软件,或对除错器可见。该重迭执行还可用于上述论述的形式的复数乘法指令。

图1示意性地阐明了支持向量指令的处理的数据处理装置2的示例。应理解,为便于说明此为简图,并且实际上该装置可能具有为简明起见未在图1中示出的许多元素。装置2包含用于响应于通过指令解码器6解码的指令而执行数据处理的处理电路系统4。程序指令自存储器系统8中撷取并通过指令解码器解码以产生控制处理电路系统4的控制信号,处理电路系统4以通过指令集架构界定的方式处理指令。例如解码器6可解释经解码指令的作业码和指令的任意额外控制字段以产生控制信号,该控制信号引起处理电路系统4起动适合硬件单元来执行诸如算术运算、加载/存储操作或逻辑运算的操作。该装置具有用于存储通过处理电路系统4处理的数据值的寄存器组10和用于配置处理电路系统的操作的控制信息。响应于算术或逻辑指令,处理电路系统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中的位置地址的堆栈指针寄存器、及用于存储在函数的执行之后处理分叉进入的函数返回地址的链路寄存器。为简明起见这些未在图1中示出。

如在图1中所示,寄存器还包括用于追踪向量循环的进展的循环计数器16、用于存储指示当前正处理的向量中的每个数据元素中的位计数的参数的元素大小寄存器18、用于存储指示一个向量寄存器中的位总数的参数的向量宽度寄存器20及用于控制向量操作的预测的向量述词寄存器22。这些将在下文更详细地描述。在一些示例中,在制造装置期间根据在给定装置的向量寄存器14中实施的特定向量宽度来硬连接向量宽度寄存器20。或者,若向量寄存器档案14支持具有不同向量宽度的不同配置,则向量宽度寄存器20可经程序化以指示正使用的当前宽度。类似地,若特定元素大小总用于给定装置则元素大小寄存器18可硬连接,或若装置支持使用不同数据元素大小的向量的处理则为可变。在一些示例中,例如若每个向量指令指定用于该指令的元素大小,则可省去元素大小寄存器18。在循环计数器16示为专用控制寄存器时,其他示例可使用通用标量寄存器12的一者来追踪向量化循环的进展。

用于执行复数算术的指令(其中在向量寄存器中交错的复数的实部与虚部),可提升效能并减小寄存器压力。在仅具有相对少向量寄存器的实施方式中(例如一些硬件系统可能仅提供8个向量寄存器),寄存器压力可能为总体处理器效能中的重要因素,因为若无充足寄存器以容纳待处理的所有值,则此可需要用于将寄存器内容溢出存储器及稍后将值读回至寄存器档案的额外加载/存储操作。在例如具有8个向量寄存器的系统中,在指令解码器中无复数算术支持的情况下,标准向量乘法指令将仅允许无寄存器溢出而实施的数基2fft,但在利用复数算术支持的情况下,可无寄存器溢出而实施数基4fft。结果,通过增加复数算术指令来产生的总体加速在q31fft上可高达56%。

然而,实施复数乘法指令的特定方式可影响效能、电路面积及功耗。

图2示出了根据替换方法使用复数乘法指令的对比示例。如在图2的顶部所示,两个复数a+ib与c+id相乘需要四次乘法以产生乘积项ac、ibc、iad、-bd,因此使用一个向量指令实施复数乘法通常是不可行的。在图2中示出的方法中,首先执行vmov指令以将累加向量寄存器q0清零。随后,执行两个复数乘法向量指令,每一个将累加寄存器q0和两个输入操作数向量q1、q2用作输入。向量寄存器q0、q1、q2的每一个具有其分配为表示复数的实部的实元素(r)的偶数编号元素0、偶数编号元素2,且具有其分配为表示复数的虚部的虚元素(i)的其奇数编号元素1、奇数编号元素3。邻接实元素/虚元素对0、1及2、3每一个表示不同复数,例如向量q1的元素0、元素1表示复数a0+ib0,且向量q1的元素2、元素3表示不同复数a1+ib1。类似地,q2寄存器表示与寄存器q1的对应内容相乘的对应复数c0+id0及复数c1+id1。第一复数乘法指令vcmla计算在图2的顶部示出的前两个项ac、项ibc的总和,并且将其结果累加入累加寄存器q0。类似地,第二复数乘法指令计算在图2中示出的第三个项iad与第四个项-bd的总和,并且将这些项累加入累加寄存器q0。在最终累加值中,每对邻接实元素/虚元素表示对应于通过q1、q2的对应部分表示的复数的乘积的复值。

在更大规模实施方式中,此方法可具有一些优势,因为例如此方法可对无序处理器更高效。然而,在更低功率实施方式中,存在一些劣势。首先,需要额外指令来将累加寄存器q0清零,降低了存储器中的代码密度并降低了效能。此外,每个向量乘法指令需要三个输入向量(累加寄存器q0及两个输入向量q1、q2的旧值),因为它们将它们的结果累加进累加寄存器q0中。因此,需要第三个向量寄存器读取端口。在相对小规模实施方式中可能不存在需要多余两个向量读取端口的其他指令,所以为仅一个类型指令增加第三个寄存器读取端口的面积及功率成本可能是理由不充足。

此可通过使用在图3中所示的形式的指令来避免。如在图3的顶部的求和中所示,可重构复数乘法以便结果的实部通过一个指令来计算且虚部通过另一指令来计算。提供了第一形式及第二形式的指令,其中的一个指向目的地向量的实元素而另一个指向虚元素。在每对邻接向量路径中,第一形式指令(在下文示例中通过无“x”的指令助记符来指示)产生第一乘积ac(r*r)及第二乘积bd(i*i),增加或减去第一乘积及第二乘积、以及将结果写入对应目标元素(在此示例中为实元素)。另一方面,对于每对邻接向量路径,第二形式指令(通过具有“x”的指令助记符来指示)产生第一乘积ad(r*i)及第二乘积bc(i*r)、增加或减去第一乘积及第二乘积、以及将结果写至对应目标元素(在此示例中为虚元素)。因为每个指令写入一半元素,在执行了两种形式的指令之后写入整个寄存器,从而避免首先清零寄存器。另外因为每种形式指令的目标元素含有所有所需乘积,不需要累加至前一结果中,因此可免去对第三个寄存器读取端口及清除累加的额外指令的需要。

提供了指令的加变体及减变体。对于加变体(通过助记符vmmlad或vmmladx指示),加上第一乘积/第二乘积以形成对应目标元素。对于减变体(通过助记符vmmlsd或vmmlsdx指示),减去第一乘积/第二乘积以形成对应目标元素。因此,在图3中执行第一形式的减变体指令(vmmlsd),以将寄存器q0的元素0(实元素)设置为表示寄存器q1、q2的对应部分中值a0+ib0与c0+id0的复合乘积的实部的值a0c0-b0d0,及以类似方式将寄存器q0的元素2(实元素)设置为值a1c1-b1d1。还执行第二形式vmmladx的加变体指令以将寄存器q0的元素1(虚元素)设置为表示寄存器q1、寄存器q2中的值a0+ib0与c0+id0的复合乘积的虚部的值a0d0+b0c0,及以类似方式将寄存器q0的元素3(虚元素)设置为值a1d1+b1c1。

替代地,如图4中图示,通过执行第一形式的加变体指令(vmmlad)及第二形式的减变体指令(vmmlsdx),可计算形式r=(a-ib)(c+id)的复共轭乘法。因此,第一形式基于r*r与i*i乘积的总和指向目的地向量q0的实元素,且第二形式基于r*i与i*r乘积的差指向虚元素。

在图3和图4的两个示例中,指令具有第一版本(使用无“t”的指令助记符指示的非换位版本),其中第一形式指令指向目的地寄存器q0的实元素及第二形式指向虚元素。

然而,如图5图示还可提供这些指令的第二版本,其中第一形式指令指向虚元素及第二形式指向实元素。第二版本为通过包括“t”的指令助记符指示的换位版本。因此,此次基于r*i及i*r乘积设置目的地寄存器q0的实元素,并基于r*r及i*i乘积设置虚元素。如图5中所示,此有助于评估形式±i*(a+ib)*(c+id)的计算。其他方面,在图5中的操作类似于图3和图4中的操作。

响应于第一形式/第二形式的复数乘法指令中的一者或两者,指令解码器6控制处理电路系统4以抑制非目标元素的更新,以避免改写较早指令的结果。若仅第一形式/第二形式的一者触发此种抑制非目标元素的更新,则在一对指令中该指令应第二个执行。然而,若两种形式抑制非目标元素的更新,则以任一顺序执行该对指令。

图3至图5示出了示例,其中实元素为具有偶数编号位置0、偶数编号位置2的元素,且虚元素为奇数编号元素1、奇数编号元素3。然而,如图6中所示,实元素及虚元素也可相反,即虚元素对应于偶数编号元素,而实元素对应于奇数编号。如图6的上两个示例所示,其可适用于交错实元素及虚元素以便在图3至图5中示出的所有乘法保留在邻接向量路径对内而不需要跨两个或两个以上路径的乘法。然而,如图6的底部示例所示,还可能以不同方式排列实元素及虚元素。

在上述示出的指令类型适合于计算复数乘法运算的结果的同时,它们还可用于其他目的。在实元素适合于表示复数的实部,且虚元素适合于表示虚部的同时,程序员可能能够找到用于相同指令的另一用途。例如,执行在图4示出的复数乘法指令的加变体可为将相邻路径的乘积的总和累加至目的地的单个元素的相对简单方式,因此一些程序员可选择还使用用于实数的一些处理的此类指令。因此,指令并不单独限于使用复数算术。

在图3至图5的示例中,指令保持数据元素的大小,所以目的地q0具有与输入操作数q1、q2相同大小的数据元素。然而,若使用了整数/定点算术且数据元素每一者包含j个位,j位元素的两个乘积的总和具有2j+1个位,因此执行截断以产生写入至给定目标元素的j位值。图7示出了执行截断的第一方法。在此情况下,选择2j+1位中间结果[2j:0]的上j个位[2j:j+1]以写入至目标元素,及为减少偏差,该结果可通过在执行截断之前将下一个最高有效位位置[j]中的位值1增加至中间结果来四舍五入并将j位结果写入目标元素。应理解也可执行其他形式的四舍五入。

图8图示截断的替换方法,其忽略中间结果的最高有效位,且相反当执行截断时选择中间结果的下j个最高有效位[2j-1:j],并基于下一个最高有效位[j-1]来四舍五入选定位。此可经常允许更大的精度,因为2j+1位中间结果的最高有效位[2j]常常为冗余位,仅若原始输入元素全部具有最大可能的正或负量值则才将使用该位。因此,位[j]更可能含有比位[2j]“感兴趣”的结果,因此可能在最终结果中较佳保留该位。使用此方法,因为从不使用最高有效位[2j],所以并不需要通过硬件来明确地计算该位(例如,该硬件可能仅具有用于确定2j+1位中间结果的底部2j个位的电路系统)。为确保(2j+1)位中间结果的最高有效位总为冗余位(以便通过忽略最高有效位而不损失信息),指令集架构可需要程序员或编译员在执行复数乘法之前将全部输入值除以2(因此免去原本需要最高有效位的极端量值),随后一旦已产生复数乘法的结果,即将结果乘以4以给出相同数字结果,就好像已计算中间结果的最高有效位一样。

尽管在图7和图8示出了仅使用位于截断的切除点下方一个位置的一个较低有效位执行四舍五入的示例,但还可能使用考虑更多数量较低有效位的四舍五入方法。详言之,对于指令的浮点变体,可根据已知浮点四舍五入方法考虑附加位。

如图9中所示,还可能提供指令的元素加宽变体,其产生目的地向量q0,其中这些元素为输入操作数q1、q2的元素的宽度的两倍。在此情况下,仅一半输入元素可影响结果。复数乘法指令可指定目的地是否应使用操作数向量q1、q2的元素的上半部或下半部来计算(例如,在图9中指令作用于操作数向量的下半部)。对于元素加宽变体,形成2j位较宽数据元素的2j+1位中间值的截断可如图10中所示(类似于图7)通过选定最高有效2j个位[2j:1],或如图11中所示(类似于图8)通过忽略最高有效位及选择最低有效2j个位[2j-1:0]来进行。

上述论述的示例示出了输入向量每一者包含4个数据元素(交错的2个实元素及2个虚元素),但应理解指令还可使用不同数目的元素执行。

如在图12中所示,复数乘法指令可以通过向量预测指令(vpt指令)前面的指令来进行预测,该向量预测指令比较两个输入向量qa、qb的各个元素以确定它们是否满足一些测试条件,并且根据每个比较的结果设置向量述词寄存器(vpr22)。vpr22在通过处理电路系统4支持的最小元素大小的粒度下包括一定数量个述词旗标,其每一者对应于向量寄存器的一部分。例如,对于128位向量寄存器(其中最小元素大小为8个位),可提供16个述词旗标,其每一者对应于向量寄存器的8位块。

在此示例中,测试条件为qa的给定元素是否大于或等于qb的对应元素,但测试条件的其他示例包括大于等于,小于,小于等于,等于或不等于。在此示例中,测试条件在路径0、路径1及路径3中通过,但在路径2中未通过。因此,响应于vpt指令,处理电路系统4在vpr22的对应于路径2的部分中设置述词旗标为0,及在vpr的对应于路径0、路径1、路径3的其他部分中设置述词旗标为1。由于在此示例中vpt指令的元素大小为32个位(大于8个位的最小元素大小),故4个相邻述词旗标的块经设置为对应于每个各个路径的0或1。在此示例中,述词旗标0指示应屏蔽向量运算的对应部分,而1指示不应屏蔽对应部分,但其他示例可使用相反的映像。

当复数乘法指令随后在vpt指令之后执行时,若vpr将对应述词旗标设为0,则处理电路系统4屏蔽与目的地向量的给定部分关联的操作。在此示例中,因为在vpr的对应于目的地向量的元素4/5的部分中的述词旗标为0,故这些元素响应于任一复数乘法指令不更新。因此,第一形式复数乘法指令vmmlsd不更新目的地向量q0的元素4,尽管其为此指令原本所通常指向的实元素,因为vpr的对应部分为0。更新其他实元素0、实元素2及实元素6,因为它们对应于vpr22中等于1的述词位。类似地,第二形式指令不更新元素5,因为其还通过vpr而屏蔽,但仍然写入虚元素1、虚元素3、虚元素7。对于两种形式复数乘法指令,抑制非目标元素更新,而不管vpr中的对应值是1还是0。

存在许多方式可以在vpr具有述词位0时屏蔽与寄存器的给定部分关联的操作。例如,屏蔽可通过将目的地的对应部分清零,保留在目的地的那部分中存储的前值,或通过抑制与该部分关联的操作执行(例如不执行自存储器的加载、用于该路径的乘法、加法或减法)来实施。在一些实施方式中,响应于述词信息而屏蔽对目的地寄存器的一些部分的更新而提供的硬件可再用于响应于复数乘法指令来抑制非目标元素的更新。然而,与预测不同,非目标元素的此种屏蔽将响应于复数乘法指令而发生,而不管vpr22的对应部分的内容如何。

图13示出了预测的另一示例。向量指令的常见用途为在向量化循环中,其中某一序列的操作需要应用在存储在存储器中的阵列的每个元素。每高位准代码中的元素迭代一次的循环可编译成包含具有较少迭代的循环的向量化代码,每个循环个将元素块加载进向量寄存器中,使用一连串向量指令处理元素,且将处理的每个路径的结果存储回至存储器。因此,循环的每次迭代可处理对应于一个向量寄存器中的数据元素的数目的元素块。若待处理的阵列中的元素的总数为ne且一个向量nv中的数据元素的数目(等于向量宽度vw除以数据元素大小es),则整个阵列可处理最少ne/nv次迭代。然而,往往元素ne的总数可能不为一个向量中元素nv的数目的整数倍,因此在循环的最终迭代中,并非向量的所有元素将使用待处理的值填充。若允许未填充路径中的处理无屏蔽进行,则此举可引起错误。例如,超出阵列的末尾的存储器地址空间可能尚未映像在页表中,所以若对于在处理阵列的末尾的最终迭代中“未使用”路径的一者执行加载/存储操作,则相邻于阵列存在存储器存取故障或数据损坏。

因此,期望在循环的最终迭代中屏蔽未使用路径中的操作。如图1中所示,处理电路系统4可具备用于控制启用还是屏蔽给定向量话循环的哪些路径的循环预测电路系统90。在启动向量化循环时,可将循环计数器16设定为指定在循环中待处理的元素ne的总数的值。例如,循环启动指令可指定元素的数目。在循环的每次迭代结束时,自循环计数器16减去一个向量nv中的元素的数目以计算待处理的剩余元素的数目ne保留。在启动给定循环迭代时,若ne保留<nv,则循环预测电路系统90控制处理电路系统4以屏蔽与向量处理的上nv-ne保留路径关联的操作,例如通过本身抑制向量处理的路径(例如阻止发出加载/存储请求)及/或停止写入在屏蔽路径中处理的结果来屏蔽。

因此,若当循环预测电路系统90已确定应屏蔽一些路径时迭代执行复数乘法指令,则目标元素(取决于指令形式及版本的实元素或虚元素)将不在那些屏蔽路径中更新。例如,在图13中循环预测电路系统90确定应屏蔽向量的路径2及路径3,所以vmmlsd指令仅更新非屏蔽路径中的元素0(实元素),且并不更新屏蔽路径中的元素2(实元素)。非屏蔽路径1中的非目标元素(示例中的虚元素)仍不由复数乘法指令更新,不管任意路径是否由循环预测电路系统90预测如何。

上文示例示出了在向量的每个路径中并行发生的操作,但此并不重要。

处理电路系统4可包括用于处理不同类别的指令的许多不同硬件块。例如,与存储器系统8互相作用的加载/存储指令可由专用加载/存储单元来处理,而算术或逻辑指令可由算术逻辑单元(alu204)来处理。alu本身可进一步分成用于在涉及乘法的运算中执行的乘法-累加单元(mac),以及用于处理其他种类的alu操作的另一单元。还可提供浮点单元以处理浮点指令。相比于向量指令,不涉及任一向量处理的纯的标量指令还可通过单独硬件块处理,或再使用相同硬件块。

在诸如数字信号处理(dsp)的一些应用中,可存在大略等量的alu及加载/存储指令,且因此诸如mac的一些大块可在大量时间内保持空闲。此低效可在向量架构上恶化,因为执行资源随着向量路径数量而定标以获得更高效能。在更小处理器(例如,单问题,顺序核心)上可禁止完全超出向量管线的面积开销。当更好地使用可用执行资源时最小化面积影响的一个方法为重迭执行指令,如图14中所示。在此示例中,三个向量指令包括加载指令vldr、乘法指令vmul及移位指令vshr,并且所有这些指令可在同一时间执行,尽管它们之间存在数据依赖性。这是因为vmul的元素1仅取决于q1的元素1,并非整个q1寄存器,所以vmul的执行可在vldr的执行已经结束之前开始。通过允许重迭指令,昂贵的块如乘法器可更多的时间保持活动。

因此,可期望实现微架构实施以重迭执行向量指令。然而,若架构假定存在固定量的指令重迭,则若微架构实施实际上匹配由架构假定的指令重迭的数量,此举提供高效率,但是若定标至使用不同重迭或根本不重迭的不同微架构,则可引起问题。

相反,架构可支持如图15的示例示出的一定范围的不同重迭。向量指令的执行分成称为“差拍”的多个部分,其中每个差拍对应于预定大小的向量部分的处理。差拍为完全执行或根本不执行且不能部分地执行的向量指令的原子部分。在一个差拍中处理的向量部分的大小通过架构界定且可为向量的任意分数。在图15的示例中,差拍经定义为对应于四分之一向量宽度的处理,以便每向量指令存在四个差拍。显而易见,此仅为一个示例且其他架构可使用不同数目的差拍,例如两个或八个。对应于一个差拍的向量的部分可为等于、大于或小于正在处理的向量的数据元素大小。因此,即使元素大小自实施方式至实施方式变化或在不同指令之间的运行时间下变化,差拍仍为向量处理的某个固定宽度。若在一个差拍中正处理的向量部分包括多个数据元素,则可在各个元素之间的界限处停用进位信号以确保每个元素独立地处理。若在一个差拍中处理的向量的部分对应于元素的仅部分且硬件不不足以并行计算一些差拍,则在处理的一个差拍期间产生的进位输出可作为进位输入被输入至下一个处理差拍,以便两个差拍的结果共同形成数据元素。

如图15中所示,处理电路系统4的不同微架构实施方式可在抽象架构时钟的一个“滴答”中执行不同数量的差拍。这里,“滴答”对应于架构状态前进的单位(例如,在简单架构上,每个滴答可对应于更新与执行指令关联的所有架构状态的实例,包括更新程序计数器以指向下一个指令)。熟习此项技术者应当理解,诸如布置管线的已知微架构技术可意味着单个滴答可能需要多个时钟循环来在硬件位准下执行,并且实际上在硬件位准下的单个时钟循环可以处理多个指令的多个部分。然而,该微架构技术对软件不可见,因为滴答在架构位准下为原子级别。为了简明起见,在本公开的进一步描述期间忽略该微架构。

如图15的下侧示例所示,一些实施方式可通过提供用于处理在一个滴答内并行的所有差拍的充足硬件资源以在相同滴答内安排向量指令的所有四个差拍。此可适合于更高效能实施方式。在此情况下,在架构位准下在指令之间不需要任何重迭,因为整个指令可在一个滴答下完成。

另一方面,更大面积有效实施方式可提供每滴答仅能处理两个差拍的更狭小处理单元,且如图15的中间示例中所示,指令执行可重迭与第一指令的第三个差拍或第四个差拍并行进行的第二向量指令的第一个差拍及第二个差拍,其中那些指令对处理电路系统内的不同执行单元执行(例如,在图15中第一指令为使用加载/存储单元执行的加载指令及第二指令为使用mac执行的相乘累加指令)。

能量/面积更高效实施方式可提供更窄的硬件单元,并且每次仅能处理单个差拍,并且在此情况下,每滴答可以处理一个差拍,其中指令执行通过如图15的顶部示例所示(这与在上文图14所示的示例相同)的一个差拍来重迭并交错。

应理解,在图15中示出的重迭仅为一些示例,且其他实施方式也是可能的。例如,处理电路系统4的一些实施方式可支持在相同滴答中多个指令并行双重发出,以便存在更大输出量的指令。在此情况下,在一个循环中一起开始的两个或两个以上向量指令可具有与在下一个循环中开始的两个或两个以上向量指令重迭的一些差拍。

除了改变自实施方式至实施方式以定标至不同效能点的重迭量,向量指令之间的重迭量还可在程序内的向量指令的执行的不同次之间的运行时间下改变。因此,处理电路系统4可具备用于控制相对于上述指令执行给定指令的时序的电路系统。此赋予微架构选择某些角落情况中不重迭指令的自由,这些指令更难实施或取决于可用于指令的资源。例如,若存在需要相同资源并且所有可用mac或alu资源已被另一指令使用的给定类型(例如,相乘累加)的背对背指令,则可能没有足够空闲资源来开始执行下一条指令,因此第二条指令的发出可以等待直到第一条指令完成而非重迭。

如图16中所示,若存在中间标量指令,则也可防止在两个向量指令之间的重迭。这是因为标量指令可取决于向量指令的最后差拍的结果,且第二向量指令可取决于其所有差拍中的标量结果,所避免与标量指令重迭向量指令更安全。

该重迭执行还可用于上述论述的复数乘法指令。因此,用于复数乘法指令的各个处理差拍可以全部并行地或者在多个架构滴答上顺序地,与其他指令重迭地发生。

然而,若允许重迭执行,则指令集架构指定程序员不应将同一向量寄存器指定为目的地寄存器与复数乘法指令(例如vmmlsdq0、q0、q1而非vmmlsdq0、q1、q2)的操作数寄存器的一个两者。在数据元素大小等于更大的差拍大小的1差拍/滴答实施方式中,则将同一寄存器q0指定为来源及目的地两者可出现不确定性结果,因为在后来差拍中所需的源值尚未自源寄存器/目的地寄存器读取之前,其可在一个差拍中产生改写的通用源寄存器/目的地寄存器q0的给定元素。此在2或4差拍/滴答实施方式中不是一个问题,或者若数据元素大小小于1差拍/滴答实施方式的差拍大小,因为在此情况下将并行读取向量的相邻元素中的实部/虚部。然而,编写待执行的代码的程序员可能不知晓什么特定微架构实施已用于给定系统,因此在1差拍/滴答实施方式中执行存在风险。

一种解决方案可以是对于1差拍/滴答实施方式添加一些附加电路系统来侦测目的地寄存器与一个源寄存器相同的情况,并且若如此可触发错误或重新映像指令所引用的寄存器,例如通过将输入的一者暂时复制至不同寄存器。然而,实际上,该额外电路系统的开销不可能是合理的。实际上,复数乘法指令将经常用于使用如上所示的相同输入寄存器及目的地寄存器的第一形式/第二形式指令对,因此程序员极不可能选择指定与源寄存器的一者相同的目的地寄存器,因为此举将引起该对的第一指令改写第二指令所需的输入操作数。因此,实际上程序员不可能将同一寄存器指定为这些类型指令的来源/目的地两者,因此增加防止此情况的专门电路系统的开销不合理。相反,指令集架构可简单地指定若程序员不使用同一寄存器作为这些复数乘法指令的来源/目的地两者,则无法确保结果为正确的。此可通过免去处理罕见情况的支出费用来提供更大面积及功率效率硬件实施方式。

图17为示出执行复数乘法指令的方法的流程图。在步骤50处,撷取待执行的下一个指令以解码及指令解码器确定该指令的类型。若指令不为复数乘法指令,则指令解码器控制处理电路系统以执行适宜此类型指令的操作。当遇到复数乘法指令时,则在步骤52处指令解码器确定指令具有第一形式还是第二形式。此外,在步骤54处,指令解码器确定指令具有第一版本还是第二版本。若指令具有第一形式及第一版本,则在步骤56处,目标元素为目的地的至少一个实元素,而若指令具有第一形式及第二版本,则在步骤58处,目标元素为至少一个虚元素。此外,对于第一形式指令,在步骤60处,指令解码器产生控制处理电路系统4的控制信息以产生对应于向量q1的实元素与向量q2的实元素的乘积的第一乘积,及对应于q1的虚元素与q2的对应虚元素的乘积的第二乘积。

另一方面,若指令具有第二形式,则在步骤62处,指令解码器再次确定指令具有第一版本还是第二版本。若指令具有第一版本,则在步骤64处,目标元素经确定为至少一个虚元素,而若指令具有第二版本,则在步骤66处,目标经确定为至少一个实元素。在步骤68处,指令解码器6产生控制处理电路系统4的控制信号以产生对应于q1实元素与q2虚元素的乘积的第一乘积,及为q1虚元素与q2实元素的乘积的第二乘积。

发出指令以执行,及对于输入向量q1、q2的实元素/虚元素的每对产生在步骤60、步骤68中定义的乘积,并且在步骤70处,增加或减去对应第一乘积及第二乘积(取决于指令为加变体还是减变体)。在步骤72处,将取决于加法或减法的结果的值写入不由预测屏蔽的每个目标元素。若有必要将位的数目减少至目的地向量的数据元素大小,则执行加法/减法的结果的四舍五入及截断。在步骤74处,处理电路系统抑制不由该指令指向的至少一个非目标元素的更新,不管是否为该元素规定任何预测。

应理解,源向量寄存器的q1及q2的选择是任意的且使用哪些寄存器可通过架构硬连接。或者,在其他实施例中复数乘法指令可含有指示哪些寄存器含有源向量值的参数。类似地,目的地寄存器q0可硬连接或可通过复数乘法指令的参数选定。

图18图示了可使用的虚拟机实施方式。尽管前文描述的实施例根据用于操作支持相关技术的特定处理硬件的装置及方法实施本发明,但还可能提供硬件装置的所谓虚拟机实施方式。这些虚拟机实施方式在运行支持虚拟机程序130的主操作系统140的主处理器150上运行。通常,需要大功率处理器以提供在合理速度下执行的虚拟机实施方式,但该方法在某些情况下为合理的,诸如当期望为了兼容性或重新使用原因而运行另一处理器的本端代码。虚拟机程序130提供虚拟硬件接口至客程序120,客程序120与原本由真实硬件提供的硬件接口相同,该真实硬件为由虚拟机程序130模型化的设备。因此,可以使用虚拟机程序130自客程序120内执行包括对如上所述的存储器存取的控制的程序指令,以模型化其与虚拟机硬件的交互作用。客程序120可为裸金属程序,或者其可为以与主os140运行虚拟机应用130相似的方式运行应用的客操作系统。还应理解,存在不同类型的虚拟机,并在一些类型中存在直接在主硬件150上运行的虚拟机而无需主操作系统140。

在本申请中,使用用语“被配置为”以意指装置的组件具有能够执行所定义操作的配置。在此上下文中,“配置”意指硬件或软件的互连布置或方式。例如,装置可具有提供所定义操作的专用硬件,或者处理器或其他处理装置可被程序化以执行该功能。“被配置为”并不暗指装置组件需要以任何方式改变以便提供所定义操作。

尽管本文已参考所附附图详细地描述本发明的说明性实施例,但应理解,本发明并不限于这些精确实施例且本领域技术人员可在不脱离如所附权利要求所定义的本发明的范围和精神的情况下在其中实施各种改变、添加及修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1