首页> 中国专利> 向量处理器中的条件性操作

向量处理器中的条件性操作

摘要

本文中公开用于在向量处理器中存储或加载条件性运算的真和/或假结果的索引的向量索引寄存器。所述向量索引寄存器中的每一者存储用于在各种类型的运算中存取操作数向量中的多个位置的多个地址。

著录项

  • 公开/公告号CN113841117A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 美光科技公司;

    申请/专利号CN202080036707.1

  • 发明设计人 S·J·沃勒克;

    申请日2020-04-17

  • 分类号G06F9/30(20060101);G06F9/355(20060101);G06F15/80(20060101);

  • 代理机构11287 北京律盟知识产权代理有限责任公司;

  • 代理人王龙

  • 地址 美国爱达荷州

  • 入库时间 2023-06-19 13:48:08

说明书

本申请案要求2019年5月20日申请且标题为“向量处理器中的条件性操作(CONDITIONAL OPERATIONS IN A VECTOR PROCESSOR)”的第16/417,508号美国专利申请案的优先权,所述美国专利申请案的全部公开内容特此以引用的方式并入本文中。

技术领域

一般来说,本文中所公开的至少一些实施例涉及向量处理器。而且,本文中所公开的至少一些实施例涉及存储用于存取向量的地址的向量处理器中的寄存器。

背景技术

向量处理器可为或包含实施含有指令的指令集的中央处理单元(CPU),所述指令对通常被称为向量的数据阵列进行操作。这与标量处理器不同,其中指令对单个数据项进行操作。与标量处理器相比,向量处理器可极大地提高对某些工作负载的性能,尤其是数值模拟和类似任务。向量处理器出现在20世纪70年代初期,且其中,大部分超级计算设计历经20世纪70年代到20世纪90年代。如标量处理器设计的更常规微处理器设计的性价比迅速下降,从而导致向量处理器的研发和制造较少。

一般来说,常规CPU(例如,基于标量的CPU)一次至多能够操纵几个数据片段。举例来说,此类CPU具有基本上提供将A相加到B且将结果存储在C中的指令。通常通过按某一地址传递到持有用于A、B和C的数据的存储器位置而指向所述数据。解码这个地址且从存储器中获得数据会花费一些时间,在此期间CPU可处于空闲状态以等待所请求的数据出现。

为缩短由这些步骤消耗的时间量,更现代的CPU使用一种称为指令流水线的技术,在所述指令流水线中指令依次通过数个子单元。第一子单元读取地址并解码所述地址,下一个子单元获取那些地址处的值,且下一个子单元自身进行数学运算。利用管线化,CPU甚至在第一指令已经离开CPU之前就开始解码下一个指令,这与装配生产线类似。以此方式,地址解码器和其它所提及的部分同时且不断地处于使用中。由于管线化,任何指令都要花费相同的时间量来完成。

向量处理器通过如下操作改进了管线化:并非仅管线化指令,而是此类处理器还管线化数据本身。因此,并非向量处理器必须不断地解码指令,然后获取完成指令所需的数据,而是向量处理器从存储器读取单个指令。这允许解码时间缩短和功率消耗减少(例如,用向量处理器进行一次解码,而非多次解码)。

向量处理器以及如常用标量处理器的其它类型的处理器包含用于在运行程序或运算期间修改操作数地址的索引寄存器。通常使用索引,且索引有益于进行向量或阵列运算。索引寄存器的内容可与立即地址相加或相减以形成实际数据或操作数的有效地址。通常,指令可测试索引寄存器,且如果测试失败,那么指令可重置循环的开始。一些指令集允许使用多个索引寄存器。

一般来说,已知使用标量寄存器来进行索引。换句话说,已知使用标量索引寄存器。然而,存在与使用标量寄存器来进行索引相关联的许多限制。并且,这些限制中的一些可抑制使用索引寄存器的处理器的性能。举例来说,为了存取操作数向量的多个位置,需要递增标量索引寄存器,且每个递增都需要由处理器单独加载以用于存取操作数向量。

附图说明

根据下文提供的具体实施方式和本公开的各种实施例的附图将更加充分地理解本公开。

图1说明根据本公开的一些实施例的实例计算装置100的实例部分。

图2说明根据本公开的一些实施例的实例计算装置200的实例部分。

图3说明根据本公开的一些实施例的包含向量索引寄存器302的实例系统300。

图4说明根据本公开的一些实施例的包含向量索引寄存器402a、402b和402c的实例系统400。

图5说明根据本公开的一些实施例的包含向量索引寄存器502和向量第一寄存器503的实例系统500。

图6说明根据本公开的一些实施例的用于存取操作数向量的元素的方法600的实例操作。

图7说明根据本公开的一些实施例的用于压缩操作数向量的元素的方法700的实例操作。

图8说明根据本公开的一些实施例的包含用于压缩存储在输入OVR 804中的输入操作数向量的元素的向量索引寄存器802的实例系统800。

图9说明根据本公开的一些实施例的用于扩展操作数向量的元素(例如,经压缩操作数向量的元素)的方法900的实例操作。

图10说明根据本公开的一些实施例的关于对多个经压缩向量的操作的方法1000的实例操作。

图11说明根据本公开的一些实施例的用于构建编索引向量以存储在针对比较的真(TRUE)和假(FALSE)结果(例如,“0”和“1”结果)的向量索引寄存器(VIR_TRUE和VIR_FALSE)中的方法1100的实例操作。

图12说明根据本公开的一些实施例的用于构建编索引向量以存储在VIR_TRUE1202a和VIR_FALSE 1202b中的实例系统1200。

图13说明根据本公开的一些实施例的用于构建组合编索引向量以存储在针对比较的TRUE和FALSE结果的组合向量索引寄存器(VIR_combined)中的方法1300的实例操作。

图14说明根据本公开的一些实施例的用于构建组合编索引向量以存储在VIR_combined 1402中的实例系统1400。

图15说明根据本公开的一些实施例的包含VIR_TRUE 1502a和VIR_FALSE 1502b的实例系统1500。

图16说明根据本公开的一些实施例的用于根据VIR_TRUE压缩操作数向量的元素的方法1600的实例操作。

图17说明根据本公开的一些实施例的包含用于压缩存储在输入OVR 1704中的输入操作数向量的元素的VIR_TRUE 1702a的实例系统1700。

图18和19各自说明根据本公开的一些实施例的用于构建编索引向量以存储在针对条件性测试运算的TRUE和FALSE结果(例如,“0”和“1”结果)的向量索引寄存器(VIR_TRUE和VIR_FALSE)中的实例操作。

图20说明根据本公开的一些实施例的用于构建编索引向量以存储在VIR_TRUE2002a和VIR_FALSE 2002b中的实例系统2000。

图21和22说明根据本公开的一些实施例的用于根据VIR_TRUE和VIR_FALSE(或VIR_COMBINED的TRUE区段和FALSE区段)来对操作数向量的元素执行运算的方法2100的实例操作。

图23说明根据本公开的一些实施例的包含VIR_TRUE和VIR_FALSE的实例系统2200,所述VIR_TRUE和所述VIR_FALSE用于对存储于输入操作数向量寄存器中的输入操作数向量的元素执行第一运算和第二运算。

图24说明根据本公开的一些实施例的包含VIR_COMBINED的TRUE区段和FALSE区段的实例系统2300,所述TRUE区段和所述FALSE区段用于对存储于输入操作数向量寄存器中的输入操作数向量的元素执行第一运算和第二运算。

图25说明根据本公开的一些实施例的包含VIR_TRUE和VIR_FALSE的实例系统2400,所述VIR_TRUE和所述VIR_FALSE用于并行地对存储于输入操作数向量寄存器中的输入操作数向量的元素执行第一运算和第二运算。

具体实施方式

一般来说,本文中所公开的至少一些实施例涉及向量处理器。而且,本文中所公开的至少一些实施例涉及存储用于存取向量的地址的向量处理器中的寄存器。并且,本文中所公开的实施例中的至少一些为向量处理器中的向量索引寄存器,所述向量索引寄存器各自存储多个地址以用于存取向量中的多个位置。

已知在向量处理器中使用标量索引寄存器来通过在向量运算期间改变存储在标量索引寄存器中的值来参考向量的多个位置。然而,通过使用向量索引寄存器来索引一或多个操作数向量的多个位置,标量索引寄存器可以被替换,且至少可避免标量索引寄存器中的值在向量运算期间的连续改变。这仅为本文中所描述的技术问题的技术解决方案的一个实例。

标量或单条目寄存器可存储索引i,所述索引允许向量寄存器上的操作在元素i处开始,或操作可在元素零处开始。操作的后续部分存取每一增量处的元素0+1或i+1。作为旁注,使用存储索引i的单条目寄存器可用于向量第一运算和编索引,其在某一程度上也在本文中公开。

然而,存在与使用标量寄存器或单条目向量来编索引相关联的许多限制。并且,这些限制中的一些可抑制使用索引寄存器的向量处理器的性能。举例来说,为了存取操作数向量的多个位置,需要递增标量或单条目索引寄存器,且每个递增都需要由向量处理器单独加载以用于存取操作数向量。

通过使用向量索引寄存器来索引一或多个操作数向量的多个位置,标量索引寄存器可以被替换,且至少可避免标量索引寄存器在向量运算期间的连续改变

一般来说,本文中所公开的实施例至少针对本申请的背景部分和其它部分中所提及的技术问题以及本文中未描述但所属领域的技术人员认识到的其它技术问题提供具体技术解决方案。

在一些实施例中,向量索引寄存器(VIR)可为使用选择性索引的向量运算存储地址分量。这在某种程度上类似于向量第一处理或编索引。举例来说,使用选择性索引,VIR可存储地址部分i_1、i_2、…、i_n。这允许对向量寄存器的运算移动通过输入向量的元素i_1、i_2、…、i_n,而非输入向量的i、i+1、i+2、…、i+n。举例来说,使用选择性索引,VIR可存储非依序地址部分i_1、i_3、…、i_8。这允许对向量寄存器的运算移动通过输入向量的非依序元素。

VIR的用途有很多。举例来说,VIR可用于更有效地实施向量压缩或扩展功能。举例来说,当向量比较操作产生所选元素的索引向量时,所选分量可加载于VIR中,所述VIR可用于在压缩向量的产生中进行寻址。VIR中的元素(或VMX(i)中的元素)为用于存取向量V(i)中的非连续元素的地址分量。替代经由单条目索引向量存取V(i),其中对于每一迭代,i=i+1,向量处理器可依序存取V(VMX(i)),其中对于每一迭代,i=+1。而且,以此方式,分量仅从VIR加载一次以供向量处理器使用。如果使用单条目索引向量,例如使用向量第一寄存器,那么输入向量中的元素由开始于单条目索引向量中的值的计数器寻址。为了使用单条目索引寄存器,从索引寄存器依序加载每一地址。再次,通过VIR,存储在VIR中的每个地址或地址分量仅同时加载一次。这对于使用VIR的向量处理器产生显著性能提升。

在一些实施例中,计数器(例如,计数器寄存器)可驱动VIR。而且,多路复用器(例如,N:1多路复用器(即,多输入单输出多路复用器))可用于在计数器的输出之间选择性地切换,以产生输出以对于每一向量迭代存取操作数寄存器的特定位置,或产生来自VIR的索引以对于计数器的每一迭代存取操作数寄存器的特定位置。

本文中所公开的前述特征和其它特征可用于条件性操作。举例来说,本文中所公开的电路中的一者可产生一或多个索引向量,而非产生向量掩码寄存器以用于对向量进行条件性操作。接着,使用索引向量,可分别经由对应VIR评估向量掩码寄存器的分支。VIR加速由向量处理器进行的处理,因为向量掩码不需要产生或反复地产生,且掩码的分量不需要在每次迭代中单独地加载。

此类功能性还可用于向量扩展操作和/或将向量运算的结果合并到向量寄存器中。举例来说,VIR可用于在运算B(VMX(i))=A(i)中编索引,其中“B(VMX(i)”为扩展压缩向量A。而且,VIR可用于在运算B(VMX(i))=A(i)+a中编索引,其中“B(VMX(i)”为扩展压缩向量A,且将标量值“a”相加到扩展向量A。而且,VIR可用于在运算B(VMX(i))=函数(A(VMX(i)),C(VMX(i))中编索引,其中处理器针对经由VIR选择的标记为“VMX”的元素对向量A及C执行运算。这是条件性处理的实例,且还可用于嵌套式条件性处理。

可将存储在VIR(例如,用于存取操作数向量寄存器(OVR)内的元素的[2,4,5,8])中的索引值或寻址分量转换为存储器地址(例如,基地址加上每个存储器单元的增量)。因此,可将本文中所描述的输出,例如本文中所描述的多路复用器的输出转换为存储器地址,以用于以与存取操作数向量寄存器(OVR)类似的方式直接存取主存储器中的向量。

图1说明根据本公开的一些实施例的实例计算装置100的实例部分。如图所示,装置100可以通信方式耦合到一或多个网络112。装置100包含根据本公开的一些实施例的向量处理器102。装置100还包含至少一个总线104、主存储器106、数据存储系统108以及网络接口110。总线104以通信方式耦合向量处理器102、主存储器106、数据存储系统108以及网络接口110。装置100包含计算机系统,所述计算机系统至少包含经由总线104(其可包含多个总线)彼此通信的向量处理器102、主存储器106(例如,只读存储器(ROM)、快闪存储器、如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)的动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)等)以及数据存储系统108。

换句话说,图1是具有计算机系统的实例装置100的框图,在所述计算机系统中可操作本公开的实施例。在一些实施例中,计算机系统可包含指令集,用于在被执行时致使机器执行本文所论述的方法中的任何一种或多种。在此类实施例中,机器可连接(例如,经由网络接口110联网)到LAN、内联网、外联网和/或因特网(例如,网络112)中的其它机器。所述机器还可作为对等(或分布式)网络环境(例如,本文中所描述的对等网络)中的对等机器或作为云计算基础架构或环境中的服务器或客户端机器在客户端-服务器网络环境中的服务器或客户端机器的容量中操作。

向量处理器102表示根据本公开的一些实施例的一或多个向量处理器。向量处理器102可包含微处理器、中央处理单元或类似物。更具体地说,向量处理器102可包含复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器或实施其他指令集的处理器,或实施指令集的组合的处理器,只要所述处理器使用:向量指令、向量寄存器、向量优先和多通道配置即可。向量处理器102也可为一或多个专用处理装置,例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、图形处理单元(GPU)、网络处理器等。向量处理器102可经配置以执行指令以用于进行本文中所论述的运算和步骤。向量处理器102可进一步包含例如网络接口110的网络接口装置以通过一或多个通信网络(如网络112)通信。

数据存储系统108可包含机器可读存储媒体(也称为计算机可读媒体)且可体现本文中所描述的方法或功能中的一或多种的至少一些方面,所述机器可读存储媒体上存储有一或多个指令集或软件。数据存储系统108可包含非易失性存储装置。指令也可在其由计算机系统执行期间完全或至少部分地驻留在主存储器106内和/或向量处理器102内,主存储器106和向量处理器102也可构成机器可读存储媒体。虽然存储器、向量处理器以及数据存储装置部分在实例实施例中展示为各自作为单个部分,但每个部分都应被认为包含可存储指令并且进行其相应运算的单个部分或多个部分。术语“机器可读存储媒体”还应被认为包含能够存储或编码供机器执行的指令集合且致使机器执行本公开的方法中的任何一种或多种的任何媒体。因此,应认为术语“机器可读存储媒体”包含但不限于固态存储器、光学媒体和磁性媒体。

图2说明根据本公开的一些实施例的实例计算装置200的实例部分。如图所示,计算装置200包含向量处理器102以及总线104和主存储器106(例如,见图1)。计算装置200还可为或包含计算装置100。

如图2中所展示,向量处理器102包含向量寄存器202、标量寄存器204、总线206、算术逻辑单元208(ALU 208)以及向量加载存储单元210。计算装置200的其它实施例可包含标量寄存器204,所述标量寄存器204位于向量处理器102外部或位于向量处理器的与向量处理器中具有向量寄存器202的单元分离的单元中。总线206以通信方式耦合向量寄存器202、标量寄存器204、算术逻辑单元(ALU)208以及向量加载存储单元210,且此类分量可经由总线206(其可包含多个总线)彼此通信。向量寄存器202包含多个向量寄存器。并且,ALU 208包含多个ALU——例如算术逻辑单元(ALU)0、ALU 1以及ALU N。

向量处理器102包含至少一个向量索引寄存器。向量处理器102可为或包含实施指令的一或多个中央处理单元(CPU),所述指令对称作向量的一维数据数组进行操作。

向量处理器102中的向量寄存器202可包含操作数向量寄存器(即,输入向量寄存器)、结果向量寄存器(即,输出向量寄存器)以及向量索引寄存器,所述向量索引寄存器存储用于存取操作数向量寄存器和/或结果向量寄存器中的元素的值。操作数向量寄存器和/或结果向量寄存器的所存取元素中的值可用作如ALU 208中的一或多个的ALU的输入。

一般来说,向量处理器102可包含索引寄存器,所述索引寄存器可包含标量索引寄存器和向量索引寄存器,如图3、4和5中所说明的向量索引寄存器。

向量处理器102的标量寄存器204可包含标量索引寄存器以及操作数标量寄存器(即,输入标量寄存器)和结果标量电阻器(即,输出标量寄存器)。标量寄存器中的至少一些可为对标量和向量的许多不同类型的运算提供索引和控制值。而且,标量寄存器还可提供由向量指令使用的数值。举例来说,由向量寄存器提供的向量可乘以由标量寄存器提供的标量。

标量寄存器204和向量寄存器202中的至少一些可连接到ALU 208的相应ALU。ALU208中的ALU可包含对整数二进制数进行算术和按位运算的组合数字电子电路。在向量处理器102中,如果输出向量寄存器正在操作中提供反馈,那么ALU 208中的ALU可连接到输入向量寄存器,且在一些情况下连接到输出向量寄存器。在此类情况下,输出向量寄存器是输入向量和输出向量两者。

而且,标量寄存器204可包含可编程标量寄存器。可使用可编程标量寄存器,使得由向量寄存器(例如,向量寄存器202中的一个)提供的向量可对由可编程标量寄存器中的一个提供且被编程为可编程标量寄存器中的一个的标量进行操作。举例来说,运算中的一个可包含向量乘以标量值(例如,向量A(i)×标量p)。

所描绘的总线206可配置成以通信方式耦合向量加载存储单元210、向量寄存器202、标量寄存器204以及算术逻辑单元208。总线206可包含2:1多路复用器、3:1多路复用器或N:1多路复用器,所述多路复用器配置成从向量索引寄存器接收输入且输出用于存取操作数向量的地址或地址分量(例如,见图3、4和5)。

向量加载存储单元210包含用于执行加载和存储指令、产生加载和存储向量运算的地址并且从存储器加载数据或将所述数据从向量处理器102的寄存器存储回存储器的电路系统。向量加载存储单元210可执行本文中所描述的许多运算,包含图6到10中的方法600、700、900以及1000的许多运算。

本文中所描述的计算装置中的每一个可为能够(依序或以其它方式)执行指定待由所述机器采取的动作的指令集的机器。另外,虽然针对图1和2的所说明计算装置中的每一者说明单个机器,但术语“机器”还应被认为包含单独地或联合地执行一(或多个)指令集以进行本文中所论述的方法或运算中的任何一或多个的机器的任何集合。并且,所说明的计算装置中的每一个可各自包含至少总线和/或主板、一或多个控制器(例如一或多个CPU)、可包含临时数据存储装置的主存储器、至少一种类型的网络接口、可包含永久性数据存储装置的存储系统,和/或其任何组合。

在论述图3、4和5中所描绘的系统300、400和500之前,重要的是理解,可使用来自向量索引寄存器(VIR)或另一类型的寄存器(例如计数器寄存器)的至少一索引来寻址向量寄存器中的元素。一般来说,当使用计数器寄存器时,计数器针对DO或FOR循环中的每一迭代或步骤将1加到其自身,从而为下一迭代或步骤产生地址。VIR不必由计数器驱动,但其可用于使VIR由计数器驱动。共同计数器既可驱动VIR,又可向接收多路复用器提供单独输入,所述接收多路复用器输出用于存取向量运算中的操作数向量的地址分量。

举例来说,VIR可存储向量VMX,其中VMX(i)且i=0、1、…、n-1。VIR的用途的简单应用实例将为压缩运算,例如B(i)=A(VMX(i))。而且,当另一向量寄存器存储向量A时,A的元素是A(i),其中i=0、1、2、…、n。在常规模式下(如当选择计数器输出以供多路复用器使用时),处理器可进行A+a,其中“a”是从计数器经由多路复用器的定标器。将结果存储在输出向量寄存器B中,其中B(i)=A(i)+a,且其中i=0、1、…、n-1。在使用VIR的模式下(例如,对多路复用器的替代选择控制),处理器可通过使用从VIR的输出产生的地址进行A(VMX)+a。因此,输出向量寄存器具有B,其中B(i)=A(VMX(i))+a,且其中i=0、1、…、n-1。而且,例如,向量处理器可配置成对两个向量进行操作,例如B(i)=函数(A(VMX(i)),C(VMX(i)),其中“函数”经由ALU实施。

图3说明根据本公开的一些实施例的包含向量索引寄存器302的实例系统300。

系统300可为向量处理器102(例如,见图1或2)或多个向量处理器的一部分。系统300包含向量索引寄存器302(VIR 302)、计数器寄存器304、2:1多路复用器306和连接到多路复用器的选择寄存器308。VIR 302可为图2中所示的向量寄存器202中的一者。计数器寄存器304和选择寄存器308可为标量寄存器204中的寄存器。2:1多路复用器306可为图2中所示的总线206或图1中所示的总线104的一部分。

系统300可为包含多个算术逻辑单元(ALU)中的算术逻辑单元(ALU)的向量处理器的部分。向量处理器还可包含多个操作数向量寄存器(OVR)中的操作数向量寄存器。OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。

VIR 302可经配置以存储对应于OVR中的多个位置的多个地址分量。每一地址分量可添加到用于存取OVR中的对应位置的有效地址。OVR的每一位置可包含待由ALU操作的操作数向量的元素。

在一些实施例中,实例OVR的长度可为64位。如果操作数小于64位(例如,32位整数),那么操作数可右调齐。在此类实例中,类似地应用本文中所描述的编索引技术。举例来说,OVR可包含在其元素中填充以适应不同数据类型。

如图所示,计数器寄存器304为系统300的部分。计数器寄存器304还可为具有系统300的向量处理器的一部分。计数器寄存器304可经配置以存储计数310。计数310可添加到用于存取OVR的有效地址,或计数可由向量处理器使用以对存储于VIR 302中的多个地址分量进行迭代。

如图所示,2:1多路复用器306为系统300的部分。2:1多路复用器306还可为具有系统300的向量处理器的一部分。2:1多路复用器306可经配置以接收来自计数器寄存器304的计数310和来自VIR 302的输出312作为输入。来自VIR 302的输出312可包含VIR的多个地址分量中对应于计数310的一个地址分量。2:1多路复用器306还可经配置以接收模式值314作为选择输入。模式值314可为或包含用于选择计数310的值或用于选择来自VIR 302的输出312的值。2:1多路复用器306还可经配置以根据所接收的模式值314选择计数310或来自VIR302的输出312。2:1多路复用器306还可经配置以经由总线(例如,图1或2的总线中的一者)输出且传达选择输出316,所述选择输出为所选计数或来自VIR的所选输出中的一者。选择输出316可传达到存取用于ALU的OVR的请求器。请求器可为向量处理器的向量加载存储单元(例如,见图2中所示的向量加载存储单元210)或另一向量处理器的向量加载存储单元。

当请求器是向量加载存储单元时,其可经配置以产生向量处理器的加载和存储操作的有效地址。向量加载存储单元还可经配置以针对VIR的每一地址分量将VIR的地址分量添加到用于存取OVR中的对应位置的有效地址。

图4说明根据本公开的一些实施例的包含向量索引寄存器402a、402b和402c的实例系统400。

系统400可为向量处理器102(例如,见图1或2)或多个向量处理器的一部分。系统400包含多个向量索引寄存器,其包含向量索引寄存器402a、402b和402c(VIR 402a、402b和402c)。系统400还包含计数器寄存器404、N:1多路复用器406和连接到多路复用器的选择寄存器408。VIR 402a、402b和402c可为图2中所示的向量寄存器202中的向量寄存器。计数器寄存器404和选择寄存器408可为标量寄存器204中的寄存器。N:1多路复用器406可为图2中所示的总线206或图1中所示的总线104的一部分。N:1多路复用器406为如所展示可接收至少四个输入的多路复用器。但是,在一些实施例中,多路复用器406可接收远多于四个输入。N:1多路复用器406输出可为用于存取操作数向量寄存器(OVR)的地址分量的一个输出。

系统400可为包含ALU ALU的向量处理器的部分。向量处理器还可包含OVR中的OVR。OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。

VIR 402a、402b和402c各自可经配置以存储对应于例如OVR中的多个位置或三个单独OVR的多个地址分量。在具有多个OVR的实例中,可存在用于每一OVR的单独多路复用器。而且,在具有多个OVR的实例中,对于每一OVR,可存在单独的寻址系统,例如系统300。多个VIR(例如,VIR 402a、402b和402c)的每个地址分量可添加到用于存取OVR中的对应位置或多个OVR的有效地址。OVR的每一位置可包含待由ALU操作的操作数向量的元素。

如图所示,计数器寄存器404为系统400的部分。计数器寄存器404还可为具有系统400的向量处理器的一部分。计数器寄存器404可经配置以存储计数410。计数410可添加到用于存取一或多个OVR的有效地址,或计数可由向量处理器使用以对存储于多个VIR(例如,VIR 402a、402b及402c)中的多个地址分量进行迭代。

如图所示,N:1多路复用器406为系统400的部分。N:1多路复用器406还可为具有系统400的向量处理器的一部分。N:1多路复用器406可经配置以接收来自计数器寄存器404的计数410和来自多个VIR(例如,VIR 402a、402b及402c)的输出(例如,输出412a、412b及412c)作为输入。来自VIR 402a、402b和402c的输出412a、412b和412c各自可包含相应VIR的多个地址分量中对应于计数410的一个地址分量。N:1多路复用器406还可经配置以接收模式值414作为选择输入。模式值414可为或包含用于选择计数410的值,或例如用于选择来自VIR 402a、402b和402c的输出412a、412b和412c的值。N:1多路复用器406还可经配置以根据所接收的模式值414选择计数410或来自VIR 402a、402b和402c的输出412a、412b和412c。N:1多路复用器406还可经配置以经由总线(例如,图1或2的总线中的一者)输出且传达选择输出416,所述选择输出为所选计数或来自VIR的所选输出中的一者。选择输出416可传送到存取用于ALU或多个ALU的OVR或多个OVR的请求器。请求器可为向量处理器的向量加载存储单元(例如,见图2中所示的向量加载存储单元210)或另一向量处理器的向量加载存储单元。当请求器是向量加载存储单元时,其可经配置以产生向量处理器的加载和存储操作的有效地址。向量加载存储单元还可经配置以针对VIR的每一地址分量将地址分量添加到用于存取OVR中的对应位置的有效地址。

在一些实施例中,具有多个VIR的向量处理器可包含计数器,所述计数器经配置以存储计数,且所述计数可添加到用于存取OVR的有效地址,或其中所述计数用于对存储于VIR中的每一相应多个地址分量进行迭代。在此类实例中,处理器还可包含N:1多路复用器,所述N:1多路复用器经配置以接收来自计数器的计数和来自VIR的相应输出作为输入。来自VIR中的给定VIR的每一输出可包含给定VIR的多个地址分量中对应于所述计数的一个地址分量。所述多路复用器还可经配置以接收模式值作为选择输入。所述模式值可为用于选择计数的值或用于选择来自VIR的相应输出中的一者的值。所述多路复用器还可经配置以根据所接收的模式值选择计数或来自VIR的相应输出中的一者。所述多路复用器还可经配置以将所选计数或来自VIR的相应输出中的一个所选输出传达到存取用于ALU的OVR的请求器(例如,例如向量处理器的向量加载存储单元)。

图5说明根据本公开的一些实施例的包含向量索引寄存器502的实例系统500。

系统500可为向量处理器102(例如,见图1或2)或多个向量处理器的一部分。系统500包含向量索引寄存器502(VIR 502)、计数器寄存器504、3:1多路复用器506和连接到多路复用器的选择寄存器508。系统500还包含连接到多路复用器506的向量第一寄存器503。VIR 502可为图2中所示的向量寄存器502中的一者。计数器寄存器504、选择寄存器508及向量第一寄存器503(VFR 503)可为标量寄存器204中的寄存器。3:1多路复用器506可为图2中所示的总线206或图1中所示的总线104的一部分。

系统500可为包含多个算术逻辑单元(ALU)中的算术逻辑单元(ALU)的向量处理器的部分。向量处理器还可包含多个操作数向量寄存器(OVR)中的操作数向量寄存器。OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。VIR 502可经配置以存储对应于OVR中的多个位置的多个地址分量。每一地址分量可添加到用于存取OVR中的对应位置的有效地址。OVR的每一位置可包含待由ALU操作的操作数向量的元素。

VFR 503可经配置以存储单地址分量511。单地址分量511为基于单地址分量511在OVR的初始位置处引导OVR的初始存取以使得所存取的初始位置不是OVR的第一位置的地址分量。举例来说,如果VFR 503存储标量“3”,那么在OVR的向量运算期间最初存取OVR的第四位置。这替代在OVR的第一位置(例如,OVR(0))处开始存取OVR。

如图所示,计数器寄存器504为系统500的部分。计数器寄存器504还可为具有系统500的向量处理器的一部分。计数器寄存器504可经配置以存储计数510。计数510可添加到用于存取OVR的有效地址,或计数可由向量处理器使用以对存储于VIR 502中的多个地址分量进行迭代。而且,计数510可由向量处理器使用以递增VFR 503的单地址分量511,或如图所示,其可添加到单地址分量511,且计数510与单地址分量511的求和是向量第一地址分量513。

如图所示,3:1多路复用器506为系统500的部分。3:1多路复用器506还可为具有系统500的向量处理器的一部分。3:1多路复用器506可经配置以接收来自计数器寄存器504的计数510和来自VIR 502的输出512以及VFR 503与计数器504的输出的总和的向量第一地址分量513作为输入。来自VIR 502的输出512可包含VIR的多个地址分量中对应于计数510的一个地址分量。3:1多路复用器506还可经配置以接收模式值514作为选择输入。模式值514可为或包含用于选择计数510的值或用于选择来自VIR 502的输出512的值或用于选择VFR503与计数器504的输出的总和的向量第一地址分量513的值。3:1多路复用器506还可经配置以根据所接收的模式值514选择计数510或来自VIR 502的输出512或向量第一地址分量513。3:1多路复用器506还可经配置以经由总线(例如,图1或2的总线中的一者)输出和传达选择输出516,其为所选计数或来自VIR的所选输出或向量第一地址分量513中的一者。选择输出516可传达到存取用于ALU的OVR的请求器。请求器可为向量处理器的向量加载存储单元(例如,见图2中所示的向量加载存储单元210)或另一向量处理器的向量加载存储单元。当请求器是向量加载存储单元时,其可经配置以产生向量处理器的加载和存储操作的有效地址。向量加载存储单元还可经配置以针对VIR的每一地址分量将VIR的地址分量添加到用于存取OVR中的对应位置的有效地址。

在一些实施例中,具有至少一个VIR的向量处理器还可包含至少一个VFR以及连接到VIR和VFR的至少一个相应计数器。计数器可经配置以存储计数。计数可相加到用于存取OVR的有效地址。计数可用于递增向量第一地址分量,或计数用于对存储于VIR中的多个地址分量进行迭代。向量处理器还可包含3:1多路复用器,所述3:1多路复用器经配置以接收来自计数器的计数、来自VFR的输出和来自VIR的输出作为输入。来自VIR的输出可包含VIR的多个地址分量中对应于计数的一个地址分量,且向量第一地址分量也可对应于计数。所述多路复用器可经配置以接收模式值作为选择输入。模式值可为用于选择计数的值、用于选择来自VFR的输出的值或用于选择来自VIR的输出的值。多路复用器可经配置以根据所接收的模式值选择计数、来自VFR的输出或来自VIR的输出,且将所选计数、来自VFR的所选输出或来自VIR的所选输出传达到存取用于ALU的OVR的请求器(例如,例如向量处理器的向量加载存储单元)。

未在图3到5中展示,所述系统可包含用于VIR中的每一VIR的相应向量长度寄存器。每一相应向量长度寄存器可经配置以存储存储于对应VIR中的向量的长度。举例来说,系统300可包含经配置以存储存储于VIR中的向量的长度的向量长度寄存器(VLR)。VLR可用于利用VIR用于向量运算中的地址产生的一些操作中。

在一些实施例中,计数器的输出与替代地址候选项的输出的求和结果可与VIR的输出和/或计数器多路复用(例如,见图5中的向量第一地址分量513,其为计数器504的输出与存储于VFR 503中的单地址分量511的总和)。或者,替代地址候选项(例如,存储于VFR503中的地址分量)可用于设置计数器的初始值。在替代实施例中,由替代地址候选项设置的计数器是与驱动VIR的计数器分开的计数器。

在一些实施例中,具有系统300、400或500中的一者的向量处理器可进一步包含经配置以产生向量处理器的加载和存储操作的有效地址的向量加载存储单元。向量加载存储单元还可经配置以针对VIR的每一地址分量将VIR的地址分量添加到用于存取OVR中的对应位置的有效地址。VLR中的有效地址和值可由一些向量运算使用以增强操作的性能。

在一些实施例中,连接到系统300、400或500中的一者的向量加载存储单元经配置以加载存储于OVR中的操作数向量并且加载存储于标量寄存器中的标量。此向量加载存储单元还可经配置以将所加载操作数向量的元素与所加载的标量进行比较,并且根据所述比较将所加载操作数向量的元素的位置存储在VIR中。举例来说,向量加载存储单元还可经配置以存储与标量匹配的元素的位置、存储大于标量的元素的位置或存储大于或等于标量的元素的位置。而且,举例来说,向量加载存储单元可经配置以存储为偶数的元素的位置,且不存储为奇数的那些元素,或反之亦然。

连接到系统300、400或500中的一者的向量加载存储单元还可经配置以从VIR加载所加载操作数向量的元素的所存储位置。并且,向量加载存储单元可经配置以根据存储于VIR中的所加载位置在所加载操作数向量的元素上迭代向量运算。

在一些实施例中,向量运算为经配置以将所加载操作数向量的元素存储到对应于存储在VIR中的所加载位置的输出OVR中的压缩运算。

在一些实施例中,向量加载存储单元可经配置以从输出OVR加载所存储的元素,且接着根据存储于VIR中的所加载位置在来自输出OVR的所存储元素上迭代第二向量运算。第二向量运算可为经配置以根据存储于VIR中的所加载位置将来自输出OVR的元素存储到第二输出OVR的位置处的第二输出OVR中的扩展运算。扩展运算还可进一步经配置以将标量在第二输出OVR的其它位置处存储到第二输出OVR中。

在一些实施例中,向量加载存储单元可经配置以根据存储于第二VIR中的所加载位置在第二所加载操作数向量的元素上迭代第二压缩运算。在此类实施例中,向量加载存储单元可经配置以将第二所加载操作数向量的元素存储到对应于存储在第二VIR中的所加载位置的第二输出OVR中。并且,向量加载存储单元可经配置以使用来自第一输出OVR和第二输出OVR的元素执行一或多个向量运算。

在一些实施例中,向量加载存储单元可经配置以使用来自第一输出OVR和/或第二输出OVR的元素和存储于第三OVR中的第三操作数向量的元素来执行一或多个向量运算,所述第三操作数向量依序存取且不通过VIR的编索引而产生。所述运算的结果可依序存储于第四OVR中。

如所提及,系统300、400和500可为一或多个向量处理器的一部分。系统300、400和500还可为一或多个向量处理器的较大系统的子系统。

举例来说,系统300、400和500可包含于另一系统中或连接到一或多个向量处理器的另一系统。此系统也可不为向量处理器的一部分。

本文中还公开可包含多个ALU中的ALU的系统。所述系统还可包含多个操作数向量寄存器(OVR)中的OVR。OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。所述系统还可包含多个向量索引寄存器(VIR)中的VIR。VIR可经配置以存储对应于OVR中的多个位置的多个地址分量。每一地址分量可添加到用于存取OVR中的对应位置的有效地址。并且,OVR的每一位置可包含待由ALU操作的操作数向量的元素。

所述系统还可包含计数器(或计数器寄存器)。计数器可经配置以存储计数。计数至少可相加到用于存取OVR的有效地址,或用于对存储于VIR中的多个地址分量进行迭代。

所述系统还可包含N:1多路复用器。换句话说,所述系统可包含具有多个输入和一个输出的多路复用器。N:1多路复用器可经配置以至少接收来自计数器的计数和来自VIR的输出作为输入。来自VIR的输出可包含VIR的多个地址分量中对应于计数的一个地址分量。N:1多路复用器还可经配置以接收模式值作为选择输入,所述模式值至少为用于选择计数的值或用于选择来自VIR的输出的值。N:1多路复用器还可经配置以至少根据所接收的模式值选择计数或来自VIR的输出。N:1多路复用器还可经配置以将选择输出且传达到存取用于ALU的OVR的向量加载存储单元。

在一些实施例中,计数还可用于递增用于存取OVR的标量索引寄存器的地址分量。在此类实例中,N:1多路复用器可进一步经配置以至少接收来自计数器的计数、来自VIR的输出和来自标量索引寄存器的输出作为输入。N:1多路复用器还可进一步经配置以接收模式值作为选择输入,所述模式值至少为用于选择计数的值、用于选择来自VIR的输出的值,或用于选择来自标量索引寄存器的输出的值。N:1多路复用器还可进一步经配置以根据所接收的模式值至少选择计数、来自VIR的输出或来自标量索引寄存器的输出。

在一些实施例中,标量索引寄存器可为向量第一寄存器(VFR)。VFR可经配置以存储向量第一地址分量。向量第一地址分量可为基于向量第一地址分量在OVR的初始位置处引导OVR的初始存取以使得所存取的初始位置不是OVR的第一位置的地址分量。VFR可用于基于存储于VFR中的值来最初在OVR的任何位置处存取OVR。

在一些实施例中,计数还可用于在存储于VIR中的第二VIR中的多个地址分量上进行迭代。在此类实例中,N:1多路复用器可进一步经配置以至少接收来自计数器的计数、来自VIR的输出和来自第二VIR的输出作为输入。而且,N:1多路复用器可进一步经配置以接收模式值作为选择输入,所述模式值至少为用于选择计数的值、用于选择来自VIR的输出的值,或用于选择来自第二VIR的输出的值。并且,N:1多路复用器可经配置以根据所接收的模式值至少选择计数、来自VIR的输出或来自第二VIR的输出。

图6到10说明根据本公开的一些实施例的实例操作。在一些实施例中,例如向量加载存储单元210的向量加载存储单元可单独地或与向量处理器的其它部分组合地执行或促进图6到10中所说明的操作中的许多或全部。在一些实施例中,本文中所描述的值的存储、加载、确定、递增和改变可由向量处理器的向量加载存储单元根据存储于向量加载存储单元中的指令执行。在一些其它实施例中,向量处理器的其它部分可执行或促进图6到10中所说明的操作以及本文中所描述的其它操作。

一般来说,本文中所描述的系统可实施许多功能,包含向量压缩和扩展功能。举例来说,在存储于VIR中的地址分量列表(例如VMX)中,给定向量A的元素可通过从向量A读出元素A(VMX(i))且存储到输出向量B(i)中来压缩为新向量。因此,通过B(i)=A(VMX(i))(对于i=0,1,…n)将向量A压缩为B。类似地,可反向进行扩张(例如,B(VMX(i))=A(i))。另外,一或多个VIR可允许向量处理器在具有或不具有压缩和/或扩展的情况下直接执行稀疏操作。举例来说,VIR可在B(i)=函数(A(VMX(i)),C(VMX(i))中实施编索引,其可为具有压缩的稀疏操作。而且,VIR可在B(VMX(i))=函数(A(VMX(i)),C(VMX(i))中实施编索引,其可为不具有压缩的稀疏操作。而且,VIR可在B(VMX(i))=函数(A(i),C(i))中实施编索引,其可为具有扩展的对经压缩向量的操作。

图6说明根据本公开的一些实施例的用于存取用于一或多个向量运算的操作数向量的元素的方法600的实例操作。

在图6中,方法600开始于步骤602,其中将待用作向量处理器中的多个算术逻辑单元(ALU)中的算术逻辑单元(ALU)的向量运算的输入的操作数向量的元素存储于向量处理器中的多个操作数向量寄存器(OVR)中的操作数向量寄存器(OVR)中。将操作数向量的元素存储在OVR中可在其用作ALU的向量运算的输入之前的任何时间发生。举例来说,步骤602可在步骤618之后发生。

方法600在步骤604处继续,其中将对应于OVR中的多个位置的多个地址分量存储在向量处理器中的多个向量索引寄存器(VIR)中的向量索引寄存器(VIR)中。

方法600在步骤606处继续,其中根据计数(例如,存储于计数器寄存器中的计数)在存储于VIR中的多个地址分量上进行迭代以提供输出。随后,向量加载存储单元将来自VIR的输出相加到用于存取OVR的有效地址。来自VIR的输出可包含VIR的多个地址分量中对应于计数的一个地址分量。每当向量加载存储单元请求来自VIR的输出以用于将VIR的输出相加到用于存取OVR的有效地址时,可发生根据计数在存储于VIR中的多个地址分量上的单次迭代。这可重复地发生,直到VIR已经迭代遍历OVR上的操作。

方法600在步骤608处继续,其中通过向量处理器的N:1多路复用器至少接收来自计数器的计数和来自VIR的输出,其中来自VIR的输出可包含VIR的多个地址分量中对应于计数的一个地址分量。

方法600在步骤610处继续,其中通过N:1多路复用器接收包含模式值的选择输入,所述模式值至少为用于选择计数的值或用于选择来自VIR的输出的值。

方法600在步骤612处继续,其中通过N:1多路复用器根据所接收的模式值至少选择计数或来自VIR的输出。

在步骤614处,将所述选择传达到存取用于ALU的OVR的向量处理器的向量加载存储单元。

方法600在步骤616处继续,其中将存储在计数器中的计数相加到用于存取OVR的有效地址。

方法600在步骤618处继续,其中将VIR的地址分量相加到用于存取OVR中的对应位置的有效地址。OVR的每一位置可包含待由ALU操作的操作数向量的元素。

方法600在步骤620处继续,其中通过向量加载存储单元根据在步骤616或618处所产生的有效地址存取用于ALU的OVR。

图7说明根据本公开的一些实施例的用于压缩操作数向量的元素的方法700的实例操作。在图7中,方法700在步骤702处开始,其中通过向量加载存储单元加载存储于输入OVR中的输入操作数向量。

方法700在步骤704处继续,其中通过向量加载存储单元加载存储于计数器寄存器中的计数。

方法700在步骤706处继续,其中通过向量加载存储单元根据计数从VIR加载所加载输入操作数向量的元素的存储位置。

方法700在步骤708处继续,其中根据来自VIR的加载位置在所加载输入操作数向量的元素上运行向量压缩运算。步骤708包含步骤710,其包含方法700以如下操作继续:将所加载输入操作数向量的元素存储到对应于来自VIR的加载位置的输出OVR中。

方法700在步骤712处继续,其中将计数与表示VIR的向量长度的值(即,VL)进行比较,使得可针对存储于VIR中的位置中的每一者在输入OVR上迭代向量压缩运算。当计数等于VIR的向量长度时,方法700结束。当计数小于VIR的向量长度时,则方法700在714处以使计数递增而继续,且接着返回到步骤704(加载存储于计数器寄存器中的计数),随后为步骤706(通过向量加载存储单元根据计数从VIR加载所加载输入操作数向量的元素的所存储位置)和708(根据来自VIR的加载位置在所加载输入操作数向量的元素上运行向量压缩运算)。这样,在针对存储于VIR中的位置中的每一者的输入OVR上迭代向量压缩运算。

图8说明根据本公开的一些实施例的包含用于压缩存储在输入OVR 804中的输入操作数向量的元素的向量索引寄存器802(VIR 802)的实例系统800。实例系统800是可至少实施方法700的系统的一个实例。

在图8中,VIR 802存储输入OVR 804的位置列表(例如,作为输入OVR的第一元素的“2”,和作为输入OVR的第二元素的“4”)。在此所说明实例中,展示向量处理器运行向量压缩运算的两个循环或迭代。在第一迭代处,计数器806输出计数“0”,其为在第一循环处存储于计数器中的值。在第一循环中,VIR 802展示为输出“2”。多路复用器808在如由处于正常模式操作中的计数器806所指定的地址分量(“0”)或如由处于VIR操作模式(或在此特定实例中,压缩运算模式)中的VIR 802所指定的地址分量(“2”)之间进行选择。当在第一循环中通过多路复用器808选择VIR(或压缩模式)时,来自VIR 802的输出“2”是用于存取输入OVR804的地址分量。结果,针对输入OVR的位置“2”处的元素“C”的输出存取输入OVR 804。通过存储于计数器806中的计数直接寻址输出OVR 810。由于计数器806的计数在第一循环中为“0”,所以输出ORV 810将“C”存储为其第一元素。在下一迭代或循环中,输出ORV 810将“E”在输出OVR的位置“1”处存储为第二元素。在展示两个循环的此实例中,将具有元素{A,B,C,D,E}的输入OVR 804压缩为具有元素{C,E}的输出OVR 810。

而且,参考图8,如果用于输入/输出向量的地址信号经反转,那么可将{C,E}扩展为具有元素{x,x,C,x,E}的第二输出OVR,其中x为压缩运算之前的现有值或选自标量寄存器的标量值(例如,见图9,其为以来自标量寄存器的标量值扩展经压缩向量的实例方法)。

另外,如果来自VFR的值相加到计数器的计数,那么可使用求和,使得输入OVR上的运算的第一迭代发生在输入OVR的另一位置而非输入OVR的第一位置处(例如,输入OVR 804的第一位置标记为“0”)。例如,见图5。或者,VFR可用于提供计数寄存器的输入,使得在向量运算开始时计数寄存器的初始值为存储于VFR中的值。此类选项允许向量初次处理。

图9说明根据本公开的一些实施例的用于扩展操作数向量的元素(例如,经压缩操作数向量的元素)的方法900的实例操作。

如图9所示,方法900可以方法700开始,其以输出存储于输出OVR中的经压缩操作数向量结束。接下来,方法900在步骤902处继续,其中通过向量加载存储单元从输出OVR加载所存储的元素。所存储的元素为经压缩向量的元素。

方法900在步骤904处继续,其中根据存储于VIR中的加载位置在来自输出OVR的所存储元素上迭代第二向量运算。第二运算为向量扩展运算。换句话说,为向量扩展运算的第二向量运算扩展存储于输出OVR中的经压缩向量。

方法900在步骤906处继续,其中根据扩展运算,将来自输出OVR的元素根据存储于VIR中的加载位置在第二输出OVR的位置处存储到第二输出OVR中。

方法900在步骤908处继续,其中根据扩展运算在第二输出OVR的其它位置处将标量存储到第二输出OVR中。扩展运算在步骤908之后的最终输出为具有来自经压缩向量的元素的经扩展向量和在经扩展向量的其它位置处的标量值的一或多个例子。来自经扩展向量中的经压缩向量的元素的定位对应于存储于VIR中的加载位置或地址分量。

图10说明根据本公开的一些实施例的关于对多个经压缩向量的操作的方法1000的实例操作。

如图10所示,方法1000可以方法700开始,其以输出存储于输出OVR中的经压缩操作数向量结束。而且,对第二操作数向量执行类似于方法700的操作。举例来说,方法1000在步骤1002处继续,其中根据存储于第二VIR中的加载位置在第二所加载操作数向量的元素上迭代第二压缩运算。

方法1000在步骤1004处继续,其中将第二所加载操作数向量的元素存储到对应于存储于第二VIR中的加载位置的第二输出OVR中。

方法1000在步骤1006处继续,其中使用来自第一输出OVR和第二输出OVR的元素执行一或多个向量运算。所述一或多个向量运算使用来自两个经压缩向量的元素,其为来自第一输出OVR和第二输出OVR的元素。

如本文中所提及,本文中所公开的实施例中的至少一些为向量处理器中的向量索引寄存器,所述向量索引寄存器各自存储多个地址以用于存取向量中的多个位置。另外,本文中所公开的实施例中的至少一些为用于一或多个比较(例如数值比较)的TRUE和/或FALSE结果的向量索引寄存器,其各自存储用于存取操作数向量中的多个位置的多个地址。

而且,如本文中所提及,已知在向量处理器中使用标量索引寄存器来通过在向量运算期间改变存储在标量索引寄存器中的值来参考向量的多个位置。然而,通过使用向量索引寄存器(VIR)(例如,用于TRUE结果的VIR或用于FALSE结果的VIR)来对一或多个操作数向量的多个位置编索引,可替换标量索引寄存器,且可至少避免在使用TRUE和/或FALSE结果的向量运算期间标量索引寄存器中的值的连续改变。

如本文中所提及,存在与使用标量寄存器或单条目向量来对向量编索引相关联的许多限制。并且,这些限制中的一些可抑制使用标量索引寄存器的向量处理器的性能。通过使用向量索引寄存器(例如,用于TRUE结果的VIR或用于FALSE结果的VIR)来对用于向量比较运算或其它类型的运算中的一或多个操作数向量的多个位置编索引,可替换标量索引寄存器,且可至少避免在向量运算期间标量索引寄存器的连续改变。

在一些实施例中,当计算TRUE和FALSE元素的向量(例如,向量掩码Vm的内容)时,系统或电路可产生索引向量以补充或替换所述向量。索引向量可用于TRUE结果或FALSE结果或其组合,且这些类型的索引向量可存储于相应向量索引寄存器VIR_TRUE、VIR_FALSE和VIR_COMBINED中。VIR_COMBINED为包含TRUE区段和FALSE区段的单个VIR。

VIR_TRUE、VIR_FALSE和/或VIR_COMBINED可包含向量掩码(Vm)或对应OVR中的元素。Vm为存储对向量的比较(例如对向量的数值比较)的TRUE和FALSE结果的向量。Vm可用于条件性运算以及压缩和扩展运算。用于Vm的向量寄存器可由VIR_TRUE、VIR_FALSE和/或VIR_COMBINED替换。并且,当向量处理器执行向量运算时,VIR_TRUE、VIR_FALSE和/或VIR_COMBINED可增加向量处理器在替换Vm中的性能。

举例来说,计数器可用于跟踪Vm的计算中的TRUE元素的数目,以零开始。当第i个TRUE元件被识别为Vm的第j元素的结果时,索引j保存到向量VmxT的第i元素中(且存储于VIR_TRUE中)。类似地,计数器可用于跟踪FALSE结果,且将FALSE结果的索引保存于向量VmxF中(且存储于VIR_FALSE中)。VmxT与VmxF的向量长度的总和等于Vm的向量长度。向量过程可使用Vi作为向量,其中第i元素具有值I以产生VmxT和VmxF,其中VmxT=压缩(Vi,Vm)且VmxF=压缩(Vi,!Vm)。

存储或加载于VIR_TRUE或VIR_FALSE中的经压缩索引或地址向量VmxT和/或VmxF可用于条件性运算和/或用于压缩和扩展运算(例如本文中所描述的压缩和扩展运算)。在能够存取具有经压缩索引的向量或地址向量的情况下,此类运算可直接在所述向量上运行而不必在例如寄存器等中间向量寄存器上产生经压缩向量以用于迭代遍历Vm。

如本文中所提及,VIR(例如VIR_TRUE或VIR_FALSE)的用途有很多。举例来说,VIR_TRUE或VIR_FALSE可用于更有效地实施向量压缩或扩展功能。

图11说明根据本公开的一些实施例的用于构建编索引向量以存储在针对比较的TRUE和FALSE结果(例如,“0”和“1”结果)的向量索引寄存器中的方法1100的实例操作。

方法1100在步骤1102处开始,其中通过向量处理器的向量加载存储单元加载存储于操作数向量寄存器(OVR)中的操作数向量。

方法1100在步骤1104处继续,其中通过向量加载存储单元加载存储于向量处理器的标量寄存器中的标量。

方法1100在步骤1106处继续,其中通过向量处理器根据存储于计数器中的计数将所加载操作数向量的元素与所加载的标量进行比较。计数器可为另一标量寄存器,且可为向量处理器的一部分。而且,在一些实施例中,方法1100可继续:通过向量处理器根据存储于计数器中的计数将所加载操作数向量的元素与另一操作数向量进行比较。在一些实施例中,为进行所述比较,所加载操作数向量的元素由向量处理器根据第一计数器中的第一计数加以存取,且另一所加载操作数向量的元素由向量处理器根据第二计数器中的第二计数加以存取。所述比较可为数值比较。

方法1100在步骤1108处继续,其中识别步骤1106的比较的结果是TRUE还是FALSE(例如,“1”或“0”)。如果在步骤1106中的比较的结果为TRUE,那么方法1100在步骤1110a处继续,其中根据计数(例如根据计数,经由存储于TRUE计数器中的TRUE计数-例如见图12中描绘的TRUE计数器1216a)将所加载操作数向量的元素的位置存储在用于比较的TRUE结果的向量索引寄存器(VIR_TRUE)中。如果步骤1106的比较的结果为FALSE,那么方法1100在步骤1110b处继续,其中根据计数(例如根据计数,经由存储于FALSE计数器中的FALSE计数-例如见图12中描绘的FALSE计数器1216b)将所加载操作数向量的元素的位置存储在用于比较的FALSE结果的向量索引寄存器(VIR_FALSE)中。

方法1100在步骤1112处继续,其中识别计数是否等于存储于OVR中的操作数向量的向量长度(VL)。在一些实施例中,方法1100可继续,其中识别OVR的VL是否等于将VIR_TRUE的VL与VIR_FALSE的VL相加的结果,这可为识别计数是否等于存储于OVR中的操作数向量的VL的另一方式。识别计数是否等于OVR的VL的这些实例替代方式可展示比较OVR的所有元素。如果计数小于VL,那么方法在步骤1114处继续,其中使计数递增。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。换句话说,方法1100继续根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。

在步骤1112处,如果计数等于VL,那么方法1100已完成用于存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建。计数无法大于VL,因为构建编索引向量的操作在计数等于VL时完成。当构建新的编索引向量时,计数复位,且存储VL的标量值的VL寄存器可同样复位。向量处理器可最初确定OVR的向量长度,且接着在执行方法1100之前将所述长度存储于VL寄存器中。

在完成存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建后,方法1100在步骤1116处继续,其中通过向量加载存储单元从VIR_TRUE或VIR_FALSE或其组合中的至少一者加载所加载操作数向量的元素的存储位置。并且,方法1100在步骤1118处继续,其中根据加载位置在所加载操作数向量的元素上迭代一或多个向量运算。

图12说明根据本公开的一些实施例的用于构建编索引向量以存储在VIR_TRUE1202a和VIR_FALSE 1202b中的实例系统1200。系统1200可实施方法1100的许多运算和方面,且系统1200可为一或多个向量处理器的部分。

系统1200包含VIR_TRUE 1202a和VIR_FALSE 1202b,例如在方法1100的描述中描述的VIR_TRUE和VIR_FALSE。系统还包含OVR 1204,例如在方法1100的描述中描述的OVR。

系统1200还包含标量寄存器(SR)1206,例如在方法1100的描述中描述的标量寄存器。在一些实施例中,标量寄存器可用以与OVR 1204相同的方式寻址的另一OVR替换。

所述系统还包含计数器1208,所述计数器可由计数器寄存器部分地实施且可为在对方法1100的描述中所描述的计数器。

系统1200还包含比较器1210,所述比较器可执行存储于SR 1206中的值与存储于OVR 1204的元素中的值的比较。比较器1210可执行比较,例如OVR(i)SR,OVR(i)≤SR,或OVR(i)≥SR。比较器1210一次或每循环比较两个数字。在每次迭代i(其还表示地址或地址分量i)时,计数器1208提供用于存取OVR 1204以由比较器1210与来自SR 1206的标量值进行比较的地址ⅰ。简单地说,将迭代或地址i处的OVR 1204的输出与来自标量寄存器1206的值进行比较。比较器1210产生单一输出,其为TRUE或FALSE(例如,“1”或“0”)。

比较器1210可经配置以执行方法1100的步骤1106处的比较。换句话说,比较器1210可经配置以根据存储于计数器寄存器中的计数将所加载操作数向量的元素与所加载的标量进行比较。比较器1210还可经配置以执行步骤1108处的TRUE或FALSE结果的识别。换句话说,比较器1210可经配置以识别步骤1106的比较的结果为TRUE还是FALSE。比较器1210可经配置以输出TRUE或FALSE结果,例如针对TRUE结果的“1”或针对FALSE结果的“0”。比较器1210的输出输入到VIR_TRUE 1202a和VIR_FALSE 1202b中的每一者的相应写入启用件中。

来自比较器1210的输出可直接传达到用于VIR_TRUE 1202a的写入启用件1212a。来自比较器1210的输出可经由反相器1214间接地传达到用于VIR_FALSE 1202b的写入启用件1212b。反相器1214经配置以在比较器1210的输出到达用于VIR_FALSE 1202b的写入启用件1212b之前使其反相。举例来说,如果比较器1210的输出为TRUE(例如,“1”),那么当将所述输出输入到反相器1214中时,反相器使值反相为FALSE(例如,“0”)且输出FALSE。

系统1200还包含用于VIR_TRUE 1202a的单独TRUE计数器1216a和用于VIR_FALSE1202b的单独FALSE计数器1216b。比较器1210的输出驱动两个计数器,即计数器1216a和1216b。计数器1216a和1216b与为OVR 1204提供地址的计数器1208分离。TRUE计数器1216a的输出用作用于存取VIR_TRUE 1202a的地址。FALSE计数器1216b的输出用作用于存取VIR_FALSE 1202b的地址。

举例来说,当比较器1210的输出为TRUE时,输出触发写入启用件1212a将来自OVR1204的当前位置写入到VIR_TRUE 1202a中。当比较器1210的输出为FALSE时,输出触发写入启用件1212b将来自OVR 1204的当前位置写入到VIR_FALSE 1202b中。经由包含反相器1214以及两个写入启用件1212a和1212b的电路提供这种功能性。

计数器1208的输出用作待于由TRUE计数器1216a指定的地址处写入到VIR_TRUE1202a中的地址或地址分量。这在比较器1210的输出为TRUE时发生。对于从比较器1210输出的每一触发TRUE,存储在计数器TRUE 1216a中的值增大一。计数器1208的输出用作待于由FALSE计数器1216b指定的地址处写入到VIR_FALSE 1202b中的地址或地址分量。这在比较器1210的输出为FALSE时发生。对于从比较器1210输出的每一触发FALSE,存储在FALSE计数器1216b中的值增大一。选择在何处存储OVR分量的地址的此总体功能性由包含比较器1210、写入启用件1212a和1212b、反相器1214以及TRUE计数器1216a和FALSE计数器1216b的电路提供。

VIR_TRUE 1202a和VIR_FALSE 1202b各自为系统1200的输出寄存器。VIR_TRUE1202a具有三个输入。第一输入来自写入启用件1212a。举例来说,来自此第一输入的输入TRUE允许写入到VIR_TRUE 1202a中,且FALSE不允许写入到寄存器中。第二输入来自TRUE计数器1216a,其用于存取VIR_TRUE 1202a的地址。第三输入来自计数器1208,且此输入包含在由TRUE计数器1216a提供的寄存器的地址处写入到VIR_TRUE 1202a中的数据(或第二输入)。

系统1200可为包含向量加载存储单元的向量处理器的部分。向量加载存储单元可将存储于系统1200的寄存器中的数据加载到主存储器并且将数据从主存储器存储到系统的寄存器,且反之亦然(将存储于存储器中的数据加载到系统1200的寄存器,并且将数据从系统的寄存器存储到存储器)。

系统1200还展示为包含针对向量长度的标量寄存器:向量长度寄存器1224(VLR1224)。VLR 1224经配置以存储OVR 1204的向量长度(VL)。向量处理器可将VL从VLR 1224加载到存储器中,以识别来自计数器1208的计数是否等于存储于OVR 1204中的操作数向量的VL。这是例如实施图11中的方法1100的步骤1112的一种方式。如果计数小于VL,那么计数器1208中的计数继续按时脉循环或另一触发或迭代递增(例如,见步骤1114)。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储OVR 1204的元素的位置,直到OVR的元素的位置存储在VIR_TRUE 1202a或VIR_FALSE 1202b中。换句话说,方法1200可继续根据计数来存储OVR 1204的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE 1202a或VIR_FALSE 1202a中。这是系统1200可实施方法1100的操作的方式中的一者。

如果计数等于VL,那么使用系统1200的向量处理器已完成用于存储在VIR_TRUE1202a和VIR_FALSE 1202b中的编索引向量的构建。计数无法大于VL,因为构建编索引向量的操作在计数等于VL时完成。当构建新的编索引向量时,计数在计数器1208中复位,且VL被确定且存储于VLR 1224中。向量处理器可最初确定OVR(例如,OVR 1204)的向量长度,且接着在执行方法1100之前将其存储于VLR 1224中。

在完成存储在VIR_TRUE 1202a和VIR_FALSE 1202b中的编索引向量的构建后,向量处理器可继续通过处理器的向量加载存储单元从VIR_TRUE或VIR_FALSE或其组合中的至少一者加载OVR 1204的元素的存储位置。并且,向量处理器还可继续根据在VIR_TRUE1202a和/或VIR_FALSE 1202b中的加载位置在OVR 1204的元素上迭代一或多个向量运算。

在图14中说明系统1200的替代方案,其中VIR_TRUE和VIR_FALSE两者基本上组合为一个向量索引寄存器,其中OVR的TRUE地址是从寄存器自上而下存储,且OVR的FALSE地址是从寄存器自下而上存储。在此替代方案中,用于寻址组合VIR的TRUE部分的计数器开始于地址“零”,且对于到组合寄存器中的每一TRUE输入相加一。FALSE计数器开始于用于存取组合VIR的地址的“N-1”,且计数器针对到组合寄存器中的每一FALSE输入减小一。如图14中所示的多路复用器可用于从用于TRUE输入的计数器或用于FALSE输入的计数器中进行选择。对于每一循环,VIR针对写入启用一次,因为输入是到TRUE区段(例如,地址0、1、2、…、计数+1,其中计数开始于“0”)或VIR的FALSE区段(例如,地址N-1、N-2、N-3、…、VIR_length-count+1,其中计数开始于“0”);且因此,索引是自上而下或自下而上产生。

图13说明根据本公开的一些实施例的用于构建组合编索引向量以存储在针对比较的TRUE和FALSE结果(例如,“1”或“0”结果)的组合向量索引寄存器中的方法1300的实例操作。

方法1300在步骤1302处开始,其中通过向量处理器的向量加载存储单元加载存储于OVR中的操作数向量。

方法1300在步骤1304处继续,其中通过向量加载存储单元加载存储于向量处理器的标量寄存器中的标量。

方法1300在步骤1306处继续,其中通过向量处理器根据存储于计数器中的计数将所加载操作数向量的元素与所加载的标量进行比较。计数器可为另一标量寄存器,且可为向量处理器的一部分。而且,在一些实施例中,方法1300可继续:通过向量处理器根据存储于计数器中的计数将所加载操作数向量的元素与另一操作数向量进行比较。在一些实施例中,为进行所述比较,所加载操作数向量的元素由向量处理器根据第一计数器中的第一计数加以存取,且另一所加载操作数向量的元素由向量处理器根据第二计数器中的第二计数加以存取。所述比较可为数值比较。

方法1300在步骤1308处继续,其中识别步骤1306的比较的结果是TRUE还是FALSE(例如,“1”或“0”)。如果在步骤1306中的比较的结果为TRUE,那么方法1100在步骤1310a处继续,其中根据计数(例如根据计数,经由存储于TRUE计数器中的TRUE计数-例如见图14中描绘的TRUE计数器1416a)将所加载操作数向量的元素的位置存储在VIR_combined中的最顶部未填充位置处。如果在步骤1306中的比较的结果为FALSE,那么方法1300在步骤1310b处继续,其中根据计数(例如根据计数,经由存储于FALSE计数器中的FALSE计数-例如见图14中描绘的FALSE计数器1416b)将所加载操作数向量的元素的位置存储在VIR_combined中的最底部未填充位置处。

方法1300在步骤1312处继续,其中识别计数是否等于存储于OVR中的操作数向量的向量长度(VL)。在一些实施例中,方法1300可继续,其中识别OVR的VL是否等于将VIR_COMBINED的TRUE区段的VL与VIR_COMBINED的FALSE区段的VL相加的结果,这可为识别计数是否等于存储于OVR中的操作数向量的VL的另一方式。识别计数是否等于OVR的VL的这些实例替代方式可展示比较OVR的所有元素。如果计数小于VL,那么所述方法在步骤1314处继续,其中使计数递增。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_combined中。换句话说,方法1300继续根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_combined中。

在步骤1312处,如果计数等于VL,那么方法1300已完成用于存储在VIR_combined中的编索引向量的构建。计数无法大于VL,因为构建编索引向量的操作在计数等于VL时完成。当构建新的编索引向量时,计数复位,且存储VL的标量值的VL寄存器可同样复位。向量处理器可最初确定OVR的向量长度,且接着在执行方法1300之前将所述长度存储于VL寄存器中。

在完成存储于VIR_combined中的编索引向量的构建后,方法1300在步骤1316处继续,其中通过向量加载存储单元从VIR_combined加载所加载操作数向量的元素的存储位置。并且,方法1300在步骤1318处继续,其中根据加载位置在所加载操作数向量的元素上迭代一或多个向量运算。

图14说明根据本公开的一些实施例的用于构建组合编索引向量以存储在VIR_combined 1402中的实例系统1400。

系统1400包含VIR_combined 1402,例如在方法1300的描述中描述的VIR_combined 1402。所述系统还包含OVR 1404,例如在方法1400的描述中描述的OVR。

系统1400还包含标量寄存器(SR)1406,例如在方法1300的描述中描述的标量寄存器。在一些实施例中,标量寄存器可用以与OVR 1404相同的方式寻址的另一OVR替换。

所述系统还包含计数器1408,所述计数器可由计数器寄存器部分地实施且可为在对方法1300的描述中所描述的计数器。

系统1400还包含比较器1410,所述比较器可执行存储于SR 1406中的值与存储于OVR 1404的元素中的值的比较。比较器1410可执行比较,例如OVR(i)SR,OVR(i)≤SR,或OVR(i)≥SR。比较器1410一次或每循环比较两个数字。在每次迭代i(其还表示地址或地址分量i)时,计数器1408提供用于存取OVR 1404以由比较器1410与来自SR 1406的标量值进行比较的地址ⅰ。简单地说,将迭代或地址i处的OVR 1404的输出与来自标量寄存器1406的值进行比较。比较器1410产生单个输出,其为TRUE或FALSE。

比较器1410可经配置以执行方法1300的步骤1306处的比较。换句话说,比较器1410可经配置以根据存储于计数器寄存器中的计数将所加载操作数向量的元素与所加载的标量进行比较。比较器1410还可经配置以执行步骤1308处的TRUE或FALSE结果的识别。换句话说,比较器1410可经配置以识别步骤1306的比较的结果为TRUE还是FALSE。比较器1410可经配置以输出TRUE或FALSE结果,例如针对TRUE结果的“1”或针对FALSE结果的“0”。比较器1410的输出输入到VIR_COMBINED 1402的TRUE区段和FALSE区段的相应写入启用件中的一者中。

系统1400还包含用于寻址VIR_COMBINED 1402的TRUE区段的单独TRUE计数器1416a和用于寻址VIR_COMBINED的FALSE区段的单独FALSE计数器1416b。比较器1410的输出驱动两个计数器,即计数器1416a和1416b。计数器1416a和1416b与为OVR 1404提供地址的计数器1408分离。计数器TRUE 1416a的输出用作用于自上而下存取VIR_COMBINED 1402的地址。FALSE计数器1416b的输出还用作同样用于存取VIR_COMBINED 1402但自下而上存取的地址。下文论述计数器如何寻址VIR_COMBINED 1402的进一步解释。

计数器1408的输出用作待于由TRUE计数器1416a指定的地址处写入到TRUE区段中的地址或地址分量。这在比较器1410的输出为TRUE时发生。对于从比较器1410输出的每一触发TRUE,存储在TRUE计数器1416a中的值增大一。计数器1408的输出用作待于由FALSE计数器1416b指定的地址处写入到FALSE区段中的地址或地址分量。这在比较器1410的输出为FALSE时发生。对于从比较器1410输出的每一触发FALSE,存储在FALSE计数器1416b中的值减小一。选择在何处存储OVR分量的地址的此总体功能性由包含比较器1410、TRUE计数器1416a和FALSE计数器1416b以及多路复用器1420的电路提供。来自比较器1410的输出经由选择寄存器1422控制多路复用器1420。

多路复用器1420控制VIR_COMBINED 1402接收计数器1416a和1416b的哪一计数器输出。控制是经由计数器1416a或1416b的选择,且经由存储于选择寄存器1422中的模式值控制所述选择。选择寄存器1422从比较器1410的输出接收模式值。对于每一循环,VIR_COMBINED 1402针对写入启用一次,因为输入是到VIR的TRUE区段(例如,地址0、1、2、…、计数+1,其中计数开始于“0”)或VIR的FALSE区段(例如,地址N-1、N-2、N-3、…、VIR_length-count+1,其中计数开始于“0”);且因此,索引是自上而下或自下而上产生。在图14所示的实例中,TRUE计数器1416a开始于“0”,且对于每一循环递增“1”。在此实例中,FALSE计数器1416b开始于表示VIR_COMBINED 1402的长度(即,N-1)的标量值,且对于每一循环递减“1”。举例来说,在图14中,比较器1410的比较为SR

TRUE区段和FALSE区段各自为系统1400的输出寄存器的部分。VIR_COMBINED 1402具有至少两个输入。第一输入来自计数器1416a或1416b,其用于存取VIR_COMBINED 1402的地址。第二输入来自计数器1408,且此输入包含在由计数器1416a或1416b提供的寄存器的地址处写入到VIR_COMBINED 1402中的数据。

系统1400可为包含向量加载存储单元的向量处理器的部分。向量加载存储单元可将存储于系统1400的寄存器中的数据加载到主存储器并且将数据从主存储器存储到系统的寄存器,且反之亦然(将存储于存储器中的数据加载到系统1400的寄存器,并且将数据从系统的寄存器存储到存储器)。

系统1400还展示为包含针对向量长度的标量寄存器:向量长度寄存器1424(VLR1424)。VLR 1424经配置以存储OVR 1404的向量长度(VL)。向量处理器可将VL从VLR 1424加载到存储器中,以识别来自计数器1408的计数是否等于存储于OVR 1404中的操作数向量的VL。这是例如实施图13中的方法1300的步骤1312的一种方式。如果计数小于VL,那么计数器1408中的计数继续按时脉循环或另一触发或迭代递增(例如,见步骤1314)。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储OVR 1404的元素的位置,直到OVR的元素的位置存储在VIR_COMBINED 1402的TRUE区段或FALSE区段中。换句话说,系统1400可继续根据计数来存储OVR 1404的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_COMBINED 1402的TRUE区段或FALSE区段中。这是系统1400可实施方法1300的操作的方式中的一者。

如果计数等于VL,那么使用系统1400的向量处理器已完成用于存储在VIR_COMBINED 1402的TRUE区段或FALSE区段中的编索引向量的构建。计数无法大于VL,因为构建编索引向量的操作在计数等于VL时完成。当构建新的编索引向量时,计数在计数器1408中复位,且VL被确定且存储于VLR 1424中。向量处理器可最初确定OVR(例如,OVR 1404)的向量长度,且接着在执行方法1300之前将其存储于VLR 1424中。

在完成存储于VIR_COMBINED 1402中的编索引向量的构建后,向量处理器可继续通过处理器的向量加载存储单元从VIR_COMBINED加载OVR 1404的元素的存储位置。并且,向量处理器还可继续根据在VIR_COMBINED 1402中的加载位置对OVR 1404的元素迭代一或多个向量运算。

图15说明根据本公开的一些实施例的包含VIR_TRUE 1502a和VIR_FALSE 1502b的实例系统1500。出于本公开的目的,应理解,类似于系统1500的系统可包含多个VIR_TRUE和多个VIR_FALE。举例来说,类似于具有两个VIR_TRUE和两个VIR_FALSE的系统1500的实施例可包含具有用以接收两个VIR_TRUE和两个VIR_FALSE的四个输入和一个用于接收来自计数器(例如,类似于计数器1504的计数器)的输入的输入的5:1多路复用器。在一些实施例中,VIR_TRUE的量等于此类系统中的VIR_FALE的量。

系统1500可为向量处理器102(例如,见图1或2)或多个向量处理器的一部分。系统1500包含向量索引寄存器VIR_TRUE 1502a和VIR_FALSE 1502b、计数器寄存器1504、2:1多路复用器1506和连接到多路复用器的选择寄存器1508。VIR_TRUE 1502a和VIR_FALSE1502b可为图2中所示的向量寄存器202中的向量寄存器。计数器寄存器1504和选择寄存器1508可为标量寄存器204中的寄存器。2:1多路复用器1506可为图2中所示的总线206或图1中所示的总线104的一部分。

VIR_TRUE 1502a为用于比较的TRUE结果的向量索引寄存器,且经配置以存储对应于在用于比较中时产生TRUE结果的OVR中的多个位置的多个地址分量。举例来说,见可为系统1500的部分的VIR_TRUE 1202a。

VIR_FALSE 1502b为用于比较的FALSE结果的向量索引寄存器,且经配置以存储对应于当用于比较时产生FALSE结果的OVR中的多个位置的多个地址分量。举例来说,见可为系统1500的一部分的VIR_FALSE 1202b。

每一地址分量可添加到用于存取OVR中的对应位置的有效地址。OVR的每一位置可包含待由ALU操作的操作数向量的元素。举例来说,系统1500可为包含多个算术逻辑单元(ALU)中的算术逻辑单元(ALU)的向量处理器的部分。向量处理器还可包含多个操作数向量寄存器(OVR)中的操作数向量寄存器。OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。

如图所示,计数器寄存器1504为系统1500的部分。计数器寄存器1504还可为具有系统1500的向量处理器的一部分。计数器寄存器1504可经配置以存储计数1510。计数1510可相加到用于存取OVR的有效地址,或计数可由向量处理器使用以对存储于VIR 1502中的多个地址分量进行迭代。

如图所示,3:1多路复用器1506为系统1500的部分。3:1多路复用器1506还可为具有系统1500的向量处理器的一部分。3:1多路复用器1506可经配置以接收来自计数器寄存器1504的计数1510和来自VIR 1502a和1502b的相应输出1512a和1512b作为输入。来自VIR1502a和1502b的输出1512a和1512b各自可包含VIR的多个地址分量中对应于计数1510的一个地址分量。3:1多路复用器1506还可经配置以接收模式值1514作为选择输入。模式值1514可为或包含用于选择计数1510的值,或用于选择来自VIR 1502a和1502b的输出1512a或1512b中的一者的值。3:1多路复用器1506还可经配置以根据所接收的模式值1514选择计数1510或来自VIR 1502a和1502b的输出1512a或1512b中的一者。3:1多路复用器1506还可经配置以经由总线(例如,图1或2的总线中的一者)输出且传达选择输出1516,所述选择输出为所选计数或来自VIR的所选输出中的一者。选择输出1516可传达到存取用于ALU的OVR的请求器。请求器可为向量处理器的向量加载存储单元(例如,见图2中所示的向量加载存储单元210)或另一向量处理器的向量加载存储单元。

图16说明根据本公开的一些实施例的用于根据VIR_TRUE(例如,见VIR_TRUE1202a或1502a)压缩操作数向量的元素的方法1600的实例操作。或者,根据本公开的一些实施例,用于压缩操作数向量的元素的方法1600的实例操作可根据VIR_FALSE(例如,见VIR_FALSE 1202b或1502b)或VIR_COMBINED(例如,见VIR_COMBINED 1402)的TRUE区段或FALSE区段。

在图16中,方法1600在步骤1602处开始,其中通过向量加载存储单元加载存储于输入OVR中的输入操作数向量。方法1600在步骤1604处继续,其中通过向量加载存储单元加载存储于计数器寄存器中的计数。方法1600在步骤1606处继续,其中通过向量加载存储单元根据计数从VIR_TRUE加载所加载输入操作数向量的元素的存储位置。方法1600在步骤1608处继续,其中根据来自VIR_TRUE的加载位置对所加载输入操作数向量的元素运行向量压缩运算。步骤1608包含步骤1610,其包含方法1600以如下操作继续:将所加载输入操作数向量的元素存储到对应于来自VIR_TRUE的加载位置的输出OVR中。方法1600在步骤1612处继续,其中将计数与表示VIR的向量长度的值(即,VL)进行比较,使得可针对存储于VIR_TRUE中的位置中的每一者在输入OVR上迭代向量压缩运算。当计数等于VIR_TRUE的向量长度时,则方法1600结束。当计数小于VIR_TRUE的向量长度时,则方法1600在1614处以使计数递增而继续,且接着返回到步骤1604(加载存储于计数器寄存器中的计数),随后为步骤1606(通过向量加载存储单元根据计数从VIR_TRUE加载所加载输入操作数向量的元素的所存储位置)和1608(根据来自VIR_TRUE的加载位置对所加载输入操作数向量的元素运行向量压缩运算)。这样,在针对存储于VIR_TRUE中的位置中的每一者的输入OVR上迭代向量压缩运算。

图17说明根据本公开的一些实施例的包含用于压缩存储在输入OVR 1704中的输入操作数向量的元素的VIR_TRUE 1702a(其可类似于VIR_TRUE 1202a或1502a)的实例系统1700。或者,根据本公开的一些实施例,实例系统1700可用于根据VIR_FALSE 1702b(其可类似于VIR_FALSE 1202b或1502b)压缩操作数向量的元素。而且,根据本公开的一些实施例,实例系统1700可用于根据VIR_COMBINED(例如,见VIR_COMBINED 1402)的TRUE区段或FALSE区段压缩操作数向量的元素。

实例系统1700是可至少实施方法1600的系统的一个实例。

在图17中,VIR_TRUE 1702a存储输入OVR 1704的位置列表(例如,作为输入OVR的第一元素的“2”,和作为输入OVR的第二元素的“4”)。在此所说明实例中,展示向量处理器运行向量压缩运算的两个循环或迭代。在第一迭代处,计数器1706输出计数“0”,其为在第一循环处存储于计数器中的值。在第一循环中,VIR_TRUE 1702a展示为输出“2”。多路复用器1708在如由处于正常模式操作的计数器1706指定的地址分量(“0”)或如由处于VIR_TRUE操作模式(或压缩运算模式,基于此特定实例中VIR_TRUE 1702a的内容)的VIR_TRUE 1702a指定的地址分量(“2”)之间进行选择。当在第一循环中通过多路复用器1708选择VIR_TRUE(或VIR_TRUE压缩模式)时,来自VIR_TRUE 1702a的输出“2”是用于存取输入OVR 1704的地址分量。结果,针对输入OVR的位置“2”处的元素“C”的输出存取输入OVR 1704。通过存储于计数器1706中的计数直接寻址输出OVR 1710。由于计数器1706的计数在第一循环中为“0”,所以输出ORV 1710将“C”存储为其第一元素。在下一迭代或循环中,输出ORV 1710将“E”在输出OVR的位置“1”处存储为第二元素。在展示两个循环的此实例中,将具有元素{A,B,C,D,E}的输入OVR 1704压缩为具有元素{C,E}的输出OVR 1710。

而且,参考图17,如果用于输入/输出向量的地址信号经反转,那么可将{C,E}扩展为具有元素{x,x,C,x,E}的第二输出OVR,其中x为压缩运算之前的现有值或选自标量寄存器的标量值(例如,见图9,其为以来自标量寄存器的标量值扩展经压缩向量的实例方法)。

另外,如果来自VFR的值相加到计数器的计数,那么可使用求和,使得输入OVR上的运算的第一迭代发生在输入OVR的另一位置而非输入OVR的第一位置处(例如,输入OVR1704的第一位置标记为“0”)。例如,见图5。或者,VIR_TRUE 1702a可用于提供计数寄存器的输入,使得在向量运算开始时计数寄存器的初始值为存储于VIR_TRUE 1702a中的值。此类选项允许向量初次处理。应理解,对于不同类型的操作,可使用VIR_FALSE 1702b代替VIR_TRUE 1702a。举例来说,压缩运算可基于VIR_FALSE 1702b而非VIR_TRUE 1702a中的索引。并且,VIR_COMBINED可替换系统1700中的VIR_FALSE 1702b和VIR_FALSE 1702b。

如本文中所提及,本文所公开的实施例中的至少一些为向量处理器中的向量索引寄存器,其各自存储用于存取向量寄存器中的向量中的多个位置的多个地址(也称为索引)。另外,本文中所公开的实施例中的至少一些为用于一或多个条件性测试运算(例如数值比较)的TRUE和/或FALSE结果的向量索引寄存器(VIR_TRUE和VIR_FALSE),其各自存储用于存取操作数向量中的多个位置的多个地址。而且,本文中所描述的至少一些实施例涉及具有向量索引寄存器VIR_TRUE和VIR_FALSE的向量处理器中的条件性运算。另外,本文中公开的是使用VIR_TRUE和VIR_FALSE来更有效且更快地处理向量处理器中的向量条件性运算。

本文中所公开的技术可至少提供对基本或复杂条件性运算的支持。举例来说,技术可支持以下基本条件性运算;如果(A(i)>B(i)),那么A(i)=A(i)+B(i),否则A(i)=A(i)-B(i)。在此基本条件性运算中,VIR、VIR_TRUE以及VIR_FALSE的单个集合可用于经由向量处理器更高效地进行相同运算,所述向量处理器运行A(VIR_TRUE(j))=A(VIR_TRUE(j))+B(VIR_TRUE(j))和A(VIR_FALSE(k))=A(VIR_FALSE(k))-B(VIR_FALSE(k))。而且,本文中所公开的是可支持使用一对VIR_TRUE和VIR_FALSE来高效地实施向量处理器中的条件性运算的系统,所述条件性运算例如包含例如以下的条件性运算:在(‘测试条件’)的情况下,A(i)=A(i)+B(i),否则A(i)=A(i)-B(i)。

测试条件的结果还可用于设置两个向量索引寄存器VIR_TRUE和VIR_FALSE中的索引。

测试条件可为简单的(例如,“A(i)>0”,或“A(i)>B(i)”,或“A(i)>C(i)”)。测试条件还可更复杂(例如,“(A(i)>0且A(i)>B(i))或(A(i)>C(i))”)。因此,无论测试条件是简单还是复杂,VIR_TRUE和VIR_FALSE的单个集合都可用于处理经由条件性测试运算选择的两个或更多个运算分支(例如,两个运算分支包含:那么“A(i)=A(i)+B(i)”,否则“A(i)=A(i)-B(i)”)。

出于本公开的目的,应理解,条件性测试一般不必为测试“>”。测试条件可为其它类型的数值测试和/或布尔(Boolean)运算。

在一些实施例中,当存在复杂测试和/或布尔运算时,可能有利的是使用Vm寄存器来追踪向量True和False值,使得可组合不同TRUE和FALSE向量以产生最终测试结果。将复杂的布尔运算转换成如VIR_TRUE和VIR_FALSE的对应索引运算可为复杂的,因此在一些实施例中,使用Vm作为中间编索引向量可为有用的。

一些实例实施例可包含一种系统,其包含向量处理器、多个操作数向量寄存器(OVR)、向量加载存储单元和至少两个向量索引寄存器(例如VIR_TRUE和VIR_FALSE)。向量处理器可经配置以根据存储于向量处理器的计数器寄存器中的计数对第一所加载操作数向量和第二所加载操作数向量的元素执行条件性测试运算。

OVR可包含向量处理器的经配置以存储第一操作数向量的第一操作数向量寄存器(OVR)和向量处理器的经配置以存储第二操作数向量的第二OVR。

向量处理器的向量加载存储单元可经配置以加载存储于第一OVR中的第一操作数向量且加载存储于第二OVR中的第二操作数向量。在此类实例中,向量处理器可经配置以根据存储于计数器寄存器中的计数对第一操作数向量和第二操作数向量的每一元素执行条件性测试运算。而且,在此类实例中,条件性测试运算可提供测试结果向量。

向量处理器的向量加载存储单元还可经配置以在针对条件性测试运算的TRUE结果中的每一TRUE结果的第一向量索引寄存器(VIR_TRUE)中将TRUE结果的位置存储在测试结果向量中。并且,向量处理器的向量加载存储单元还可经配置以在针对条件性测试运算的FALSE结果中的每一FALSE结果的第二向量索引寄存器(VIR_FALSE)中将FALSE结果的位置存储在测试结果向量中。在此类实例中,向量处理器可经配置以对第一操作数向量和第二操作数向量中的第一元素执行第一向量运算,所述第一元素由存储于第一向量索引寄存器(VIR_TRUE)中的位置识别。向量处理器还可经配置以对第一操作数向量和第二操作数向量中的第二元素执行第二向量运算,所述第二元素由存储于第二向量索引寄存器(VIR_FALSE)中的位置识别。在一些实施例中,向量处理器使用指令(例如,用户级可编程指令),其使用寄存器来执行本文中所描述的向量运算。

在实例系统的一些实施例中,第一操作数向量为第一输入操作数向量,且第二操作数向量为第二输入操作数向量。并且,在此类实施例中,向量加载存储单元可经配置以根据第二计数从第二计数器寄存器加载第二计数,并且从VIR_TRUE加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。在此类实施例中,向量处理器可经配置以根据来自VIR_TRUE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算。而且,向量加载存储单元可经配置以将第一运算的结果在对应于来自VIR_TRUE的加载位置的位置处存储到输出OVR中。另外,向量处理器可经配置以继续根据来自VIR_TRUE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算,且将第一运算的结果在与来自VIR_TRUE的加载位置匹配的对应位置处存储到输出OVR中,直到第二计数等于VIR_TRUE的长度,其中所述计数对于来自VIR_TRUE的每加载位置递增。并且,向量处理器可经配置以在第二计数等于VIR_TRUE的长度时使第二计数复位。

在刚刚提及的实例系统的一些实施例中,在通过向量处理器使第二计数复位之后,向量加载存储单元可经配置以根据第二计数从VIR_FALSE加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。而且,向量处理器可经配置以根据来自VIR_FALSE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算。另外,向量处理器可经配置以继续根据来自VIR_FALSE的加载位置来对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算,且在与来自VIR_FALSE的加载位置匹配的对应位置处将第二运算的结果存储到输出OVR中,直到第二计数等于VIR_FALSE的长度。计数可对于来自VIR_FALSE的每加载位置递增。在一些实例中,第一运算可包含加法,且第二运算可包含减法。

或者,在一些实施例中,VIR_TRUE和VIR_FALSE为一个组合向量索引寄存器(VIR_combined)的部分。在此类替代实施例中,向量加载存储单元可经配置以在针对条件性测试运算的TRUE结果中的每一TRUE结果的VIR_combined中的最顶部未填充位置处将TRUE结果的位置存储在测试结果向量中。而且,向量加载存储单元还可经配置以在针对条件性测试运算的FALSE结果中的每一FALSE结果的VIR_combined中的最底部未填充位置处将FALSE结果的位置存储在测试结果向量中。

在本文中所描述的一些实施例中,向量处理器可除了OVR、向量加载存储单元和例如VIR_TRUE和VIR_FALSE等VIR之外还包含多个算术逻辑单元中的算术逻辑单元(ALU)。在此类实施例中,OVR可包含第一OVR和第二OVR。每一OVR可经配置以存储待用作ALU的向量运算的输入的操作数向量的元素。而且,向量处理器可经配置以根据存储于计数器寄存器中的计数对第一OVR和第二OVR的每一元素执行条件性测试运算。在此实例中,所述条件性测试运算同样可提供测试结果向量。

在此类实施例中,第一向量索引寄存器(VIR_TRUE)可经配置以针对条件性测试运算的每一TRUE结果将TRUE结果的位置存储在测试结果向量中。并且,第二向量索引寄存器(VIR_FALSE)可经配置以针对条件性测试运算的每一FALSE结果将FALSE结果的位置存储在测试结果向量中。所述位置中的每一者可相加到用于存取OVR中的对应位置的有效地址,且OVR的对应位置中的每一者可包含待由ALU操作的操作数向量的元素。而且,在此类实施例中,第一操作数向量可为第一输入操作数向量,且第二操作数向量可为第二输入操作数向量;且向量处理器可经配置以例如经由向量加载存储单元:从第二计数器寄存器加载第二计数;根据第二计数从VIR_TRUE加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置;及根据第二计数从VIR_FALSE加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。

另外,在此类实施例和其它实施例中,向量处理器可经配置以并行地根据来自VIR_TRUE的加载位置来对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算,且在与来自VIR_TRUE的加载位置匹配的对应位置处将第一运算的结果存储到输出OVR中。而且,向量处理器可经配置以并行地根据来自VIR_FALSE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算,且在与来自VIR_FALSE的加载位置匹配的对应位置处将第二运算的结果存储到输出OVR中。并且,例如,第一运算可包含加法,且第二运算可包含减法。

而且,在一些实施例中,向量处理器可经配置以并行地根据来自VIR_TRUE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算,且将第一运算的结果存储到用于VIR_TRUE的输出OVR中。而且,在此类实施例中,向量处理器可经配置以并行地根据来自VIR_FALSE的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算,且将第二运算的结果存储到用于VIR_FALSE的输出OVR中。图18说明根据本公开的一些实施例的用于构建编索引向量以存储在针对条件性测试运算的TRUE结果和FALSE结果(例如,“0”和“1”结果)的向量索引寄存器(VIR_TRUE和VIR_FALSE)中的方法1800的实例操作。

方法1800在步骤1102处开始,其中通过向量处理器的向量加载存储单元加载一或多个操作数向量。每一操作数向量存储于相应操作数向量寄存器(OVR)中。

方法1800在步骤1804处继续,其中通过向量处理器根据存储于计数器中的计数来对所加载的一或多个操作数向量中的至少一者的元素执行条件性测试运算。而且,在一些实施例中,可用来自标量寄存器的标量和所加载的一或多个操作数向量中的至少一者的元素根据存储于计数器中的计数执行条件性测试运算。计数器可为标量寄存器,且可为向量处理器的一部分。在一些实施例中,方法1800在步骤1804处包含通过向量处理器根据存储于计数器中的计数(例如,见图19中的方法1900)比较两个不同的所加载操作数向量的相应元素。在一些实施例中,为进行条件性测试运算,第一所加载操作数向量的元素由向量处理器根据第一计数器中的第一计数加以存取,且第二所加载操作数向量的元素由向量处理器根据第二计数器中的第二计数加以存取。

方法1800在步骤1806处继续,其中通过向量处理器识别条件性测试运算的结果是否为TRUE结果。换句话说,方法1800在步骤1806处继续,其中识别步骤1804的条件性测试运算的结果是TRUE还是FALSE(例如,布尔“1”或“0”)。如果在步骤1804中的运算的结果为TRUE,那么方法1800在步骤1808处继续,其中根据计数(例如根据计数,经由存储于TRUE计数器中的TRUE计数-例如见图20中描绘的TRUE计数器2016a)将所加载操作数向量的元素的位置存储在用于条件性测试运算的TRUE结果的向量索引寄存器(VIR_TRUE)中。如果步骤1804的测试运算的结果为FALSE,那么方法1800在步骤1810处继续,其中根据计数(例如根据计数,经由存储于FALSE计数器中的FALSE计数-例如见图20中描绘的FALSE计数器2016b)将所加载操作数向量的元素的位置存储在用于比较的FALSE结果的向量索引寄存器(VIR_FALSE)中。

方法1800在步骤1812处继续,其中识别计数是否等于操作数向量中的至少一者的向量长度(VL)。在一些实施例中,方法1800可继续,其中识别由条件性测试运算存取的OVR的VL是否等于将VIR_TRUE的VL与VIR_FALSE的VL相加的结果,这可为识别计数是否等于存储于OVR中的操作数向量的VL的另一方式。识别计数是否等于操作数向量中的至少一个的VL的这些实例替代方式可展示在条件性测试运算中使用了由测试运算存取的OVR的所有元素。如果计数小于VL,那么所述方法在步骤1814处继续,其中使计数递增。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。换句话说,方法1800继续根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。

在步骤1812处,如果计数等于VL,那么方法1800已完成用于存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建。在完成存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建后,方法1800在步骤1816处继续,其中通过向量加载存储单元从VIR_TRUE或VIR_FALSE或其组合中的至少一者加载所加载操作数向量的元素的存储位置。并且,方法1100在步骤1818处继续,其中根据存储于VIR_TRUE和/或VIR_FALSE中的加载位置在所加载操作数向量的元素上迭代一或多个向量运算。在一些实施例中,步骤1818的迭代次数等于VL(如在步骤1812中所示)。在此类实施例中,两个相应寄存器可加载有VIR_TRUE和VIR_FALSE的新向量长度(例如,VL_VIR_TRUE和VL_VIR_FALSE)。换句话说,用于条目数目的一个VL寄存器存储在VIR_TRUE中,且用于条目数量的一个寄存器存储在VIR_FALSE中。在此类实施例中,相应VL寄存器也可加载有OVR的向量长度。因此,在此类实施例中,在步骤1818中,当方法1100以根据存储在VIR_TRUE和/或VIR_FALSE中的所加载的位置来在所加载操作数向量的元素上迭代一或多个向量运算继续时,向量处理器可根据OVR和/或VIR在相应VL寄存器中的相应VL值来确定OVR和/或VIR的迭代次数。

换句话说,本文中所公开的方法可包含通过向量处理器的向量加载存储单元加载一或多个操作数向量,所述一或多个操作数向量中的每一向量存储于相应操作数向量寄存器中。此类方法还可包含通过所述向量处理器根据存储于计数器寄存器中的计数来对所述所加载的一或多个操作数向量中的至少一者的每一元素执行条件性测试运算,所述条件性测试运算提供测试结果向量。所述方法还可包含:在针对所述条件性测试运算的TRUE结果中的每一TRUE结果的第一向量索引寄存器(VIR_TRUE)中将所述TRUE结果的位置存储在所述测试结果向量中;以及在针对所述条件性测试运算的FALSE结果中的每一FALSE结果的第二向量索引寄存器(VIR_FALSE)中将所述FALSE结果的位置存储在所述测试结果向量中。所述方法可包含对一或多个操作数向量中的第一元素和/或第二元素执行一或多个向量运算。第一元素由存储于第一向量索引寄存器(VIR_TRUE)中的位置识别。第二元素由存储于第二向量索引寄存器(VIR_FALSE)中的位置识别。

在一些实施例中,所述方法可包含对一或多个操作数向量中的第一元素执行第一向量运算,所述第一元素由存储于第一向量索引寄存器(VIR_TRUE)中的位置识别。此类方法还可包含对所述一或多个操作数向量中的第二元素执行第二向量运算,所述第二元素由存储于所述第二向量索引寄存器(VIR_FALSE)中的位置识别。

图19说明根据本公开的一些实施例的用于构建编索引向量以存储在针对条件性测试运算的TRUE结果和FALSE结果(例如,“0”和“1”结果)的向量索引寄存器(VIR_TRUE和VIR_FALSE)中的方法1900的实例操作。方法1900类似于方法1800,其与方法1900的不同之处在于方法1800中的一或多个操作数向量为方法1900中的第一操作数向量和第二操作数向量。

方法1900在步骤1902处开始,其中通过向量加载存储单元加载存储于第一OVR中的第一操作数向量(例如,A(i))。方法1900在步骤1904处继续,其中通过向量加载存储单元加载存储于第二OVR中的第二操作数向量(例如,B(i))。

方法1900在步骤1906处继续,其中通过向量处理器根据存储于计数器中的计数(例如,A(i)>B(i))对所加载的第一操作数向量的元素和所加载的第二操作数向量的元素执行条件性测试运算。计数器可为标量寄存器,且可为向量处理器的一部分。在一些实施例中,为进行条件性测试运算,第一所加载操作数向量的元素由向量处理器根据第一计数器中的第一计数加以存取,且第二所加载操作数向量的元素由向量处理器根据第二计数器中的第二计数加以存取。

方法1900在步骤1908处继续,其中通过向量处理器识别条件性测试运算的结果是否为TRUE结果。换句话说,方法1800在步骤1908处继续,其中识别步骤1906的条件性测试运算的结果是TRUE还是FALSE(例如,“1”或“0”)。如果在步骤1906中的运算的结果为TRUE,那么方法1900在步骤1910a处继续,其中根据计数(例如根据计数,经由存储于TRUE计数器中的TRUE计数-例如见图20中描绘的TRUE计数器2016a)将所加载的第一操作数向量和第二操作数向量的元素的位置存储在用于条件性测试运算的TRUE结果的向量索引寄存器(VIR_TRUE)中。如果步骤1906的测试运算的结果为FALSE,那么方法1900在步骤1910b处继续,其中根据计数(例如根据计数,经由存储于FALSE计数器中的FALSE计数-例如见图20中描绘的FALSE计数器2016b)将所加载的第一操作数向量和第二操作数向量的元素的位置存储在用于比较的FALSE结果的向量索引寄存器(VIR_FALSE)中。并且,在一些实施例中,在步骤1910a和1910b处,用于VIR_TRUE和VIR_FALSE的相应VL寄存器递增一。

方法1900在步骤1912处继续,其中识别计数是否等于操作数向量中的至少一者的向量长度(VL)。在一些实施例中,对于方法1900,VL对于OVR中的所有操作数向量是相同的。在一些实施例中,方法1900可继续,其中识别由条件性测试运算存取的OVR的VL是否等于将VIR_TRUE的VL与VIR_FALSE的VL相加的结果,这可为识别计数是否等于存储于OVR中的操作数向量的VL的另一方式。如果计数小于VL,那么所述方法在步骤1914处继续,其中使计数递增。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储所加载操作数向量的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。

在步骤1912处,如果计数等于VL,那么方法1900已完成用于存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建。

在完成存储在VIR_TRUE和VIR_FALSE中的编索引向量的构建后,方法1900在步骤1916处继续,其中通过向量加载存储单元从VIR_TRUE或VIR_FALSE或其组合中的至少一者加载所加载的第一操作数向量和第二操作数向量的元素的存储位置。并且,方法1900在步骤1918和1920处继续,其中根据存储于VIR_TRUE和/或VIR_FALSE中的加载位置在所加载的第一操作数向量和第二操作数向量的元素上迭代一或多个向量运算。举例来说,所述方法可在向量处理器运行A(VIR_TRUE(j))=A(VIR_TRUE(j))+B(VIR_TRUE(j))和A(VIR_FALSE(k))=A(VIR_FALSE(k))-B(VIR_FALSE(k))的情况下继续。而且,举例来说,方法1900在步骤1918处继续,其中根据存储于VIR_TRUE中的加载位置在所加载的第一操作数向量和第二操作数向量的元素上迭代一或多个向量运算。并且,例如,方法1900在步骤1920处继续,其中根据存储于VIR_FALSE中的加载位置在所加载的第一操作数向量和第二操作数向量的元素上迭代一或多个向量运算。

换句话说,本文中所公开的方法可包含加载存储于第一操作数向量寄存器(OVR)中的第一操作数向量且加载存储于第二OVR中的第二操作数向量。所述方法还可包含根据存储于计数器寄存器中的计数对所加载的第一OVR和所加载的第二OVR的每一元素执行条件性测试运算。所述方法还可包含根据计数来存储所加载的第一操作数向量和第二操作数向量的元素的位置,直到所加载的第一操作数向量和第二操作数向量的元素的位置存储在VIR_TRUE或VIR_FALSE中。另外,所述方法可包含通过所述向量加载存储单元从所述VIR_TRUE或所述VIR_FALSE或其组合中的至少一者加载所述所加载的第一操作数向量和第二操作数向量的所述元素的存储位置。所述方法还可包含根据加载位置在所加载的第一操作数向量和第二操作数向量的元素上迭代一或多个向量运算。

图20说明根据本公开的一些实施例的用于构建编索引向量以存储在VIR_TRUE2002a和VIR_FALSE 2002b中的实例系统2000。系统2000可实施方法1800和1900的许多运算和方面,且系统2000可为一或多个向量处理器的部分。系统1200包含VIR_TRUE 2002a和VIR_FALSE 2002b。所述系统还包含第一OVR 2004和第二OVR 2006,例如在方法1900的描述中提及的OVR。

系统2000还包含计数器2008,所述计数器可由计数器寄存器部分地实施且可为在对方法1800和1900的描述中所描述的计数器。

系统2000还包含条件性测试运算2010,其可执行条件性测试运算,例如存储在第一OVR 2004和第二OVR 2006中的值的比较。

条件性测试运算2010可执行许多不同类型的条件性测试运算,例如OVR 2004和2006或OVR中的一或多者相较于标量的许多不同类型的比较,例如第1OVR(i)<第2OVR(i)、第1OVR(i)=第2OVR(i)、第1OVR(i)>第2OVR(i)、第1OVR(i)≤第2OVR(i)、第1OVR(i)≥第2OVR(i)、第1OVR(i)<标量值、第1OVR(i)=标量值、第1OVR(i)>标量值、第1OVR(i)≤标量值,或第1OVR(i)≥标量值,等。

条件性测试运算2010可针对具有类似地址(例如,类似索引或迭代i)的两个向量的元素一次或每循环运行一次测试或比较。在每一迭代i(其还表示地址或地址分量i)处,计数器2008提供用于存取OVR 2004和2006以用于条件性测试运算2010的地址i。在一些实例中,将OVR 2004和2006在迭代或地址i处的元素/输出彼此相比较或与来自另一寄存器(例如标量寄存器)的值相比较。条件性测试运算2010产生单个输出,其为TRUE或FALSE(例如,“1”或“0”)。

条件性测试运算2010可经配置以在方法1800的步骤1804或方法1900的步骤1906处执行测试运算。换句话说,条件性测试运算2010可经配置以根据存储于计数器寄存器(如计数器2008)中的计数对所加载操作数向量的元素执行。条件性测试运算2010还可经配置以在步骤1806或步骤1908处执行TRUE或FALSE结果的识别。换句话说,条件性测试运算2010可经配置以识别条件性测试运算的结果为TRUE还是FALSE。条件性测试运算2010可经配置以输出TRUE或FALSE结果,例如针对TRUE结果的“1”或针对FALSE结果的“0”。条件性测试运算2010的输出输入到VIR_TRUE 2002a和VIR_FALSE 2002b中的每一者的相应写入启用件中。

来自条件性测试运算2010的输出可直接传达到用于VIR_TRUE 2002a的写入启用件2012a。来自条件性测试运算2010的输出可经由反相器2014间接地传达到用于VIR_FALSE2002b的写入启用件2012b。反相器2014经配置以在条件性测试运算2010的输出到达用于VIR_FALSE 2002b的写入启用件2012b之前使其反相。举例来说,如果条件性测试运算2010的输出为TRUE(例如,“1”),那么当将所述输出输入到反相器2014中时,反相器使值反相为FALSE(例如,“0”)且输出FALSE。

系统2000还包含用于VIR_TRUE 2002a的单独TRUE计数器2016a和用于VIR_FALSE2002b的单独FALSE计数器2016b。比较器2010的输出驱动两个计数器,即计数器2016a和2016b。计数器2016a和2016b与为OVR 2004和2006提供地址i的计数器2008分离。TRUE计数器2016a的输出用作用于存取VIR_TRUE 2002a的地址。FALSE计数器2016b的输出用作用于存取VIR_FALSE 2002b的地址。举例来说,当条件性测试运算2010的输出为TRUE时,输出触发写入启用件2012a将来自OVR 2004和2006的当前位置写入到VIR_TRUE 2002a中。当比较器2010的输出为FALSE时,输出触发写入启用件2012b将来自OVR 2004和2006的当前位置写入到VIR_FALSE 2002b中。经由包含反相器2014以及两个写入启用件2012a和2012b的电路提供这种功能性。

计数器2008的输出用作待于由TRUE计数器2016a指定的地址处写入到VIR_TRUE2002a中的地址或地址分量(或索引)。这在测试运算2010的输出为TRUE时发生。对于从测试运算2010输出的每一触发TRUE,存储在计数器TRUE 2016a中的值增大一。计数器2008的输出用作待于由FALSE计数器2016b指定的地址处写入到VIR_FALSE 2002b中的地址或地址分量。这在测试运算2010的输出为FALSE时发生。对于从测试运算2010输出的每一触发FALSE,存储在FALSE计数器2016b中的值增大一。选择在何处存储OVR分量的地址的此总体功能性由包含测试运算2010、写入启用件2012a和2012b、反相器2014以及TRUE计数器2016a和FALSE计数器2016b的电路提供。

VIR_TRUE 2002a和VIR_FALSE 2002b各自为类似于图12中所描绘的系统1200中的输出寄存器1202a和1202b的系统2000的输出寄存器。在某种程度上类似于系统1200的系统2000可为包含向量向量存储单元的向量处理器的一部分。

系统2000还展示为包含用于向量长度的标量寄存器,即向量长度寄存器2024(VLR2024)VLR 2024经配置以存储OVR 2004和2006的向量长度(VL)。向量处理器可将VL从VLR2024加载到存储器中,以识别来自计数器2008的计数是否等于存储于OVR 2004和2006中的相应操作数向量的VL。换句话说,一个值位于OVR 2004和2006中的操作数向量的VL的寄存器中。这是例如实施图18中的方法1800的步骤1812或图19中的方法1900的步骤1912的一个方式。如果计数小于VL,那么计数器2008中的计数继续按时脉循环或另一触发或迭代递增(例如,见步骤1814或1914)。通过使计数递增,直到计数等于VL,向量处理器可以以下操作继续:根据计数来存储OVR 2004和2006的元素的位置,直到OVR的元素的位置存储在VIR_TRUE 2002a或VIR_FALSE 2002b中。换句话说,系统2000可继续根据计数来存储OVR的元素的位置,直到所加载操作数向量的元素的位置存储在VIR_TRUE 1202a或VIR_FALSE 1202a中。这是系统2000可实施方法1800或方法1900的操作的方式中的一者。

如果计数等于VL,那么使用系统2000的向量处理器已完成用于存储在VIR_TRUE2002a和VIR_FALSE 2002b中的编索引向量的构建。计数无法大于VL,因为构建编索引向量的操作在计数等于VL时完成。当构建新的编索引向量时,计数在计数器2008中复位,且VL被确定且存储于VLR 2024中。向量处理器最初可确定OVR的向量长度(例如,OVR 2004和2006的长度),然后在执行方法1800或1900之前将长度(其为一种长度)存储在VLR 2024中。

图21和22说明根据本公开的一些实施例的用于根据VIR_TRUE和VIR_FALSE(例如,见图23中描绘的VIR_TRUE 2202a和VIR_FALSE 2202b)来对操作数向量的元素运行运算的方法2100的实例操作。

或者,根据本公开的一些实施例,用于对操作数向量的元素运行运算的方法2100的实例操作可根据VIR_COMBINED的TRUE区段和FALSE区段(例如,见图24中描绘的VIR_COMBINED 2302)。在此些实例中,在对操作数向量运行操作期间不使计数复位。

而且,用于对操作数向量的元素运行运算的方法2100的实例操作可以根据并行存取的VIR_TRUE和VIR_FALSE,原因在于例如,根据本公开的一些实施例,VIR_TRUE和VIR_FALSE中的位置i的两次出现皆是在相同时钟循环或迭代(例如,见图25中描绘的VIR_TRUE2402a和VIR_FALSE 2402b)中被存取的。在此类实例中,VIR_TRUE和VIR_FALSE的向量长度VL_VIR_TRUE和VL_VIR_FALSE未与计数进行比较,且在对操作数向量运行运算期间并未使计数复位。而且,在此类实例以及其它实例中,步骤2116可按运算的时钟循环或迭代发生。而且,在并行存取VIR的此类实例中,步骤2106到2112以及步骤2120到2126也可并行执行。

在图21中,方法2100在步骤2102处开始,其中通过向量加载存储单元加载存储于第一输入OVR中的第一输入操作数向量。方法2100在步骤2104处继续,其中通过向量加载存储单元加载存储于第二输入OVR中的第二输入操作数向量。方法2100在步骤2106处继续,其中通过向量加载存储单元加载存储在计数器寄存器中的计数。方法2100在步骤2108处继续,其中通过向量加载存储单元根据计数从VIR_TRUE(或VIR_COMBINED的TRUE区段)加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。

方法2100在步骤2110处继续,其中根据来自VIR_TRUE(或VIR_COMBINED的TRUE区段)的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算(例如,加法)。步骤2110包含步骤2112,其包含方法2100继续将第一运算的结果(例如,由ALU产生)在对应于来自VIR_TRUE(或VIR_COMBINED的TRUE区段)的加载位置的位置处存储到输出OVR中。

方法2100在步骤2114处继续,其中将计数与表示VIR_TRUE(或VIR_COMBINED的TRUE区段)的向量长度的值(即,VL_VIR_TRUE)进行比较,以使得可针对存储于VIR_TRUE(或VIR_COMBINED的TRUE区段)中的位置中的每一者对存储于输入操作数向量寄存器中的所加载的第一输入操作数向量和第二输入操作数向量迭代第一运算。当计数等于VIR_TRUE的向量长度时,方法2100在步骤2118处继续,其中使计数寄存器中的计数复位。

应理解,VL_VIR_TRUE和VL_VIR_FALSE在发起方法2100之前预加载有VIR_TRUE和VIR_FALSE的向量长度。在一些实施例中,VL_VIR_TRUE和VL_VIR_FALSE加载有VIR_TRUE和VIR_FALSE中的向量的长度,而VIR_TRUE和VIR_FALSE加载有向量索引元素(例如,见步骤1808、1810、1910a和1910b)。

当计数小于向量长度时,方法2100在步骤2114处继续,其中在2116处使计数递增,且接着返回到步骤2106(加载存储于计数器寄存器中的计数),随后为步骤2108(通过向量加载存储单元根据计数从VIR_TRUE(或VIR_COMBINED的TRUE区段)加载所加载输入操作数向量的相应元素的存储位置)和2110(根据来自VIR_TRUE(或VIR_COMBINED的TRUE区段)的加载位置对所加载输入操作数向量的元素运行第一运算)。这样,针对存储在VIR_TRUE(或VIR_COMBINED的TRUE区段)中的位置中的每一者在输入OVR上迭代第一运算。

如所提及,在步骤2118处,当计数等于VIR_TRUE的向量长度时,则方法2100继续,其中使计数寄存器中的计数复位。然而,当使用VIR_COMBINED时,不发生计数的复位,因为VIR_COMBINED的FALSE区段的初始位置是在VIR_COMBINED的TRUE区段的最后一个位置之后的第一位置(其不是位置“0”)。

随后,方法2100在步骤2120处继续,其中通过向量加载存储单元加载存储于计数器寄存器中的计数。在使用VIR_TRUE和VIR_FALSE的实例中,在步骤2120的第一迭代处的计数的值为“0”。在使用VIR_COMBINED的实例中,在步骤2120的第一迭代处的计数的值是表示VIR_COMBINED的FALSE区段的第一位置的值。

方法2100在步骤2122处继续,其中通过向量加载存储单元根据计数从VIR_FALSE(或VIR_COMBINED的FALSE区段)加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。

方法2100在步骤2124处继续,其中根据来自VIR_FALSE(或VIR_COMBINED的FALSE区段)的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算(例如,减法)。步骤2124包含步骤2126,其包含方法2100继续将第二运算的结果(例如,由ALU产生)在对应于来自VIR_FALSE(或VIR_COMBINED的FALSE区段)的加载位置的位置处存储到输出OVR中。

方法2100在步骤2128处继续,其中将计数与表示VIR_FALSE(或VIR_COMBINED的FALSE区段)的向量长度的值(即,VL_VIR_FALSE)进行比较,以使得可针对存储于VIR_FALSE(或VIR_COMBINED的FALSE区段)中的位置中的每一者对存储于输入操作数向量寄存器中的所加载的第一输入操作数向量和第二输入操作数向量迭代第一运算。当计数等于VIR_FALSE的向量长度时,则方法2100结束。

应理解,VL_VIR_TRUE和VL_VIR_FALSE在发起方法2100之前预加载有VIR_TRUE和VIR_FALSE的向量长度。在一些实施例中,VL_VIR_TRUE和VL_VIR_FALSE加载有VIR_TRUE和VIR_FALSE中的向量的长度,而VIR_TRUE和VIR_FALSE加载有向量索引元素(例如,见步骤1808、1810、1910a和1910b)。

当计数小于向量长度时,方法2100在步骤2128处继续,其中在2130处使计数递增,且接着返回到步骤2120(加载存储于计数器寄存器中的计数),随后为步骤2122(通过向量加载存储单元根据计数从VIR_FALSE(或VIR_COMBINED的FALSE区段)加载所加载输入操作数向量的相应元素的存储位置)和2124(根据来自VIR_FALSE(或VIR_COMBINED的FALSE区段)的加载位置对所加载输入操作数向量的元素运行第二运算)。这样,针对存储在VIR_FALSE(或VIR_COMBINED的FALSE区段)中的位置中的每一者在输入OVR上迭代第二运算。

在一些实施例中,在输入OVR的地址存储于VIR_TRUE和VIR_FALSE(或VIR_COMBINED的TRUE区段和FALSE区段)中之后,所述方法可包含从第二计数器寄存器加载第二计数(其中来自第一计数寄存器的第一计数用于将地址存储于VIR中)。所述方法还可包含从VIR_TRUE(或TRUE区段)根据第二计数加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。所述方法还可包含根据来自VIR_TRUE(或TRUE区段)的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算。

所述方法还可包含将所述第一运算的结果在对应于来自所述VIR_TRUE(或TRUE区段)的加载位置的位置处存储到输出OVR中。所述方法还可包含继续根据来自VIR_TRUE(或TRUE区段)的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第一运算,且将第一运算的结果在与来自VIR_TRUE(或TRUE区段)的加载位置匹配的对应位置处存储到输出OVR中,直到第二计数等于VIR_TRUE(或TRUE区段)的长度,其中所述计数对于来自VIR_TRUE(或TRUE区段)的每加载位置递增。

所述方法还可包含:当所述第二计数等于VIR_TRUE(或TRUE区段)的长度时使所述第二计数复位;以及在使所述第二计数复位之后,根据所述第二计数从VIR_FALSE(或FALSE区段)加载所加载的第一输入操作数向量和第二输入操作数向量的相应元素的存储位置。

所述方法还可包含根据来自VIR_FALSE(或FALSE区段)的加载位置在所加载的第一输入操作数向量和第二输入操作数向量的相应元素上运行第二运算。所述方法还可包含继续根据来自VIR_FALSE(或FALSE区段)的加载位置对所加载的第一输入操作数向量和第二输入操作数向量的相应元素运行第二运算,且将第二运算的结果在与来自VIR_FALSE(或FALSE区段)的加载位置匹配的对应位置处存储到输出OVR中,直到第二计数等于VIR_FALSE(或FALSE区段)的长度,其中所述计数对于来自VIR_FALSE(或FALSE区段)的每加载位置递增。

在本文描述的方法中,第一运算可包含加法、减法、乘法、除法或可由一或多个ALU进行的任何其它类型的运算。而且,第二运算可包含可由一或多个ALU执行的与第一运算不同的运算。

图23说明根据本公开的一些实施例的包含VIR_TRUE 2202a和VIR_FALSE 2202b的实例系统2200,所述VIR_TRUE和所述VIR_FALSE用于对存储于输入操作数向量寄存器2204a和2204b中的输入操作数向量的元素运行第一运算和第二运算。实例系统2200是可至少实施方法2100的系统的一个实例。

在图23中,VIR_TRUE 2202a存储输入OVR 2204a和2204b的位置列表。举例来说,“1”存储在VIR_TRUE 2022a的位置“0”中,其可用作用于存取两个输入OVR 2204a和2204b中的位置“1”的地址。而且,VIR_FALSE 2202b存储输入OVR 2204a和2204b的位置列表。举例来说,“0”和“2”分别存储在VIR_FALSE 2022a的位置“0”和“1”中,所述位置可用作用于存取两个输入OVR 2204a和2204b中的位置“0”和“2”的地址。

在图23的此所说明实例中,展示了向量处理器执行减法运算的至少两个迭代和加法运算的至少一个迭代。在减法运算的至少两个循环的第一迭代中,计数器2206输出“0”的计数,所述计数是在减法模式期间的第一循环中存储在计数器中的值。在减法模式的第一循环中,将VIR_FALSE 2202b展示为从VIR_FALSE的位置“0”输出所选择的地址“0”。在加法运算的至少一个循环的第一迭代中,计数器2206也输出“0”的计数,所述计数是在加法模式期间的第一循环中存储在计数器中的值。在加法模式的第一循环中,将VIR_TRUE 2202a展示为从VIR_TRUE的位置“0”输出所选择的地址“1”。

多路复用器2208在如由处于正常模式操作的计数器2206指定的地址分量(“0”)或如存储在处于TRUE操作模式下的VIR_TRUE 2202a的位置“0”中的地址分量(“1”)或如存储在处于FALSE操作模式下的VIR_FALSE 2202b的位置“0”中的地址分量(“0”)之间进行选择。在下一循环或迭代中,当由计数器2206指定的地址分量是“1”时,则多路复用器2208在如由处于正常模式操作的计数器指定的地址分量(“1”)或如存储在处于TRUE操作模式下的VIR_TRUE 2202a的位置“1”中的地址分量(“5”)或如存储在处于FALSE操作模式下的VIR_FALSE2202b的位置“1”中的地址分量(“2”)之间进行选择,以此类推。换句话说,多路复用器2208在计数器2206、VIR_TRUE 2202a和VIR_TRUE 2202b的输出之间进行选择。而且,由VIR_TRUE2202a和VIR_TRUE 2202b提供的输出是根据计数器2206的计数。在方法2100中,多路复用器2208可在步骤2118中使计数器复位后实施从TRUE模式到FALSE模式的切换。当计数等于VIR_TRUE或VIR_FALSE的向量长度(例如,见VL_VIR_TRUE 2212a和VL_VIR_FALSE 2212b)时,计数器2206复位。这种切换允许步骤2106到2116的循环切换到步骤2120到2130的循环。

应理解,本文中所描述的选择可为根据程序员可见指令和/或可为进行一些高级语义操作的硬连线电路。

当在第一循环中通过多路复用器2208选择TRUE模式时,来自VIR_TRUE 2202a的输出“1”是用于存取输入OVR 2204a和2204b的地址分量。结果,针对位于输入OVR 2204a的位置“1”处的元素“30”和位于输入OVR 2204b的位置“1”处的元素“25”的相应输出,存取输入OVR 2204a和2204b。输出OVR 2210(或第三OVR)也在位置“1”处寻址。在此实例中,位置“1”由多路复用器2208输出,已经将所述多路复用器选择为用于TRUE模式。而且,在TRUE模式中,ALU 2214执行针对图23的此实例的加法操作。加法操作是根据由处于TRUE模式的多路复用器2218选择的第一运算码2216a。具体地说,如图所示,将位于位置“1”处的输入OVR2204a和2204b的元素(元素“30”和“25”)输入到ALU 2214中。ALU 2214将OVR 2204a和2204b的位置“1”的元素相加,且输出加法运算的结果。加法运算的输出接着存储在输出OVR 2210的位置“1”处作为元素“55”(A(1)+B(1)=C(1)或30+25=55)。

当在第一循环中通过多路复用器2208选择FALSE模式时,来自VIR_FALSE 2202a的输出“0”是用于存取输入OVR 2204a和2204b的地址分量。结果,针对位于输入OVR 2204a的位置“0”处的元素“10”和位于输入OVR 2204b的位置“0”处的元素“20”的相应输出,存取输入OVR 2204a和2204b。输出OVR 2210(或第三OVR)也在位置“0”处寻址。在此实例中,位置“0”由多路复用器2208输出,已经将所述多路复用器选择为用于FALSE模式。而且,在FALSE模式中,ALU 2214执行针对图23的此实例的减法运算。减法运算是根据由处于FALSE模式的多路复用器2218选择的第二运算码2216b。具体地说,如图所示,将位于位置“0”处的输入OVR 2204a和2204b的元素(元素“10”和“20”)输入到ALU 2214中。ALU 2214从OVR 2204a的位置“0”的元素减去OVR 2204b的位置“0”的元素,且输出减法运算的结果。减法运算的输出随后存储在输出OVR 2210的位置“0”处作为元素“-10”(A(0)-B(0)=C(0)或10-20=-10)。

应理解,图23中所说明的加法和减法运算仅仅是实例,且可根据VIR 2202a和2202b的寻址对OVR 2204a和2204b执行各种运算。因此,第一运算码2216a可为ALU的任何算术运算的操作码,且第二运算码2216b也可为ALU的任何算术运算的操作码。

如所提及,系统2200可实施方法2100。举例来说,通过向量处理器的向量加载存储单元加载一或多个操作数向量(在步骤2102和2104处),所述一或多个操作数向量中的每一向量可存储于OVR 2204a和2204b中。通过向量加载存储单元加载存储于计数器寄存器中的计数,所述计数可存储于计数器2206中。通过向量处理器的向量加载存储单元从VIR加载所存储的位置(在步骤2108和2122中),所述位置可存储在VIR 2202a和2202b中。在步骤2110和2124中运行第一运算和第二运算可由图23中所描绘的OVR、VIR、多路复用器以及ALU的组合实施。运算结果的存储(在步骤2112和2126中)可在输出OVR 2210处发生。并且,可根据至少存储在寄存器2212a和2212b中的长度来控制方法2100中的循环。

图24说明根据本公开的一些实施例的包含VIR_COMBINED 2302的TRUE区段和FALSE区段的实例系统2300,所述TRUE区段和所述FALSE区段用于对存储于输入操作数向量寄存器2304a和2304b中的输入操作数向量的元素执行第一运算和第二运算。实例系统2300是可至少实施方法2100的大部分的系统的一个实例。

存储于VIR_COMBINED 2302中的地址分量存储于TRUE区段中(例如,地址0、1、2、…、L-1,其中L为TRUE区段的向量长度)或VIR的FALSE区段中(例如,地址N-1、N-2、N-3、…、N-M,其中N为存储于VIR中的索引向量的长度,且M为FALSE区段的向量长度)。取决于实施例,产生TRUE区段中的索引且自上而下存储于VIR_COMBINED 2302中,且产生FALSE区段中索引且自下而上存储于FALSE区段中,或反之亦然。

在图24中,VIR_COMBINED 2302的TRUE区段存储输入OVR 2304a和2304b的位置列表。举例来说,输出位置“1”存储在TRUE区段的位置“0”中,其可用作用于存取两个输入OVR2304a和2304b中的位置“1”的地址。而且,VIR_COMBINED 2302的FALSE区段存储输入OVR2304a和2304b的位置列表。举例来说,“0”和“2”分别存储于FALSE区段的位置“N-1”和“N-2”中(其中N为存储于VIR_COMBINED中的向量索引的长度)。FALSE区段的输出位置可用作用于存取输入OVR 2304a和2304b两者中的“0”和“2”的地址。

在图24的此所说明实例中,展示向量处理器运行加法操作的至少三个循环和减法操作的至少三个循环。在加法操作的至少三个循环的第一迭代处,计数器2306输出计数“0”,其为在加法模式期间在第一循环处存储于计数器中的值。如图所示,加法模式由图24中所示的“模式2”提供。图24中所示的“模式1”提供选择正常操作模式或VIR_COMBINED操作模式的模式。在加法模式的第一循环中,将TRUE区段展示为从VIR_TRUE的位置“0”输出所选地址“1”。在减法运算的至少三个循环的第一迭代中,计数器2306输出计数“N-M”,其为在减法模式期间的第一循环处存储在计数器中的值。在减法模式的第一循环中,将FALSE区段展示为从FALSE区段的位置“N-M”输出所选地址“X”。在减法模式的倒数第二循环中,将FALSE区段展示为从FALSE区段的位置“N-2”输出所选地址“2”。在减法模式的最后一个循环中,将FALSE区段展示为从FALSE区段的位置“N-1”输出所选地址“0”。

多路复用器2308在如由处于正常模式操作中的计数器2306所指定的地址分量(“0”)或如存储于处于TRUE操作模式的TRUE区段的位置“0”中的地址分量(“1”)之间进行选择。在下一循环或迭代中,当由计数器2306指定的地址分量为“1”时,则多路复用器2308在如由处于正常模式操作中的计数器指定的地址分量(“1”)或如存储于处于TRUE操作模式中的TRUE区段的位置“1”中的地址分量(“5”)之间进行选择;以此类推。在计数器2306具有值“N-M”时,操作模式可即刻从TRUE模式切换到FALSE模式。可使用寄存器VL_VIR_FALSE2312b植入确定计数器具有值“N-M”的评估。在计数为“N-M”之后的某一时刻,当计数最终达到“N-1”时,多路复用器2308在如由处于正常操作模式的计数器指定的地址分量(N-1")或如存储于处于FALSE操作模式中的FALSE区段的位置“N-1”中的地址分量(“0”)之间进行选择。

多路复用器2308在计数器2306与VIR_COMBINED 2302的输出之间进行选择。而且,由TRUE区段和FALSE区段提供的输出是根据计数器2306的计数。在方法2100中,多路复用器2308不在步骤2118中使计数器复位后实施从TRUE模式到FALSE模式的切换。以此方式,多路复用器2208与2308以不同方式起作用。在方法2100中,多路复用器2318指示系统2300的操作模式。计数器并不复位,但当计数达到值“N-M”时,操作模式可在系统2300中改变(例如,“模式2”可改变)。当存取TRUE区段的最后一个位置时,计数器2306具有值“L-1”,其中L为TRUE区段的长度。L可存储于VL_VIR_TRUE 2312a中。当存取FALSE区段的第一位置时,计数器2306具有值“N-M”,其中M为FALSE区段的长度,且N为索引向量的总长度。M可存储于VL_VIR_FALSE 2312b中。从步骤2106到2116的循环到步骤2120到2130的循环的切换可经由图24中描绘的所选模式“模式2”发生。并且,当计数等于TRUE区段的长度时,可发生切换。然而,不同于方法2100,不存在计数的复位,因为位置“N-M”是FALSE区段的第一位置而非位置“0”。

当在第一循环中通过多路复用器2318选择TRUE模式时,来自TRUE区段的输出“1”是用于存取输入OVR 2304a和2304b的地址分量。结果,针对位于输入OVR 2304a的位置“1”处的元素“30”和位于输入OVR 2304b的位置“1”处的元素“25”的相应输出,存取输入OVR2304a和2304b。输出OVR 2310(或第三OVR)也在位置“1”处寻址。在此实例中,位置“1”由多路复用器2308输出,已经将所述多路复用器选择为用于COMBINED_VIR模式。在由“模式2”提供的TRUE模式中,ALU 2314执行针对图24的此实例的加法操作。加法操作是根据由处于TRUE模式的多路复用器2318选择的第一运算码2316a。具体地说,如图所示,将位于位置“1”处的输入OVR 2304a和2304b的元素(元素“30”和“25”)输入到ALU 2314中。ALU 2314将OVR2304a和2304b的位置“1”的元素相加,且输出加法运算的结果。加法运算的输出接着存储在输出OVR 2310的位置“1”处作为元素“55”(A(1)+B(1)=C(1)或30+25=55)。

当在循环“N-M”中通过多路复用器2318选择FALSE模式时,来自FALSE区段的输出“X”是用于存取输入OVR 2304a和2304b的地址分量。此过程继续,直到例如发生循环“N-1”。结果,在FALSE模式中的“N-1”循环中,针对输入OVR 2304a的位置“0”处的元素“10”和输入OVR 2304b的位置“0”处的元素“20”的相应输出存取输入OVR 2304a和2304b。输出OVR 2310(或第三OVR)也在位置“0”处寻址。在此实例中,位置“0”由多路复用器2308输出,已经将所述多路复用器选择为用于COMBINED_VIR模式。而且,在FALSE模式中,ALU 2314执行针对图24的此实例的减法运算。减法运算是根据由处于FALSE模式的多路复用器2318选择的第二运算码2316b。具体地说,如图所示,将位于位置“0”处的输入OVR 2304a和2304b的元素(元素“10”和“20”)输入到ALU 2314中。ALU 2314从OVR 2304a的位置“0”的元素减去OVR 2304b的位置“0”的元素,且输出减法运算的结果。减法运算的输出随后存储在输出OVR 2310的位置“0”处作为元素“-10”(A(0)-B(0)=C(0)或10-20=-10)。

应理解,图24中所说明的加法和减法运算仅仅是实例,且可根据VIR 2302a和2302b的寻址对OVR 2304a和2304b执行各种运算。因此,第一运算码2316a可为ALU的任何算术运算的操作码,且第二运算码2316b也可为ALU的任何算术运算的操作码。

如所提及,系统2300可实施方法2100的大部分。举例来说,通过向量处理器的向量加载存储单元加载一或多个操作数向量(在步骤2102和2104处),所述一或多个操作数向量中的每一向量可存储于OVR 2304a和2304b中。通过向量加载存储单元加载存储于计数器寄存器中的计数,所述计数可存储于计数器2306中。通过向量处理器的向量加载存储单元从VIR加载所存储的位置(在步骤2108和2122中),所述位置可存储在VIR_COMBINED的TRUE区段和FALSE区段中。在步骤2110和2124中运行第一运算和第二运算可由图24中所描绘的OVR、VIR_COMBINED、多路复用器以及ALU的组合实施。运算结果的存储(在步骤2112和2126中)可在输出OVR 2310处发生。并且,可根据至少存储在寄存器2312a和2312b中的长度来控制方法2100中的循环。

图25说明根据本公开的一些实施例的包含VIR_TRUE 2402a和VIR_FALSE 2402b的实例系统2400,所述VIR_TRUE和所述VIR_FALSE用于并行地对存储于输入操作数向量寄存器2404a和2404b中的输入操作数向量的元素执行第一运算和第二运算。实例系统2400是可至少实施方法2100的大部分的系统的一个实例。

并行地运行第一运算和第二运算包含并行地存取VIR_TRUE和VIR_FALSE。并行存取VIR_TRUE和VIR_FALSE包含例如在同一时钟循环或迭代中存取VIR_TRUE和VIR_FALSE中的位置i的两次出现。在此类实例中,不将VIR_TRUE和VIR_FALSE、VL_VIR_TRUE和VL_VIR_FALSE的向量长度与计数相比较(如图21和22中所示),且在对操作数向量运行操作期间不使计数复位(如图21中所示)。然而,当并行地存取VIR时,方法2100的步骤2116可在运算的每时钟循环或迭代中发生。而且,在并行存取VIR的此类实例中,步骤2106到2112以及步骤2120到2126也可并行执行。

在图25中,VIR_TRUE 2402a存储输入OVR 2404a和2404b的位置列表。举例来说,“1”存储在VIR_TRUE 2022a的位置“0”中,其可用作用于存取两个输入OVR 2404a和2404b中的位置“1”的地址。而且,VIR_FALSE 2402b存储输入OVR 2404a和2404b的位置列表。举例来说,“0”和“2”分别存储在VIR_FALSE 2022a的位置“0”和“1”中,所述位置可用作用于存取两个输入OVR 2404a和2404b中的位置“0”和“2”的地址。

在图25的此所说明实例中,展示了向量处理器执行减法运算的至少两个循环和加法运算的至少一个循环。在减法运算的至少两个循环的第一迭代中,计数器2406输出“0”的计数,所述计数是在减法模式期间的第一周期中存储在计数器中的值。在减法模式的第一周期中,将VIR_FALSE 2402b展示为从VIR_FALSE的位置“0”输出所选择的地址“0”。在加法运算的至少一个周期的第一迭代中,计数器2406也输出计数“0”,所述计数是在加法模式期间的第一周期中存储在计数器中的值。在加法模式的第一周期中,将VIR_TRUE 2402a展示为从VIR_TRUE的位置“0”输出所选择的地址“1”。

在图25中,不存在用于选择正常或VIR模式或用于选择TRUE或FALSE模式的多路复用器。由于VIR 2402a及2402b的存取及OVR 2404a及2404b上的运算对于分别由TRUE_VIR2402a寻址的运算与由FALSE_VIR 2402b寻址的运算使用单独ALU 2414a及2414b并行地进行,因此不需要多路复用器。

换句话说,在图25的运算的所有时钟循环中运行TRUE模式和FALSE模式。因此,TRUE模式和FALSE模式可彼此并行地运行。

并行地实施运算的一个实例方式为在运行并行运算的系统中使用双存取寄存器。在图25中,为了并行地实施第一运算和第二运算,OVR(例如,OVR 2404a、2404b和2410)为双存取OVR。双存取向量寄存器(例如,OVR 2404a、2404b和2410)各自具有两个地址线和两个输入/输出(I/O)线。举例来说,输出OVR 2410具有地址线I/O

在用于TRUE模式的第一循环中,来自VIR_TRUE 2402a的输出“1”是用于存取输入OVR 2404a和2404b的地址分量。结果,针对位于输入OVR 2404a的位置“1”处的元素“30”和位于输入OVR 2404b的位置“1”处的元素“25”的相应输出,存取输入OVR 2404a和2404b。输出OVR 2410(或第三OVR)也在位置“1”处寻址。在此实例中,由VIR_TRUE 2402a直接输出位置“1”,而不经过多路复用器。ALU 2414a执行针对图24的此实例的加法操作。具体地说,如图所示,将位于位置“1”处的输入OVR 2404a和2404b的元素(元素“30”和“25”)输入到ALU2414a中。ALU 2414a将OVR 2404a和2404b的位置“1”的元素相加,且输出加法运算的结果。加法运算的输出接着存储在输出OVR 2410的位置“1”处作为元素“55”(A(1)+B(1)=C(1)或30+25=55)。

在用于FALSE模式的第一循环中,来自VIR_FALSE 2402B的输出“0”是用于存取输入OVR 2404a和2404b的地址分量。结果,针对位于输入OVR 2404a的位置“0”处的元素“10”和位于输入OVR 2404b的位置“0”处的元素“20”的相应输出,存取输入OVR 2404a和2404b。输出OVR 2410(或第三OVR)也在位置“0”处寻址。在此实例中,由VIR_FALSE 2402b直接输出位置“0”,而不经过多路复用器。ALU 2414B执行针对图24的此实例的减法运算。具体地说,如图所示,将位于位置“0”处的输入OVR 2404a和2404b的元素(元素“10”和“20”)输入到ALU2414b中。ALU 2414b从OVR 2404a的位置“0”的元素减去OVR 2404b的位置“0”的元素,且输出减法运算的结果。减法运算的输出随后存储在输出OVR 2410的位置“0”处作为元素“-10”(A(0)-B(0)=C(0)或10-20=-10)。

应理解,图25中所说明的加法和减法运算仅仅是实例,且可根据VIR 2402a和2402b的寻址对OVR 2404a和2404b执行各种运算。因此,ALU 2414a可执行ALU的任何算术操作,且ALU 2414b也可执行ALU的任何算术操作。

如所提及,系统2400可实施方法2100的大部分。举例来说,通过向量处理器的向量加载存储单元加载一或多个操作数向量(在步骤2102和2104处),所述一或多个操作数向量中的每一向量可存储于OVR 2404a和2404b中。通过向量加载存储单元加载存储于计数器寄存器中的计数,所述计数可存储于计数器2406中。通过向量处理器的向量加载存储单元从VIR加载所存储的位置(在步骤2108和2122中),所述位置可存储在VIR2402a和2402b中。在步骤2110和2124中运行第一运算和第二运算可由图25中所描绘的OVR、VIR以及ALU的组合实施。运算结果的存储(在步骤2112和2126处)可在输出OVR 2410处发生。并且,可根据至少存储在寄存器2412a和2412b(其可分别存储VIR_TRUE 2402A和VIR_FALSE 2402b的向量长度)中的长度来控制方法2100中的循环。

方法600、700、900、1000、1100、1300、1600、1800、1900和2100仅包含可由本文中所描述的向量处理器和系统实施的许多操作中的一些。

已在针对计算机存储器内的数据位的操作的算法和符号表示方面呈现了先前详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用以将其工作的主旨最有效地传达给所属领域的其他技术人员的方式。在本文中,且一般将算法构想为产生所要结果的操作的自洽序列。操作是要求对物理量进行物理操纵的操作。通常(但未必),这些量采用能够存储、组合、比较以及以其它方式操纵的电或磁信号的形式。已经证实,主要出于常用的原因,将这些信号称为位、值、元素、符号、字符、项、编号等等有时是便利的。

然而,应牢记,所有这些和类似术语将与适当物理量相关联,且仅仅为应用于这些量的便利标记。本公开可以指操控和变换计算机系统的寄存器和存储器内的表示为物理(电子)量的数据为计算机系统存储器或寄存器或其它这类信息存储系统内的类似地表示为物理量的其它数据的计算机系统或类似电子计算装置的动作和过程。

本公开还涉及用于执行本文中的操作的设备。此设备可出于既定目的而专门构造,或其可包含由存储在计算机中的计算机程序选择性地激活或重新配置的计算机。这种计算机程序可存储在计算机可读存储媒体中,例如但不限于任何类型的盘,包含软盘、光盘、CD-ROM以及磁性光盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡,或适合于存储电子指令的任何类型的媒体,其各自连接到计算机系统总线。

本文中呈现的算法和显示器在本质上并不与任何特定计算机或其它设备相关。各种系统可根据本文中的教示与程序一起使用,或其可证明构造更专用的设备来进行方法的是方便的。将如下文描述中所阐述的那样来呈现各种这些系统的结构。另外,未参考任何特定编程语言来描述本公开。应了解,可使用各种编程语言来实施如本文中所描述的本公开的教示内容。

本公开可部分地提供为计算机程序产品或软件,所述计算机程序产品或软件可包含其上存储有指令的机器可读媒体,所述指令可用于对计算机系统(或其它电子装置)进行编程以进行根据本公开的过程。机器可读媒体包含用于以机器(例如,计算机)可读的形式存储信息的任何机构。在一些实施例中,机器可读(例如计算机可读)媒体包含机器(例如计算机)可读存储媒体,例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储媒体、光学存储媒体、闪存存储器组件等。

在前述说明书中,本公开的实施例已经参照其特定实例实施例进行描述。将显而易见的是,可在不脱离如所附权利要求书中阐述的本公开的实施例的更广精神和范围的情况下对本公开进行各种修改。因此,应在说明性意义上而非限制性意义上看待说明书和图式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号