本揭示的各方面涉及包括两个或多于两个向量的运算,其中至少一个向量的数据元素与至少另一向量的数据元素具有不同位宽。此类运算被称为混合宽度运算。更具体地说,一些方面涉及包括至少第一向量操作数和第二向量操作数的混合宽度单指令多数据(simd)运算,其中第一或第二向量操作数中的至少一个具有可存储在偶数或奇数个寄存器对中的数据元素。
背景技术:
单指令多数据(simd)指令可用于处理系统以采用数据并行性。当需要在例如数据向量的两个或多于两个数据元素上进行相同或共同任务时存在数据并行性。可通过使用单条simd指令而不是使用多条指令对两个或多于两个数据元素并行地进行共同任务,所述单条simd指令限定有待对对应多个simd通道中的多个数据元素进行的相同指令。
simd指令可包含一或多个向量操作数,例如源向量操作数和目的地向量操作数。每个向量操作数将包含两个或多于两个数据元素。对于simd指令,属于相同向量操作数的所有数据元素可大体上具有相同位宽。然而,一些simd指令可指定混合宽度操作数,其中第一向量操作数的数据元素可具有第一位宽且第二向量操作数的数据元素可具有第二位宽,其中第一和第二位宽彼此不同。具有混合宽度操作数的simd指令的执行可包括若干挑战。
图1a到c示出包括在用于执行具有混合宽度操作数的simd指令的常规实施方案中的挑战的实例。参考图1a,示出用于执行simd指令100的第一常规实施方案。假定simd指令100可由支持64位指令集体系结构(isa)的常规处理器(未示出)执行。这意味着例如simd指令100等指令可指定具有高达64位位宽的操作数。可就64位寄存器或32位寄存器对来指定64位操作数。
simd指令100的目标是对源操作数102的每个数据元素执行相同指令。源操作数102是包括标记为0到7的八个8位数据元素的64位向量。源操作数102可存储在单个64位寄存器或32位寄存器对中。有待对八个数据元素0到7中的每一个执行的相同指令或共同运算可例如是乘法、平方函数、左移位函数、增量函数、加法(例如,根据指令中的一常数值或立即数字段或根据由另一向量操作数提供的值)等,所述相同指令或共同运算的结果针对八个所得数据元素中的每一个可消耗多于8位且高达16位存储容量。这意味着simd指令100的结果可消耗源操作数102可消耗的存储空间两倍的存储空间,即,两个64位寄存器或两个32位寄存器对。
由于被配置成实施simd指令100的常规处理器并不包含指定大于64位位宽的操作数的指令,因此simd指令100可分成两个分量simd指令:100x和100y。simd指令100x指定有待对标记有源操作数102的偶数(或“偶数编号的数据元素”)0、2、4和6的数据元素进行的共同运算。simd指令100x指定目的地操作数104x,所述目的地操作数104x的宽度是64位且包含标记为a、c、e和g的16位数据元素,其中的每一个包括高(h)8位和低(l)8位。对源操作数102的偶数编号的8位数据元素0、2、4和6的共同运算的结果对应地写入目到的地操作数104x的16位数据元素a、c、e和g。simd指令100y类似于simd指令100x,其中的区别在于,simd指令100y指定对标记有源操作数102的奇数(或“奇数编号的数据元素”)1、3、5和7的数据元素的共同运算,同时结果有待写入到目的地操作数104y的16位数据元素b、d、f、h,所述目的地操作数104y还是类似于simd指令100x的目的地操作数104x的64位操作数。以此方式,simd指令100x和100y中的每一个可指定一个64位目的地操作数,且simd指令100x和100y可一起实现对源操作数102的数据元素0到7中的每一个的共同运算的执行。然而,由于需要实施的两条单独指令,因此simd指令100增加了代码空间。
图1b示出使用分量simd指令120x和120y的不同集合的simd指令100的第二常规实施方案。simd指令120x和120y各自指定对源操作数102的8位数据元素0到7中的每一个的共同运算。simd指令120x将目的地操作数124x(低(l)8位结果有待写入到所述目的地操作数124x)指定为目的地操作数124x的对应8位结果数据元素a到h(同时丢弃结果的高(h)8位)。类似地,指令120y将目的地操作数124y(高(h)8位结果有待写入到所述目的地操作数124y)指定为目的地操作数124y的对应8位数据元素a到h(同时丢弃结果的低(l)8位)。simd指令100的此第二常规实施方案的不足之处还在于针对两个分量simd指令120x和120y增加的代码空间。此外,如可理解的,第二常规实施方案还引发针对源操作数102的数据元素0到7中的每一个计算和丢弃高(h)8位(例如,在执行指令120x时)或低(l)8位(例如,在执行指令120y时)时的功率损耗。
图1c示出使用分量simd指令140x和140y的又一集合的simd指令100的第三常规实施方案,所述分量simd指令140x和140y在某些方面类似于图1a的simd指令100x和100y。区别在于每条simd指令对源操作数102的数据元素中的哪些数据元素进行运算。更详细地,simd指令140x指定有待对源操作数102的下游四个数据元素0到3而不是偶数编号的8位数据元素进行的共同运算。结果写入到目的地操作数144x的16位数据元素a、b、c、d。然而,simd指令140x的执行包括将对下游四个8位数据元素(生成32位)的运算结果跨目的地操作数140x的所有64位扩散出去。simd指令144y是类似的且指定将对源操作数102的上游四个8位数据元素4到7的运算结果跨64位目的地操作数144y的16位数据元素e、f、g、h扩散出去。除了如第一和第二常规实施方案中增加的代码大小外,如第三常规实施方案中所见的这些扩散出去的数据移动可能需要例如交叉开关等额外硬件。
因此,需要一种避开常规实施方案的以上提及的缺点的混合宽度simd指令的改进的实施方案。
技术实现要素:
示范性方面包含关于混合宽度单指令多数据(simd)指令的系统和方法,所述混合宽度单指令多数据指令具有包括第一位宽数据元素的至少源向量操作数以及包括第二位宽数据元素的目的地向量操作数,其中所述第二位宽是所述第一位宽的一半或两倍。对应地,源向量操作数或目的地向量操作数中的一个表达为寄存器对:第一寄存器和第二寄存器。另一向量操作数表达为单个寄存器。第一寄存器的数据元素对应于表达为单个寄存器的另一向量操作数的偶数编号的数据元素,且第二寄存器的数据元素对应于表达为单个寄存器的另一向量操作数的数据元素。
举例来说,示范性方面涉及进行混合宽度单指令多数据(simd)运算的方法,所述方法包括:由处理器接收simd指令,所述simd指令包括:包括第一位宽源数据元素的第一集合的至少第一源向量操作数以及包括第二位宽目的地数据元素的至少目的地向量操作数,其中所述第二位宽是所述第一位宽的两倍。目的地向量操作数包括寄存器对,所述寄存器对包含:包括目的地数据元素的第一子集的第一寄存器以及包括目的地数据元素的第二子集的第二寄存器。基于源数据元素的第一集合的顺序次序,所述方法包含在处理器中执行simd指令,包括:从第一集合的偶数编号的源数据元素生成第一寄存器中的目的地数据元素的第一子集,以及从第一集合的奇数编号的源数据元素生成第二寄存器中的目的地数据元素的第二子集。
另一示范性方面涉及进行混合宽度单指令多数据(simd)运算的方法,所述方法包括:由处理器接收simd指令,所述simd指令包括:包括第一位宽源数据元素的至少源向量操作数以及包括第二位宽目的地数据元素的至少目的地向量操作数,其中所述第二位宽是所述第一位宽的一半。源向量操作数包括寄存器对,所述寄存器对包含:包括源数据元素的第一子集的第一寄存器以及包括源数据元素的第二子集的第二寄存器。基于目的地数据元素的顺序次序,所述方法包含在处理器中执行simd指令,包括:从第一寄存器中的源数据元素的对应第一子集生成偶数编号的目的地数据元素,以及从第二寄存器中的源数据元素的对应第二子集生成奇数编号的目的地数据元素。
另一示范性方面涉及包括可由处理器执行的指令的非暂时性计算机可读存储媒体,所述指令在由所述处理器执行时致使处理器进行混合宽度单指令多数据(simd)运算。所述非暂时性计算机可读存储媒体包括simd指令,所述simd指令包括:包括第一位宽源数据元素的第一集合的至少第一源向量操作数以及包括第二位宽目的地数据元素的至少目的地向量操作数,其中所述第二位宽是所述第一位宽的两倍。目的地向量操作数包括寄存器对,所述寄存器对包含:包括目的地数据元素的第一子集的第一寄存器以及包括目的地数据元素的第二子集的第二寄存器。基于源数据元素的第一集合的顺序次序,所述非暂时性计算机可读存储媒体包含:用于从第一集合的偶数编号的源数据元素生成第一寄存器中的目的地数据元素的第一子集的代码,以及从第一集合的奇数编号的源数据元素生成第二寄存器中的目的地数据元素的第二子集的代码。
又一示范性方面涉及包括可由处理器执行的指令的非暂时性计算机可读存储媒体,所述指令在由所述处理器执行时致使处理器进行混合宽度单指令多数据(simd)运算,所述非暂时性计算机可读存储媒体包括simd指令。所述simd指令包括:包括第一位宽源数据元素的至少源向量操作数以及包括第二位宽目的地数据元素的至少目的地向量操作数,其中所述第二位宽是所述第一位宽的一半。源向量操作数包括寄存器对,所述寄存器对包含:包括源数据元素的第一子集的第一寄存器以及包括源数据元素的第二子集的第二寄存器。基于目的地数据元素的顺序次序,所述非暂时性计算机可读存储媒体包含:用于从第一寄存器中的源数据元素的对应第一子集生成偶数编号的目的地数据元素的代码,以及从在第二寄存器中的源数据元素的对应第二子集生成奇数编号的目的地数据元素的代码。
附图说明
呈现附图以辅助描述本发明的各方面且仅仅为了说明而非限制所述方面而提供附图。
图1a到c示出混合宽度simd指令的常规实施方案。
图2a到c示出根据本揭示的各方面的混合宽度simd指令的示范性实施方案。
图3a到b示出进行混合宽度单指令多数据(simd)运算的方法。
图4示出本揭示的一方面可有利地用于其中的示范性无线装置400。
具体实施方式
在以下针对本发明的具体方面的描述和相关图式中揭示本发明的各方面。可在不脱离本发明的范围的情况下设计替代方面。另外,将不会详细描述或将省略本发明的众所周知的元件以免混淆本发明的相关细节。
词语“示范性”在本文中用于意指“充当实例、例子或说明”。本文中描述为“示范性”的任何方面不必解释为比其它方面优选或有利。同样,术语“本发明的各方面”并不要求本发明的所有方面都包含所论述的特征、优点或操作模式。
本文中所使用的术语仅出于描述特定方面的目的,且并不打算限制本发明的各方面。如本文中所使用,单数形式“一(a/an)”和“所述”打算还包含复数形式,除非上下文另外清楚地指示。将进一步理解,术语“包括”和/或“包含”当在本文中使用时指定所叙述的特征、整数、步骤、操作、元件和/或组件的存在,但并不排除一或多个其它特征、整数、步骤、操作、元件、组件和/或其群组的存在或添加。
此外,就待由例如计算装置的元件进行的动作序列来描述许多方面。将认识到,本文中所描述的各种动作可由特定电路(例如,专用集成电路(asic))、由正由一或多个处理器执行的程序指令或由所述两者的组合来进行。另外,本文中所描述的这些动作序列可被视为全部在任何形式的计算机可读存储媒体内体现,在所述计算机可读存储媒体中存储有对应计算机指令集,所述计算机指令集在执行时将致使相关联的处理器进行本文中所描述的功能性。因此,本发明的各种方面可以数个不同形式来体现,预期所有形式属于所要求的主题的范围内。另外,对于本文中所描述的各方面中的每一个,任何此类方面的对应形式可在本文中描述为例如“逻辑被配置成”进行所描述动作。
本揭示的示范性方面涉及混合宽度simd运算的实施方案,其避免跨simd通道的数据移动且减小代码大小。举例来说,示范性方面包含将一或多个向量操作数指定为操作数对(其可就寄存器对来表达)的单条simd指令,而不是将simd操作分解成两条或多于两条分量simd指令(例如,图1a到c中的simd指令100的常规执行)。通过将至少一个向量操作数(源操作数或目的地操作数中的任一个)指定为寄存器对或一寄存器对,所述单条示范性simd指令可用于代替两条或多于两条分量常规simd指令。因此,代码大小减小以实现混合宽度simd运算。
应指出,在本揭示中,对就寄存器来表达的操作数进行引用以便遵循惯例的指令格式,其中指令指定有待在一或多个寄存器上进行的运算。因此,simd指令可具有一定格式,其中对就寄存器来表达的一或多个操作数指定共同运算。因此,根据本揭示的示范性混合宽度simd指令包含就单个寄存器来表达的至少一个向量操作数和就寄存器对来表达的至少另一向量操作数。对寄存器的这些引用可涉及由包括示范性simd指令的程序使用的逻辑或体系结构寄存器。对寄存器的这些引用还可非限制地涉及物理寄存器堆的物理寄存器。大体上,对寄存器的引用意指传达某一大小的存储元件。
因此,在耦合到寄存器堆的处理器中执行混合宽度单指令多数据(simd)运算的示范性方法可包括指定具有包括第一位宽数据元素的至少第一向量操作数以及包括第二位宽数据元素的至少第二向量操作数的simd指令。第一向量操作数可以是源向量操作数且第二向量操作数可以是目的地向量操作数。对应地,源向量操作数的数据元素可被称为源数据元素且目的地向量操作数的数据元素可被称为目的地数据元素。
一一对应存在于示范性混合宽度simd指令中的源数据元素与目的地数据元素之间。大体上,当对源数据元素进行混合宽度simd指令中指定的运算时,生成具体的对应目的地数据元素。举例来说,考虑到混合宽度simd运算以使源向量操作数左移位,从而形成目的地向量操作数。在此实例中,当进行源数据元素的左移位时,每个源数据元素生成具体目的地数据元素。
在本揭示的一个示范性方面中,目的地数据元素的第二位宽可小于源数据元素的第一位宽的大小,且具体地说是后者的一半。在此方面中,目的地向量操作数可表达为一对寄存器且源向量操作数可表示为单个寄存器。
在本揭示的另一示范性方面中,目的地数据元素的第二位宽可大于源数据元素的第一位宽的大小,且具体地说是后者的两倍。在此方面中,源向量操作数可表达为单个寄存器且目的地向量操作数可表达为寄存器对。
为了示出源向量操作数和目的地向量操作数各自的源向量数据元素与向量数据元素之间的具体映射,对向量操作数的数据元素(其数据源数据具有更小位宽)分配顺序次序。举例来说,对表达为单个寄存器的向量操作数的数据元素分配顺序次序。基于顺序次序,对表达为单个寄存器的向量操作数标识偶数编号的数据元素(例如,对应于编号0、2、4、6等)和奇数编号的数据元素(例如,对应于编号1、3、5、7等)。另一向量操作数的寄存器对被称为第一寄存器和第二寄存器,所述第一寄存器和第二寄存器各自包括数据元素的第一子集和第二子集。因此,表达为单个寄存器的向量操作数的偶数编号的数据元素接着分配有与第一子集或第一寄存器的数据元素的对应关系,且奇数编号的数据元素分配有与第二子集或第二寄存器的数据元素的对应关系。以此方式,避免了源数据元素在执行指定simd运算以生成对应目的地数据元素期间跨simd通道的大的数据移动。
示范性方面还可涉及指定多于两个向量操作数(例如包含第三位宽的第三操作数及超过)的simd运算。揭示其中两个源向量操作数的一个实例,对混合宽度simd指令指定表达为单个寄存器的每个源向量操作数以生成表达为寄存器对的目的地向量操作数。众多其它此类指令格式在本揭示的范围内是可能的。为简单起见,将关于操作数的一些实例simd指令和位宽描述用于实施混合宽度simd运算的示范性方面,同时记住这些仅仅是为了解释起见。由此,本文中所论述的特征可扩展到数据元素的任何数目的操作数和位宽以实现混合宽度向量运算。
在图2a到c中,示出关于simd指令200、220和240的示范性方面。这些simd指令200、220和240中的每一个可由被配置成执行simd指令的处理器(例如,图4到5中所示出的处理器402)执行。更具体地说,这些simd指令200、220和240中的每一个可指定一或多个源向量操作数和一或多个目的地向量操作数,其中所述源向量操作数和目的地向量操作数可就寄存器(例如,64位寄存器)来表达。simd指令200、220和240的源向量操作数和目的地向量操作数包含对应源数据元素和目的地数据元素,其中的每一个落在一或多个simd通道下。执行simd指令时simd通道的数目对应于执行simd指令时进行的并行运算的数目。被配置成实施实例simd指令200、220和240的处理器或执行逻辑可因此包含实施由simd指令200、220和240指定的并行运算所需的硬件(例如,包括多个左/右移位器、加法器、乘法器等的算术和逻辑单元(alu))。
因此,参考图2a,示出simd指令200的执行的第一示范性方面。在一个实例中,采用处理器以能够支持64位指令集体系结构(isa)。simd指令200可指定有待对就单个64位寄存器来表达的源向量操作数的源数据元素进行的相同运算或共同指令。
simd指令200中指定的相同运算或共同指令可以是例如根据一常数值等对八个8位源数据元素的平方函数、左移位函数、增量函数、加法(其可运用例如八个8位左移位器、八个8位加法器等逻辑元件实施),所述相同运算或共同指令产生可消耗高达16位存储容量的对应八个所得目的地数据元素。如所示出,simd指令200可指定包括八个8位数据元素的源向量操作数202。可对源向量操作数202的这八个8位数据元素分配数字次序,所述八个8位数据元素由附图标记0到7示出。可使用八个16位目的地数据元素或总共128位来表达simd指令200的无法存储在单个64位寄存器中的结果。将目的地向量操作数指定为分量向量操作数对,而不是将simd指令200分解成两条或多于两条指令以处置此问题(例如,如图1a到c中所示出的simd指令100的常规实施方案中那样)。分量目的地向量操作数对可表达为对应寄存器204x、204y对。应指出,寄存器对无需存储在寄存器堆中的连续物理位置中或甚至具有连续逻辑寄存器编号。由此,simd指令200指定就分量向量操作数或寄存器204x、204y对(例如,64位寄存器对)来表达的目的地向量操作数,以及表达为单个寄存器202的源向量操作数202。
此外,表达为所述对的第一寄存器204x的第一分量目的地向量操作数包含simd指令200的对源向量操作数202的偶数编号的源数据元素0、2、4和6进行的结果的第一子集。这些结果由目的地数据元素a、c、e和g示出,所述目的地数据元素a、c、e和g与偶数编号的源数据元素0、2、4和6具有一一对应关系,这意味着由于目的地数据元素a、c、e和g的此示范性布置中的结果而避免了跨simd通道的大的移动。类似地,表达为所述对的第二寄存器204y的第二分量目的地向量操作数包含simd指令200的对源向量操作数202的奇数编号的源数据元素1、3、5和7进行的结果的第二子集。这些结果由目的地数据元素b、d、f和h示出,所述目的地数据元素b、d、f和h与奇数编号的源数据元素1、3、5和7具有一一对应关系,这同样意味着由于目的地数据元素b、d、f和h的此示范性布置中的结果而避免了跨simd通道的大的移动。因此,在此情况下,源向量操作数202的偶数编号的源数据元素0、2、4和6对应于或生成第一寄存器204x的目的地数据元素a、c、e和g;且源向量操作数202的奇数编号的源数据元素1、3、5和7对应于或生成第二寄存器204y的目的地数据元素b、d、f和h。
考虑到八个8位simd通道(例如,被称为simd通道0到7),其中每个通道包括相应源数据元素0到7,看出生成对应目的地数据元素a到h所包括的移动量包含在相同simd通道或邻近simd通道内。换句话说,源数据元素的第一集合(例如,源数据元素0到7)是在相应simd通道中,且从源数据元素中的每一个在相应simd通道或邻近于相应simd通道的simd通道中生成目的地数据元素(例如,对应目的地数据元素a到h)。举例来说,各自在simd通道0、2、4和6中的偶数编号的源数据元素0、2、4和6生成目的地数据元素a、c、e、和g,所述目的地数据元素a、c、e、和g各自包含在simd通道0到1、2到3、4到5和6到7内。类似地,各自在simd通道0、2、4和6中的奇数编号的源数据元素1、3、5和7生成目的地数据元素b、d、f和h,所述目的地数据元素b、d、f和h也各自包含在simd通道0到1、2到3、4到5和6到7内。
因此,在图2a的第一示范性方面中,混合宽度simd指令200包括指令空间或代码空间的有效使用(由于仅使用一条simd指令而不是两条或多于两条分量simd指令),其实施或执行避免了跨simd通道的大的数据移动。
现在参考图2b,关于混合宽度simd指令220示出另一示范性方面。simd指令220包括两个源向量操作数:表达为单个寄存器222的第一源向量操作数和表达为单个寄存器223的第二源向量操作数,其各自具有四个16位源数据元素的第一集合和第二集合。simd指令220可指定对两个源向量操作数的例如乘法等相同或共同运算(例如,运用四舍五入),其中第一集合的四个16位源数据元素(在寄存器222中)乘以第二集合的对应四个16位源数据元素(在寄存器223中)以产生四个32位结果(其中simd指令220的实施方案可包括例如四个16×16乘法器等逻辑元件)。由于需要128位能够存储这四个32位结果,因此就分量向量操作数对来指定目的地向量操作数:第一分量目的地向量操作数和第二分量目的地向量操作数(这些可对应地表达为第一64位寄存器224x和第二64位寄存器224y)。应指出,simd指令220还可适用于第一集合的源数据元素与第二集合的对应源数据元素的相加,其中对应结果可消耗每个目的地数据元素的多于16位(即使并非全是32位)。
在图2b中,第一和第二集合的源数据元素分配有顺序次序,代表性地各自示出为0、1、2、3和0'、1'、2'、3'。第一寄存器224x中的第一分量目的地向量操作数保留simd指令220的对应于源操作数222和223的偶数编号的源数据元素的结果的第一子集(示出为32位目的地数据元素a和c);且类似地,第二寄存器224y中的第二分量目的地向量操作数保留simd指令220的对应于源操作数222和223的奇数编号的源数据元素的结果的第二子集(示出为32位数据元素b和d)。在此情况下,看出第一源向量操作数222和第二源向量操作数223各自的偶数编号的源数据元素(0、0')和(2、2')生成第一目的地向量操作数224x的数据元素a和c;且第一源向量操作数222和第二源向量操作数223各自的奇数编号的数据元素(1、1')和(3、3')生成第二目的地向量操作数224y的数据元素b和d。
同样,在图2b的第二示范性方面中看出,混合宽度simd指令220通过利用单条混合宽度simd指令而不是两条或多于两条分量simd指令来实现代码空间效率。此外,还看出在此方面中也最小化了跨simd通道的移动。大体上,源数据元素的第一集合和源数据元素的第二集合在相应simd通道中,且从第一集合的源数据元素中的每一个和第二集合的源数据元素中的对应一个在相应simd通道或邻近于相应simd通道的simd通道中生成目的地数据元素。举例来说,考虑到各自包括源数据元素的第一集合0到3(或源数据元素的第二集合0'到3')的四个16位simd通道0到3,第一和第二的源数据元素的用以生成对应目的地数据元素a到d的数据移动包含在相同simd通道且最多邻近simd通道内(例如,各自在simd通道0和2中的偶数编号的源数据元素(0、0')和(2、2')在simd通道0到1和2到4中生成目的地数据元素a和c;且类似地,各自在simd通道1和3中的奇数编号的源数据元素(1、1')和(3、3')在simd通道0到1和2到4中生成目的地数据元素b和d)。
图2c表示关于混合宽度simd指令240的第三示范性方面。不同于混合宽度simd指令200和220,混合宽度simd指令240的源向量操作数被指定为分量向量操作数对或表达为一寄存器对。应指出,混合宽度simd指令240不同于混合宽度simd指令220,原因是混合宽度simd指令220包含两个单独源向量操作数,其中一个源向量操作数的数据元素被指定为与另一源向量操作数的数据元素交互(例如,相乘)。另一方面,在混合宽度simd指令240中,指定分量源向量操作数对,原因是如果不这样做将会消耗两条单独指令。举例来说,simd指令240可包括有待对八个16位源数据元素进行的从16位到8位的右移位函数的共同运算以便获得八个8位目的地数据元素的结果(其中simd指令240的实施方案可包括例如八个8位右移位器等逻辑元件)。然而,由于八个16位源数据元素消耗128位,因此常规实施方案将使用两条分量simd指令分离有待进行的此运算。另一方面,在图2c的示范性方面中,包括第一寄存器242x中的第一分量源向量操作数和第二寄存器242y中的第二分量源向量操作数的源向量操作数对由simd指令240指定。因此,代码空间得以有效地使用。
目的地向量操作数在此情况下表达为单个64位寄存器244且包括是simd指令240的结果的八个8位目的地数据元素。因此,对寄存器244中的目的地向量操作数的目的地数据元素分配顺序次序,所述目的地数据元素由附图标记0到7示出。分量源向量操作数对(表达为寄存器对242x、242y)的源数据元素被布置成使得包括源数据元素的第一子集a、c、e和g的第一寄存器242x将生成各自对应于寄存器244中的目的地向量操作数的偶数编号的目的地数据元素0、2、4和6的结果;且包括源数据元素的第二子集b、d、f和h的第二寄存器242y将生成各自对应于寄存器244中的目的地向量操作数的奇数编号的目的地数据元素1、3、5和7的结果。
因此,通过指定分量源向量操作数对或将源向量操作数表达为寄存器对,可有效地利用代码空间且可最小化跨simd通道的数据移动,即使在源向量操作数比目的地向量操作数更宽的情况下也同样如此。还最小化了在执行simd指令240时跨simd通道的移动。大体上,看出目的地数据元素是在相应simd通道中,且从源数据元素在相应simd通道或邻近于相应simd通道的simd通道中生成目的地数据元素中的每一个。举例来说,考虑到八个8位simd通道对应于八个目的地数据元素0到7,看出源数据元素a、c、e和g将各自从通道0到1、2到3、4到5和6到7移动以生成对应于simd通道中的偶数编号的目的地数据元素0、2、4和6的结果;且源数据元素b、d、f和h将各自从simd通道0到1、2到3、4到5和6到7移动以生成对应于simd通道中的偶数编号的目的地数据元素1、3、5和7的结果。在任一情况下,移动包含在两个simd通道内。
因此,应了解,各方面包含用于进行本文中所揭示的过程、功能和/或算法的各种方法。举例来说,如图3a中所示出,一方面可包含例如根据图2a到b的进行混合宽度单指令多数据(simd)运算的方法300。
在块302中,方法300包含由处理器(例如,图4的处理器402,其将在下文解释)且例如参考图2a接收simd指令(例如,simd指令200),所述simd指令包括:包括第一位宽(例如,8位)源数据元素的第一集合(例如,源数据元素0到7)的至少第一源向量操作数(在寄存器202中);以及包括第二位宽(例如,16位)目的地数据元素(例如,目的地数据元素a到h)的至少目的地向量操作数(例如,在寄存器对204x、204y中),其中所述第二位宽是所述第一位宽的两倍,其中所述目的地向量操作数包括寄存器对,所述寄存器对包含:包括目的地数据元素的第一子集(例如,目的地数据元素a、c、e、g)的第一寄存器(例如,204x)以及包括目的地数据元素的第二子集(例如,目的地数据元素b、d、f、h)的第二寄存器。
在块303(其示出包含块304和306)中,方法300进一步包含在处理器中执行混合宽度simd指令。具体地说,考虑到在块304中对源数据元素分配的顺序次序(例如,0到7),块306包含在处理器中执行simd指令。进一步详细地,块306由可并行进行的分量块306a和306b组成。
块306a包含从第一集合的偶数编号的源数据元素(例如,源数据元素0、2、4、6)生成第一寄存器(例如,第一寄存器204x)中的目的地数据元素的第一子集(例如,目的地数据元素a、c、e、g)。
块306b包含从第一集合的奇数编号的源数据元素(例如,源数据元素1、3、5、7)生成第二寄存器(例如,第二寄存器204y)中的目的地数据元素的第二子集(例如,目的地数据元素b、d、f、h)。
大体上,方法300的simd指令可以是第一集合的源数据元素根据一常数值的平方函数、左移位函数、递增或加法中的一个。在方法300中通过利用单条simd指令来实现代码空间效率。在方法300中还最小化了跨simd通道的移动,其中源数据元素的第一集合是在相应simd通道中,且方法300包含从源数据元素中的每一个(例如,simd通道0中的源数据元素0)在相应simd通道(例如,simd通道0)或邻近于相应simd通道的simd通道(例如,simd通道1)中生成目的地数据元素(例如,目的地数据元素a)。
还将指出,尽管未单独示出,但方法300还可包含用于实施图2b的simd指令220的方法,所述方法进一步包括例如在块302中接收第二源向量操作数,所述第二源向量操作数包括第一位宽源数据元素的第二集合(例如,寄存器222和223中的第一和第二源向量操作数),且源数据元素的第一集合的顺序次序对应于源数据元素的第二集合的顺序次序。在此情况下,基于块304中所分配的顺序次序,块306包含在处理器中执行simd指令,所述块306包括:块306a,其用于从第一集合的偶数编号的源数据元素和第二集合的偶数编号的源数据元素生成第一寄存器中的目的地数据元素的第一子集;以及块306b,其用于从第一集合的奇数编号的源数据元素和第二集合的偶数编号的源数据元素生成第二寄存器中的目的地数据元素的第二子集。在此情况下,simd指令可以是第一集合的源数据元素与第二集合的对应源数据元素的相乘或相加,其中所述源数据元素的第一集合和源数据元素的第二集合是在相应simd通道中,且从第一集合的源数据元素中的每一个和第二集合的源数据元素中的对应一个在相应simd通道或邻近于相应simd通道的simd通道中生成目的地数据元素。
参考图3b,示出用于进行本文中所揭示的过程、功能和/或算法的另一方法。举例来说,如图3b中所示出,方法300包含例如根据图2c的进行混合宽度单指令多数据(simd)运算的另一方法。
在块352中,方法350包含由处理器(例如,处理器402)接收simd指令(例如,simd指令240),所述simd指令包括:包括第一位宽(例如,16位)源数据元素(例如,源数据元素a到h)的至少源向量操作数(例如,在寄存器242x、242y中);以及包括第二位宽(例如,8位)目的地数据元素(例如,目的地数据元素0到7)的至少目的地向量操作数(例如,在寄存器244中),其中所述第二位宽是所述第一位宽的一半,其中所述源向量操作数包括寄存器对,所述寄存器对包含:包括源数据元素的第一子集(例如,目的地数据元素0、2、4、6)的第一寄存器(例如,第一寄存器242x)以及包括源数据元素的第二子集(例如,目的地数据元素1、3、5、7)的第二寄存器(例如,第二寄存器242y)。
在块354中,对目的地数据元素分配顺序次序,且在块356中执行simd指令。块356包含也可并行进行的子块356a和356b。
块356a包含从第一寄存器中的源数据元素的对应第一子集(例如,源数据元素a、c、e、g)生成偶数编号的目的地数据元素(例如,目的地数据元素0、2、4、6)。
块356b包含从第二寄存器中的源数据元素的对应第二子集(例如,源数据元素b、d、f、h)生成奇数编号的目的地数据元素(例如,目的地数据元素1、3、5、7)。
在示范性方面中,方法350的simd指令可以是源数据元素的右移位函数,其中目的地数据元素是在相应simd通道(例如,simd通道0到7)中,且从源数据元素(例如,源数据元素a)在相应simd(例如,simd通道0)或邻近于相应simd通道的simd通道(例如,simd通道1)中生成目的地数据元素中的每一个(例如,目的地数据元素0)。
参考图4,根据示范性方面的无线装置400的特定说明性方面的块图。无线装置400包含处理器402,所述处理器402可被配置成(例如,包含执行逻辑)例如各自根据图3a的方法300和图3b方法350支持和实施示范性混合宽度simd指令的执行。如图4中所示出,处理器402可与存储器432通信。处理器402可包含寄存器堆(未示出),所述寄存器堆保持对应于寄存器(例如,逻辑寄存器)的物理寄存器,就所述物理寄存器来表达示范性simd指令的操作数。在一些方面中,寄存器堆可供应有来自存储器432的数据。尽管未示出,但一或多个高速缓存或其它存储器结构还可包含在无线装置400中。
图4还示出耦合到处理器402和显示器428的显示控制器426。编解码器(dodec)434(例如,音频和/或语音codec)可耦合到处理器402。还示出例如无线控制器440(其可包含调制解调器)等其它组件。扬声器436和麦克风438可耦合到编解码器434。图4还指示无线控制器440可耦合到无线天线442。在特定方面中,处理器402、显示控制器426、存储器432、编解码器434和无线控制器440包含在封装内系统或芯片上系统装置422中。
在特定方面中,输入装置430和电力供应器444耦合到芯片上系统装置422。此外,在特定方面中,如图4中所示出,显示器428、输入装置430、扬声器436、麦克风438、无线天线442和电力供应器444在芯片上系统装置422的外部。然而,显示器428、输入装置430、扬声器436、麦克风438、无线天线442和电力供应器444中的每一个可耦合到芯片上系统装置422的组件(例如接口或控制器)。
应指出,尽管图4描绘无线通信装置,但处理器402和存储器432还可集成到机顶盒、音乐播放器、视频播放器、娱乐单元、导航装置、个人数字助理(pda)、固定位置数据单元、通信装置或计算机中。此外,无线装置400的至少一或多个示范性方面可集成在至少一个半导体裸片中。
所属领域的技术人员将了解,可使用多种不同技术和技艺中的任一种来表示信息和信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示在整个上文描述中可能参考的数据、指令、命令、信息、信号、位、码元和芯片。
此外,所属领域的技术人员将了解,结合本文中所揭示的各方面而描述的各种说明性逻辑块、模块、电路和算法步骤可实施为电子硬件、计算机软件或两者的组合。为清晰地说明硬件与软件的此可互换性,上文已大体上就其功能性来描述了各种说明性组件、块、模块、电路和步骤。此类功能性是实施为硬件还是软件取决于特定应用和强加于整个系统的设计约束。熟练的技术人员可针对每个特定应用以不同方式来实施所描述的功能性,但这样的实施决策不应被解释为会引起脱离本发明的范围。
结合本文中所揭示的方面描述的方法、序列和/或算法可直接以硬件、以由处理器执行的软件模块或以硬件和软件模块的组合来体现。软件模块可驻留在ram存储器、快闪存储器、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom,或所属领域中已知的任何其它形式的存储媒体中。示范性存储媒体耦合到处理器,使得处理器可从存储媒体读取信息并将信息写入到存储媒体。在替代方案中,存储媒体可与处理器成整体。
因此,本发明的一方面可包含电脑可读媒体(例如,非暂时性计算机可读存储媒体),其体现用于实施混合宽度simd指令的方法(例如,根据上文所描述的方法300和350,用于实施图2a到c的simd指令)。因此,本发明不限于所说明的实例,且任何用于执行本文中所描述的功能性的装置包含在本发明的各方面中。
虽然前述揭示内容示出本发明的说明性方面,但应指出,在不脱离如所附权利要求书界定的本发明的范围的情况下,可在其中做出各种改变和修改。无需以任何特定次序来进行根据本文中所描述的本发明的各方面的方法权利要求的功能、步骤和/或动作。此外,尽管可以单数形式描述或主张本发明的元件,但除非明确陈述限于单数,否则也涵盖复数形式。