Simd处理模块的制作方法

文档序号:10654140阅读:269来源:国知局
Simd处理模块的制作方法
【专利摘要】提供了一种SIMD处理模块,其包括多个向量处理单元(“VU”),多个向量处理单元能够被用于在向量内的相应的部分(或“子向量”)上执行指令。控制单元确定针对VU中的每个的向量位置指示以指示VU要在向量的哪个部分上执行指令。因此,向量在概念上被划分成子向量,其中,相应的VU并行地在相应的子向量上执行指令。每个VU能够如期望地执行指令,但是仅仅在整个向量的子部分上。这允许指令被编写以用于执行在n路VU上以由多个n路VU执行,其每个在向量的不同点处开始,使得指令能够并行地被执行在向量的多于n个的数据项上。
【专利说明】
SI MD处理模块
【背景技术】
[0001]单指令多数据(snro)处理允许单个指令并行地(S卩,同时地)被执行在多个数据项上。在相同的指令要被应用到多个数据项的情况下,SMD处理能够比单指令单数据(SISD)处理更快。例如,如果指令(例如加法指令)要被执行在向量的数据项上,则Sn?处理模块能够并行地在来自向量的多个数据项上执行指令。因此,snro处理模块能够被用于向量处理。对snro处理模块的使用的一些示例是在图形处理系统、图像处理系统(包括视频处理系统)以及诸如实施数字信号处理(DSP)的系统的信号处理系统中,例如以用于在MMO系统或无线LAN系统中使用以给出一些示例。
[0002]作为示例,Snro处理模块可以包括η路(way)向量处理单元,η路向量处理单元能够并行地在向量的η个数据项上执行指令。例如,4路向量处理单元可以一次在四个数据项上执行指令,并且之后针对向量的下四个数据项重复对指令的执行,以此类推直到已经在向量的数据项中的全部数据项上执行了指令。较宽的向量处理单元(即,具有比η大的值的向量单元)能够并行地在大量数据项上执行指令,因此它可以比较窄的向量处理单元更快地(即,以较少的循环)在数据项的向量上执行指令。因此,在一些实施方式中,较宽的向量处理单元(例如16路向量处理单元)可以比较窄的向量处理单元(例如4路向量处理单元)是更优选的。然而,较宽的向量处理单元在芯片上占用更多的空间(例如面积),并且可能制造起来更昂贵。另外,可能存在宽的向量处理单元的完整宽度不能够被利用的时候(例如,对于处理四个数据项的向量,8路向量处理单元仅仅被一半利用),因此较宽的向量处理单元的效率增益可以比可能另外的向量处理单元预期的要少。另外,宽的向量处理单元可以在被实施在芯片上时引起路由问题,因为向量处理单元中的每路需要访问被用于在snro处理模块与存储器之间转移数据的SMD处理模块的寄存器组(set of registers)。因此,出于以上给出的原因,在一些实施方式中,较窄的向量处理单元(例如,4路向量处理单元)可以比较宽的向量处理单元(例如,16路向量处理单元)更优选。因此,被实施在SMD处理模块中的向量处理单元的宽度取决于Sn?处理模块被实施在其中的系统和该系统的要求来选择。
[0003]要由snro处理模块执行的指令(S卩,snro指令)可以以诸如汇编语言的低级语言来编写以提高指令能够被执行的速度(与使用诸如c的更高级的编程语言编写的指令相比较)。汇编语言指令具有与系统的机器代码指令的强(例如一对一)对应关系,因此汇编语言指令能够以简单且高效的方式被汇编成机器代码(例如以二进制形式)。例如,被用于处理实时数据的计算机系统(例如接收信号(例如电话信号、τν信号或要被实时输出的其他信号)的信号处理系统)可以使用汇编语言指令而非更高级的指令,因为计算机系统的效率很重要。也就是说,计算机系统需要能够实时处理到来的数据。汇编语言对指令要被执行在其上的计算机体系结构是特定的,因此汇编语言指令可以在它们由不同的计算机体系结构执行时是不同的。具体地,SIMD处理模块的结构(例如SMD处理模块内的向量处理单元的宽度)将影响要由SIMD处理模块执行的汇编语言指令的形式。例如,指令可以被布置为由η路向量处理单元执行,由此在指令中隐含的是它被执行在向量的η个数据项(例如数据项O到η-1)上并且之后针对下η个数据项(例如数据项η到2η-1)重复对指令的执行,以此类推直到已经在向量的数据项中的全部数据项上都已经执行了指令。
[0004]例如,用于将来自存储器的向量加载到寄存器中的指令可以以汇编语言来编写如下以用于由4路向量处理单元执行:
[0005]LoadiMM4 DPO APO INC_P4
[000?]其中LoadiMM4是向量处理单元加载来自存储器的四个数据项的指令,APO是指示存储器中的向量的位置的地址指针寄存器,DPO指示向量要被加载到其的寄存器的序列中的第一个寄存器,并且INC_P4是在针对向量的下四个数据项重复指令时地址指针要增加四个位置的指示。该指令被布置为在四个数据项在第一个周期中被加载并且在下一循环上针对向量的下四个数据项重复指令的意义上要被执行在4路向量处理单元上。如果指令在它即将由具有不同宽度的向量处理单元(例如由8路向量处理单元)执行则该指令可能会被改变。
[0007]因此,能够认识到可能几乎不存在或不存在被用于执行特定snro指令的向量处理单元的宽度的选择上的灵活性,因为指令可以被布置为由具有特定宽度的向量处理单元执行。因此,作为示例,如果代码是根据被布置为由包括4路向量处理单元的SMD处理模块的指令来编写的,则将不能够在使用较宽的向量处理单元执行代码以增加并行处理的数据项的数目。

【发明内容】

[0008]提供本
【发明内容】
从而以简化的形式介绍下面在【具体实施方式】中进一步描述的一系列概念。本
【发明内容】
不旨在确定要求保护的主体的关键特征或必要特征,也不旨在用于限制要求保护的主体的范围。
[0009]提供了一种SMD处理模块,其包括:两个或更多个向量处理单元;以及控制单元,其被配置为:接收要执行在一个或多个向量上的一个或多个指令的集合;针对多个向量处理单元中的每个向量处理单元,确定相应的向量位置指示,相应的向量位置指示指示向量处理单元要在其上执行一个或多个指令的集合的一个或多个向量中的每个向量的一部分的位置;并且根据向量位置指示来使得多个向量处理单元在一个或多个向量的部分上执行一个或多个指令的集合。向量位置指示可以例如指示一个或多个向量内的部分的开始位置。
[00?0]提供了一种使用SIMD处理模块的多个向量处理单元在一个或多个向量上执行一个或多个指令的集合的方法,方法包括:针对多个向量处理单元中的每个向量处理单元,确定相应的向量位置指示,相应的向量位置指示指示向量处理单元要在其上执行一个或多个指令的集合的一个或多个向量中的每个的一部分的位置;并且根据向量位置指示使用多个向量处理单元在一个或多个向量的部分上执行一个或多个指令的集合。
[0011]本文中描述的SMD处理模块中的任何可以以硬件被实现在集成电路上。可以提供一种用于生成根据本文中描述的示例中的任何的snro处理模块的计算机可读代码。该计算机可读代码可以被编码在计算机可读存储介质上。
[0012]如对于技术人员而言显而易见的,以上特征可以在适当的情况下被组合,并且可以与本文中描述的示例的方面中的任何进行组合。
【附图说明】
[0013]现在将参考附图详细描述示例,在附图中:
[0014]图1是包括SBffi处理模块的系统的示意图;
[0015]图2示出了图示使用SIMD处理模块的多个向量处理单元在一个或多个向量上执行一个或多个指令的集合的方法的流程图;
[0016]图3图示了能够由SMD处理模块的不同向量处理单元在其上执行指令的向量的数据项;
[0017]图4是包括SM)处理模块的计算机系统的示意图;并且
[0018]图5示出了用于生成体现处理系统的集成电路的集成电路制造系统。
[0019]附图图示了各种示例。技术人员将认识到附图中的图示的元件边界(例如,框、框的组或者其他形状)表示边界的一个示例。可能的是,在一些示例中,一个元件可以被设计为多个元件或者多个元件可以被设计为一个元件。在合适的情况下,在整个附图中使用共同的附图标记来指示相似的特征。
【具体实施方式】
[0020]现在将仅通过举例的方式来描述实施例。
[0021 ] 在本文中描述的示例中,SIMD处理模块包括多个向量处理单元,多个向量处理单元能够被用于在向量的相应的部分上执行指令。也就是说,在本文中描述的示例中,多个向量处理单元中的每个能够在向量的相应的部分上执行指令,由此多个向量处理单元共同地使指令被执行在向量的数据项中的全部数据项上。针对多个向量处理单元中的每个确定向量位置指示以指示向量处理单元要在向量的哪部分上执行指令。例如,向量位置指示可以指示对应的向量处理单元要在其上执行指令的子向量的开始位置。以这种方式,向量可以在概念上被划分成子向量,其中相应的向量处理单元并行地在相应的子向量上执行指令。每个向量处理单元能够之后如期望地执行指令,但是仅仅在整个向量的子部分上。例如,编写的以用于在路向量处理单元上执行的指令能够由多个4路向量处理单元执行,每个以向量内的不同点开始。以这种方式,指令能够并行地被执行在向量的数据项中的多于四个上,即使指令被编写为由4路向量处理单元并行地被执行在四个数据项上。因此,作为示例,能够使用SIMD处理模块的N个向量处理单元(其中,N个向量处理单元中的每个是η路向量处理单元)以并行地(即,同时地)在向量的NXn个数据项上执行编写的以用于由η路向量处理单元执行的指令。
[0022]图1示出了包括耦合到存储器104和指令存储器106的SHffi处理模块102的系统。存储器104和指令存储器106可以例如被实施为随机存取存储器(RAM)。存储器104被布置为存储SMD处理模块102能够在其上执行指令的数据(例如,向量)。指令存储器106被布置为存储例如以汇编语言的要由snro处理模块102在来自存储器104的数据上执行的指令。尽管图1示出了指令存储器106与存储器104分离,但是在一些示例中,指令存储器106能够被实施为存储器104的一部分。snro处理模块102被配置为在数据项上执行SMD指令。具体地,snro处理模块102包括向量处理单元(“VU”)的集合108ο到1083。在图1中示出的示例中,存在四个向量处理单元108ο到1083,但是一般地可以在SMD处理模块102中存在N个向量处理单元(108()至I」108n-1)。向量处理单元108中的每个是η路向量处理单元。例如,η可以是4、8或16,或者任何其他适当的值。SHffi处理模块102包括针对向量处理单元(108ο到1083)中的每个的相应向量处理单元的寄存器组(I1q到IlO3)。每个向量处理单元108被布置为经由它的相应的寄存器组110将数据转移到存储器104并从存储器104转移数据。snro处理模块102还包括控制单元112。控制单元112被布置为从指令存储器106接收指令(例如SMD指令)并且控制向量处理单元108和寄存器组110的操作,使得指令被运行在多个向量处理单元108上。控制单元112可以以硬件、软件或固件来实施。
[0023]参考图2中示出的流程图和图3中示出的示例向量来描述图1中示出的系统的操作。
[0024]在步骤S202中,控制单元112从指令存储器106接收要被执行在一个或多个向量上的一个或多个指令的集合。一个或多个指令的集合形成要执行在一个或多个向量上的操作。例如,操作可以为要将两个向量加在一起。该操作可以包括不包括设置和控制需要的任何的四个指令:(i)用于将第一向量(“向量A”)的数据项加载到寄存器组110的寄存器中的第一加载指令,(ii)用于将第二向量(“向量B”)的数据项加载到寄存器组110的不同寄存器中的第二加载指令,(iii)用于将来自对应寄存器的数据项加在一起的加法指令,以及(iv)用于将结果存储回到存储器的存储指令。指令被布置为由η路向量处理单元执行,使得η路向量处理单元中的每个在向量的η个数据项上执行指令并且之后在向量的下η个数据项上执行指令。
[0025]图3示出了指令(例如,加载指令和加法指令)被执行在其上的两个向量(“向量Α”和“向量B”)的示例。图3还示出了第三向量(“结果”),其是在向量A和B上执行指令的结果。在图3中示出的示例中,向量中的每个包括76个数据项,并且SIMD处理模块102包括四个向量处理单元108ο到1083,向量处理单元中的每个是4路向量处理单元。数据项中的每个包括一位或多位的数据,例如每个数据项可以包括8位、16位、32位或64位的数据或者任何其他适当的数目的位的数据,取决于数据项表示的数据的类型。
[0026]在步骤S204中,控制单元112确定针对多个向量处理单元108中的每个的相应的向量位置指示。向量位置指示中的每个指示对应的向量处理单元要在其上执行指令的向量的部分的位置(例如开始位置)。例如,向量处理单元要在其上执行指令的向量的部分可以是向量内的部分(即“子向量”),由此向量位置指示指示向量内的子向量的位置。在图3中示出的示例中,向量位置指示被标记为“Indo”、“IncU”、“Ind2”和“Ind3”,并且它们指示要由相应的向量处理单元108ο到1083处理的向量内的子向量的开始位置。控制单元112能够基于向量的长度和将要处理向量的部分的向量处理单元的数目来确定向量内的不同子向量的位置。在图3中示出的示例中,向量包括76个数据项,并且四个向量处理单元将要处理向量的相应的四个部分。优选地,控制单元112确定向量内的部分的位置,使得部分大致具有相同大小,即使得不同部分的大小的差异不超过向量处理单元的宽度。这意味着在向量上执行指令涉及的工作大致均等地在不同的向量处理单元之间被共享。在图3中示出的示例中,第一子向量包括向量的数据项O到19,第二子向量包括数据项20到39,第三子向量包括数据项40到59,并且第四子向量包括数据项60到75。
[0027]在图3中,向量包括76个数据项,并且向量处理单元108ο到1083均是4路向量处理单元,S卩η = 4。控制单元112确定向量位置指示,使得每个部分包括η个数据项的倍数(S卩在该示例中为4的倍数)(但是要指出在其他示例中所述部分中的一些部分可以包括不为η的倍数的许多数据项)。在图3中示出的示例中,控制单元112将向量位置指示确定为Indo = O、Indi = 20 ,Ind2 = 40和Ind3 = 60,使得头三个部分均包括20个数据项并且第四个部分包括16个数据项。四个向量处理单元108ο到1083中的每个被布置为并行地在来自它的相应的部分的四个数据项上执行指令。例如,在第一循环中,第一向量处理单元(VUo)被布置为在向量A和B的头四个数据项(例如数据项O到3)上执行指令以确定结果向量的头四个数据项。同时,第二向量处理单元(VU1)被布置为在向量A和B的Ind1位置指示之后的头四个数据项(例如数据项20到23)上执行指令以确定结果向量的对应的数据项。同时,第三向量处理单元(VU2)被布置为在向量A和B的Ind2位置指示之后的头四个数据项(例如数据项40到43)上执行指令以确定结果向量的对应的数据项。同时,第四向量处理单元(VU3)被布置为在向量A和B的Ind3位置指示之后的头四个数据项(例如数据项60到63)上执行指令以确定结果向量的对应的数据项。
[0028]在步骤S206中,控制单元112确定针对向量处理单元中的每个向量处理单元的相应的循环计数器,相应的循环计数器指示相应的向量处理单元要执行以便在向量的对应部分上执行指令的循环的数目。在图3中示出的示例中,头三个向量处理单元108ο到1082将均处理二十个数据项,其中在每个循环中处理四个数据项,因此每个向量处理单元将需要执行五个循环。因此,针对这三个向量处理单元(108ο到1082)的循环计数器最初被设置为五。这被指示在图3中,图3示出了 “初始LCo = 5”、“初始LC1 = 5”和“初始LC2 = 5”。然而,第四向量处理单元1S3将处理十六个数据项,其中在每个循环中处理四个数据项,因此第四向量处理单元1S3将需要执行四个循环。因此,针对第四向量处理单元1S3的循环计数器最初被设置为四。这被指示在图3中,图3示出了 “初始LC3 = 4”。
[0029]控制单元112使向量处理单元108根据向量位置指示来在向量的相应的子向量上执行指令。具体地,控制单元112能够根据相应的向量位置指示(Indo到Ind3)来初始化针对向量处理单元108中的每个的相应的寄存器组110,使得来自不同子向量的数据项被提供到正确的向量处理单元108。例如,控制单元112能够初始化第一组寄存器110Q,使得向量处理单元108ο根据向量位置指示Indo开始在第一个数据项(数据项O)处的执行;控制单元112能够初始化第二组寄存器IlO1,使得向量处理单元1S1根据向量位置指示Ind1开始在数据项(数据项20)处的执行;控制单元112能够初始化第三组寄存器1102,使得向量处理单元1S2根据向量位置指示Ind2开始在数据项(数据项40)处的执行;并且控制单元112能够初始化第四组寄存器1103,使得向量处理单元1S3根据向量位置指示Ind3开始在数据项(数据项60)处的执行。
[0030]在步骤S208中,控制单元112使向量处理单元108ο到1083以在针对其的循环计数器大于零的向量处理单元108处在向量的η个数据项(例如在四个数据项上)执行指令。如以上所提到的,每个向量处理单元108将根据向量位置指示(Indo到Ind3)在向量内的不同位置处开始从而在适当的子向量上执行指令。以这种方式,在图3中示出的示例中,能够使用四个4路向量处理单元108并行地在来自向量的十六个数据项上执行指令。
[0031]如以上所描述的,操作可以包括要在向量的数据项上执行的一个或多个指令的集合。例如,加法操作可以包括四个要执行的指令:用于将向量A的η个数据项加载到适当的寄存器组110的寄存器中的第一加载指令;用于将向量B的η个数据项加载到适当的寄存器组110的寄存器中的第二加载指令;用于将来自向量A和B的η个所加载的数据项加在一起以确定能够被存储在适当的寄存器组110的适当的寄存器中的结果向量的η个数据项的加法指令;以及用于将结果存储回到存储器104的存储指令。
[0032]如以上所描述的,指令可以是汇编语言指令,其中,汇编语言对指令要被执行在其上的计算机体系结构是特定的。例如,指令可以被布置为由η路向量处理单元执行,例如其中在附图中示出的示例中η = 4。因此指令适合于由向量处理单元108ο到1083中的每个执行,因为它们在该示例中是4路向量处理单元。因此,在该示例中,在第一个循环中,向量处理单元108中的每个向量处理单元加载来自向量A和B的从由相应的向量位置指示Indo到Ind3指示的相应的位置开始的四个数据项(利用图3中的实线示出),并且之后将这四个数据项加在一起并存储得到的数据项以表示结果向量的适当的数据项。
[0033]在步骤S210中,向量处理单元108中的每个在它已经完成了在当前循环的四个数据项上执行指令时使它的循环计数器递减(decrement)。因此,在第一个循环之后,向量处理单元108o、108dP1082的循环计数器(LCo、LCdPLC2)被递减到具有值4,并且向量处理单元1083的循环计数器LC3被递减到具有值3。
[0034]在步骤S212中,控制单元112确定循环计数器中的全部的循环计数器是否都为零。如果不是的话,该方法传递回到步骤S208,其中,在下一循环中针对向量处理单元108中的每个的下四个数据项重复对指令的执行。因此,在第二个循环中,第一个向量处理单元108ο在向量的数据项4到7上执行指令,第二个向量处理单元108ι在向量的数据项24到27上执行指令,第三个向量处理单元1082在向量的数据项44到47上执行指令,并且第四个向量处理单元1083在向量的数据项64到67上执行指令。
[0035]在指令中隐含的是它们一次被执行在向量的η个数据项(例如针对数据项O到3,其中在图3中示出的示例中η = 4)上并且之后针对下η个数据项(例如针对数据项4到7,其中η=4)重复对指令的执行,以此类推直到已经在向量的数据项中的全部数据项上都执行了指令。例如,如以上所描述的,用于将来自存储器的向量加载到寄存器中的指令可以以汇编语言来编写如下以用于由4路向量处理单元执行:
[0036]LoadiMM4 DPO APO INC_P4
[0037]其中,LoadiMM4是向量处理单元加载来自存储器的四个数据项的指令,APO是指示存储器中的向量的位置的地址指针寄存器,DPO指示向量要被加载到其的寄存器110的序列中的第一个,并且INC_P4是在针对向量的下四个数据项重复指令时地址指针要增加四个位置的指示。该指令被布置为在四个数据项在第一个周期中被加载并且在下一循环上针对向量的下四个数据项重复指令的意义上要被执行在4路向量处理单元上。然而,在本文中描述的示例中,多个4路向量处理单元能够并发地执行该指令,使得在每个循环中指令能够被执行在多于四个数据项上。这即使在指令隐含地被布置为通过针对不同的向量处理单元设置不同的开始向量位置使得向量处理单元在向量的相应的子向量上执行指令由η路向量处理单元执行的情况下来完成。
[0038I该方法继续重复在相应的向量处理单元108处在子向量的不同数据项上对指令的执行,其中,在每个循环上,步骤S208、S210和S212被执行。在第四个循环上,在步骤S212中,控制单元112确定针对第四个向量处理单元1S3的循环计数器为零(S卩LC3 = O),但是其他循环计数器不为零。因此,方法将通过传递到步骤S208再次重复以执行第五个循环。在第五个循环中,针对向量处理单元1S3的循环计数器为零,因此向量处理单元1S3不在步骤S208中在任何更多的数据项上执行指令(它已经在数据项中的全部数据项的子向量中,即在数据项60到75上执行指令),并且它的循环计数器(LC3)不在步骤S210中被进一步递减(因为其已经为零)。然而,在第五个循环上,其他向量处理单元(108ο到1082)在步骤S208中继续在来自它们的相应的子向量的数据项上执行指令并且在步骤S210中它们的循环计数器被递减至零。
[0039]因此,在第五个循环上,在步骤S212中确定针对向量处理单元108中的全部向量处理单元,循环计数器为零,即LCo = LCi = LC2 = LC3 = O。方法之后传递到步骤S214。
[0040]在步骤S214中,控制单元112确定是否要在指令的结果上(即在图3中示出的“结果”向量上)执行任何后处理。一些操作不需要后处理。例如,用于将常数值加到向量的数据项中的全部数据项上的操作(其能够是有用的,例如以均匀地增加信号值,或增加图像的亮度)将不需要后处理,因为将常数加到向量的数据项中的每一个是独立的过程(即它不依赖于到向量的其他数据项的加法的结果)。然而,其他操作确实需要后处理。例如,执行两个向量的点积的操作将需要一些后处理,因为该操作不能够针对向量的数据项中的每个独立地被执行以确定点积的结果。
[0041]如果要执行后处理,则方法传递到步骤S216,在步骤S216中执行后处理。后处理被执行的方式的细节超出本说明书的范围,但是注意,后处理可以由不同的处理单元(即不是由SMD处理模块102)执行。为在SMD处理模块102处在向量上对指令的执行的结果的向量的数据项被存储在寄存器(IlOo到IlO3)并且可以从寄存器被传递到另外的处理模块(未被示出在图1中)以执行后处理。
[0042]方法从步骤S216传递到步骤S218。另外,注意,如果不存在要执行的后处理,则方法从步骤S214传递到步骤S218。在步骤S218中,控制单元112确定是否存在(包括一个或多个指令的集合)另外的操作要执行。如果存在,则方法传递回到步骤S204,并且方法重复以由此使用SIMD处理模块102的向量处理单元在(一个或多个)适当的向量上执行(一个或多个)下一指令。
[0043]因此,控制单元112使指令的下一集合响应于循环计数器针对指令的当前集合、对于全部向量处理单元(108ο到1083)达到零(一旦在适当的情况下已经执行了对指令的当前集合的结果的任何后处理)而被执行。
[0044]如果控制单元112在步骤S218中确定不再有更多的指令要执行,则方法在S220结束。
[0045]因此,本文中描述的方法允许指令并行地被执行在向量的许多数据项上,例如使用均为η路向量处理单元的N个向量处理单元同时地执行在η X N数据项上。这即使在指令被编写为被执行在η路向量处理单元上时也是能实现的,因为控制单元112确定向量位置指示(例如Indo到Ind3)以指示不同的向量处理单元108应当在其上执行指令的向量的不同部分(或“子向量”)。向量处理单元108中的每个被配置为独立于SHffi处理模块102的其他向量处理单元108在向量的部分上执行指令,因此它们能够彼此并行地在向量的不同部分(子向量)上操作。注意,包括8路向量处理单元的SIMD处理模块不能够一次在8个数据项上执行被编写以用于执行在4路向量处理单元上的指令,因为指令隐含地包含一次在4个数据项上执行指令并且之后针对下4个数据项重复该执行。另外,与具有路由到寄存器组的简单宽的向量处理单元相比较,具有含有相应的寄存器组的多个单独的向量处理单元保持在向量处理单元的不同路与适当的寄存器之间的路由简单。这使SMD处理模块102与包括更少的更宽的向量处理单元的snro处理模块相比较更易于设计和实施(即制造)在芯片中。还通过针对给定实施方式根据需要添加更多或更少的向量处理单元来允许设计容易地被扩展。
[0046]另外,对包括多个向量处理单元的Snro处理模块102的使用允许控制单元112接收要被实施在向量上的指令并且管理不同子向量到相应的向量处理单元的分配。这使包括snro处理模块102的系统与包括每个具有单个向量处理单元的多个snro处理模块的系统相比较更易于操作,因为提供指令的程序不需要访问对向量的哪些部分应当被提供给snro处理模块中的哪些的划分,因为这是由控制单元112完成的。
[0047]snrn处理模块102的向量处理单元108的数目(N)在不同示例中能够是不同的。这使SMD处理模块102在其能够付诸的使用中非常灵活。例如,如果SMD处理模块102被打算用于在其中指令被执行在大的向量上的速度很重要但是其中Sn?处理模块102的面积和成本不是那么重要(例如在高性能计算系统中)的系统中使用,则能够增大向量处理单元的数目(N),例如增大到8、16或更多。相反地,如果SM)处理模块102被打算用于在其中指令被执行在大的向量上的速度不重要但是其中SMD处理模块102的面积和成本很重要(例如在用于在低成本设备或诸如智能电话或平板电脑的移动设备中使用的计算系统中)的系统中使用,则能够减小向量处理单元的数目(N),例如减小到3或更少。对于其中对每秒能够执行的循环的数目存在上限(例如以便使功率消耗最小化或归因于其他约束)的设计,则能够增大向量处理单元的数目(N)以便允许所需要的处理能力。
[0048]在本文中描述的主要示例中,指令由SIMD处理模块102的全部N个向量处理单元(108ο到1S^1)执行。然而,在其他示例中,SIMD处理模块的多个向量处理单元,但是不是snro处理模块的全部向量处理单元可以被用于在向量上执行指令。这可以有助于减少snro处理模块102的功率消耗。在这些其他示例中,控制单元112可以确定N个向量处理单元中的哪些要被包含在被用于在向量上执行指令的多个向量处理单元中。控制单元可以基于以下中的至少一个来执行该确定:(I)向量中的数据项的数目,(ii)SMD处理模块102的向量处理单元的数目(N),以及(iii)向量处理单元的宽度(即值η)。例如,如果向量包括仅仅16个数据项,如果在SHffi处理模块102中存在八个向量处理单元108(即,如果Ν = 8),并且如果向量处理单元中的每个均是4路向量处理单元(B卩,如果η = 4),则控制单元112可以确定SIMD处理模块102中的八个向量处理单元中的仅仅四个被包含在被用于在向量的数据项上执行指令的多个向量处理单元中。
[0049]在以上描述的示例中,操作包括多个指令。在其他示例中,操作可以包括仅仅一个指令,并且一般地操作包括一个或多个指令的集合。
[0050]在示例中,以上描述的指令被执行在多个向量上。在其他示例中,指令可以被执行在仅仅一个向量上,并且一般地指令被执行在一个或多个向量的集合上。
[0051]在以上描述的示例中,向量位置指示(Indo到Ind3)指示向量的部分的开始位置。在其他实施例中,向量位置指示可以以不同方式指示部分的位置,例如通过指示部分的不同预定位置,例如向量内的部分的结束或中心。
[0052]在以上描述的示例中,snro处理模块102中的全部向量处理单元108具有与彼此相同的宽度,即它们都是η路向量处理单元。在其他示例中,向量处理单元中的一些可以具有与snm处理模块中的向量处理单元中的其他向量处理单元不同的宽度。在这些示例中,如果指令被布置为要由一个或多个η路向量处理单元执行,则控制单元112可以使那些指令由snrn处理模块中的η路向量处理单元的集合来执行,然而如果指令被布置为要由一个或多个m路向量处理单元(其中η在m)执行,则控制单元112那些指令由SIMD处理模块中的m路向量处理单元的集合来执行。这在不同类型的指令能够由SIMD处理模块执行的意义上向SIMD处理模块提供更多的灵活性,但是其可以导致更昂贵的且更大的snro处理模块。例如,一个或多个窄处理单元能够被包含在SIMD处理模块中以用于高效地处理标量(scalar)。
[0053]以上描述的SMD处理模块102能够被实施在较宽的计算机系统中。例如,图4示出了计算机系统400,计算机系统400包括Snro处理模块102、存储器402(其可以包括以上描述的存储器104和106)和中央处理单元(CPU)404。计算机系统400还可以包括其他设备406,例如显示器408、接收器410和摄像头412。计算机系统的部件能够经由通信总线414彼此通信。在示例中,计算机系统400可以被实施在诸如移动电话、平板电脑、笔记本电脑、电视或任何其他适当的设备的设备中。在示例中,接收器410可以被配置为接收信号并将它们传递到CPU 404,其中,CPU 404能够被配置为处理信号。CPU 404可以被布置为向SHffi处理模块102卸载操作,例如在操作包括适合于在多个数据项上并行执行的指令的情况下。
[0054]一般地,以上描述的功能、方法、技术或部件中的任何(例如,控制单元112)能够被实施在使用软件、固件、硬件(例如,固定逻辑电路)或者这些实施方式中的任何组合的模块中。术语“模块”、“功能”、“部件”、“±夬”、“单元”和“逻辑”在本文中被用于总体上表示软件、固件、硬件或其任何组合。在优选实施例中,存储器104和106、向量处理单元108和寄存器组110以硬件来实施。
[0055]在控制单元112的软件实施方式的情况下,控制单元表示当执行在处理器上时执行指定任务的程序代码。在一个示例中,描述的控制单元可以通过被配置具有以机器可读形式存储在计算机可读介质上的软件的计算机来执行。计算机可读介质的一个这样的配置是信号承载介质并且因此被配置为将指令(例如,作为载波)例如经由网络发送到计算设备。计算机可读介质还可以被配置为非暂态计算机可读存储介质并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(R0M)、光盘、闪速存储器、硬盘存储器和可以使用磁性技术、光学技术和其他技术来存储指令或其他数据并且能够由机器访问的其他存储器设备。
[0056]所述软件可以以包括用于将计算机配置为执行描述的方法的构成部分的计算机程序代码的计算机程序的形式或者以包括适于在程序在计算机上运行时执行本文中描述的方法中的任何的全部步骤的计算机程序代码模块的计算机程序的形式,并且其中所述计算机程序可以被实现在计算机可读介质上。程序代码能够被存储在一个或多个计算机可读介质中。本文中描述的技术的特征是平台无关的,意味着所述技术可以被实施在具有各种处理器的各种计算平台上。
[0057]本领域技术人员还将意识到,本文中描述的功能、技术或方法中的全部或部分可以由专用电路、专用集成电路、可编程逻辑阵列、现场可编程门阵列等等来实现。例如,所述模块、功能、部件、单元、或逻辑(例如,SMD处理模块102和其部件)可以包括以电路的形式的硬件。这样的电路可以包括在制造工艺中可用的晶体管和/或其他硬件元件。这样的晶体管和/或其他元件可以被用于形成实施和/或包含通过举例的方式诸如寄存器、触发器或锁存器的存储器、诸如布尔运算的逻辑运算符、诸如加法器、乘法器或移位器的数学运算符以及互连件的电路或结构。这样的元件可以被提供为经典电路或标准单元库、宏、或者在其他级别的抽象。这样的元件可以被相互连接在特定布置中。所述模块、功能、部件、单元、或逻辑(例如,SMD处理模块102和其部件)可以包括为固定功能的电路和能够被编程为执行一个或多个功能的电路;这样的编程可以根据固件或软件更新或控制机制来提供。在示例中,硬件逻辑具有实施固定功能操作、状态机或过程的电路。
[0058]还意图包含“描述”或定义实施以上描述的模块、功能、部件、单元或逻辑(例如,snro处理模块102的部件)的硬件的配置的软件,例如HDL(硬件描述语言)软件,如被用于设计集成电路或者用于将可编程芯片配置为实现期望功能。也就是说,可以提供一种计算机可读存储介质,其具有编码在其上的以集成电路定义数据集的形式的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中被处理时将所述系统配置为制造被配置为执行本文中描述的方法中的任何的SMD处理模块或者制造包括本文中描述的任何装置的SMD处理模块。IC定义数据集可以以例如以诸如寄存器传输级(RTL)代码的适当的HDL编写的计算机代码的形式。在集成电路制造系统处处理集成电路定义数据集从而将所述系统配置为制造S頂D处理模块的示例现在将参考图5进行描述。
[0059]图5示出了包括布局处理系统504和集成电路生成系统506的集成电路(IC)制造系统502的示例。IC制造系统502被配置接收IC定义数据集(例如定义如在本文中的示例中的任何中描述的snro处理模块)、处理IC定义数据集并且根据IC定义数据集来生成IC(例如,其实现如在本文中的示例中的任何中描述的SMD处理模块)。对IC定义数据集的处理将IC制造系统502配置为制造实现如在本文中的示例中的任何中描述的snro处理模块的集成电路。更具体地,布局处理系统504被配置为接收并且处理IC定义数据集以确定电路布局。根据IC定义数据集来确定电路布局的方法是本领域中已知的,并且例如可以涉及合成RTL代码以确定要被生成的电路的门级表示,例如在逻辑部件方面(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)。电路布局能够通过确定针对逻辑部件的位置信息根据电路的门级表示来确定。这可以自动地或者在用户参与的情况下完成以便优化电路布局。当布局处理系统504已经确定电路布局时,其可以将电路布局定义输出到IC生成系统506 生成系统506根据电路布局定义来生成1C,如本领域中已知的。例如,IC生成系统506可以实施半导体器件制造工艺以生成1C,其可以涉及光刻和化学处理步骤的多个步骤序列,在其期间电子电路逐渐地被创建在由半导体材料制成的晶片上。电路布局定义可以以掩膜的形式,其能够被使用在光刻工艺中以用于根据电路定义来生成1C。备选地,被提供到IC生成系统506的电路布局定义可以以计算机可读代码的形式,IC生成系统506能够使用其来形成用于在生成IC中使用的适当的掩膜。由IC制造系统502执行的不同工艺可以全部在一个位置中,例如通过一方被实施。备选地,IC制造系统502可以是分布式系统使得工艺中的一些可以在不同位置处被执行,并且可以通过不同方来执行。例如,以下的阶段中的一些:(i)合成表示IC定义数据集的RTL代码以形成要被生成的电路的门级表示,(ii)基于门级表示来生成电路布局,(iii)根据电路布局来形成掩膜,并且(iv)使用掩膜来制造集成电路可以在不同位置中和/或通过不同方来执行。
[0060]在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为在没有处理ic定义数据集的情况下制造snrn处理模块从而确定电路布局。例如,集成电路定义数据集可以定义可配置处理器(例如FPGA)的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可配置处理器。
[0061]在一些示例中,集成电路定义数据集能够包括运行在由数据集定义的硬件上或与由数据集定义的硬件组合地运行的软件。在图5示出的示例中,IC生成系统还可以由集成电路定义数据集配置为在制造集成电路时将根据在集成电路定义数据集处定义的程序代码的固件加载到该集成电路上或者以其他方式向集成电路提供程序代码以用于与集成电路一起使用。
[0062]术语‘处理器,和‘计算机,在本文中用于指代具有使得其能够执行指令的处理能力的任何设备或其部分或者能够执行所述功能或方法中的全部或部分的专用电路、或者其任何组合。
[0063]尽管本主题已经以特定于结构特征和/或方法动作的语言进行描述,但是要理解权利要求中限定的主题不一定限于以上描述的具体特征或动作。相反,以上描述的具体特征和动作被公开为实施权利要求的示例形式。将理解,以上描述的益处和优点可以涉及一个示例或可以涉及若干示例。
[0064]如将对技术人员显而易见的,可以在不丧失寻求的效果的情况下扩展或更改本文中给出的任何范围或值。本文中描述的方法步骤可以以任何适当的顺序或者在合适的情况下同时地来执行。在不丧失寻求的效果的情况下,以上描述的示例中的任何的方面可以与描述的其他示例中的任何的方面进行组合以形成另外的示例。
【主权项】
1.一种S頂D处理模块,包括: 两个或更多个向量处理单元;以及 控制单元,所述控制单元被配置为: 接收要被执行在一个或多个向量上的一个或多个指令的集合; 针对多个所述向量处理单元中的每个向量处理单元,确定相应的向量位置指示,所述相应的向量位置指示指示所述向量处理单元要在其上执行一个或多个指令的所述集合的所述一个或多个向量中的每个向量的一部分的位置;并且 根据所述向量位置指示来使得所述多个向量处理单元在所述一个或多个向量的部分上执行一个或多个指令的所述集合。2.根据权利要求1所述的SMD处理模块,其中所述向量位置指示指示所述一个或多个向量内的所述部分的开始位置。3.根据权利要求1或2所述的snro处理模块,其中所述部分是所述一个或多个向量内的子向量,并且其中所述向量位置指示指示所述一个或多个向量内的所述子向量的位置。4.根据前述权利要求中任一项所述的snro处理模块,其中所述控制单元被配置为基于以下各项来确定所述一个或多个向量内的所述部分的所述位置:(i)所述一个或多个向量的长度,以及(ii)所述多个向量处理单元中的向量处理单元的数目。5.根据前述权利要求中任一项所述的snro处理模块,其中所述控制单元被配置为确定所述一个或多个向量内的所述部分的所述位置,使得不同部分的大小的差异不超过所述向量处理单元的宽度。6.根据前述权利要求中任一项所述的snro处理模块,还包括用于所述向量处理单元中的每个向量处理单元的相应的寄存器组。7.根据权利要求6所述的SIMD处理模块,其中所述控制单元被配置为使得所述多个向量处理单元通过根据相应的所述向量位置指示初始化用于所述多个向量处理单元中的每个向量处理单元的寄存器组、根据所述向量位置指示来在所述一个或多个向量的部分上执行一个或多个指令的所述集合。8.根据前述权利要求中任一项所述的snro处理模块,其中所述多个向量处理单元中的每个向量处理单元是η路向量处理单元,并且其中所述集合中的所述一个或多个指令被布置为由η路向量处理单元执行,使得所述集合中的所述一个或多个指令由所述多个向量处理单元中的每个向量处理单元执行在向量的η个数据项上,并且之后由所述多个向量处理单元中的每个向量处理单元针对下η个数据项重复对所述集合中的所述一个或多个指令的执行。9.根据权利要求8所述的S頂D处理模块,其中η= 4。10.根据权利要求8或9所述的SMD处理模块,其中针对所述一个或多个向量的所述部分中的每个部分,在该部分中包含的数据项的数目是η的倍数。11.根据前述权利要求中任一项所述的SMD处理模块,其中所述控制单元被配置为确定用于所述多个向量处理单元中的每个向量处理单元的相应的循环计数器,所述相应的循环计数器指示所述向量处理单元要执行以便在所述向量处理单元要在其上执行一个或多个指令的所述集合的所述一个或多个向量的所述部分上执行一个或多个指令的所述集合的循环的数目,其中所述向量处理单元被配置为在每个循环上,在来自所述一个或多个向量的所述部分的η个数据项上执行一个或多个指令的所述集合并且使所述向量处理单元的循环计数器递减。12.根据权利要求11所述的SIMD处理模块,其中所述控制单元被配置为使得一个或多个指令的下一集合响应于针对一个或多个指令的当前集合、对于全部所述多个向量处理单元所述循环计数器达到零而被执行。13.根据前述权利要求中任一项所述的SMD处理模块,其中所述多个向量处理单元包括所述两个或更多个向量处理单元中的全部向量处理单元。14.根据权利要求1至12中任一项所述的snro处理模块,其中所述多个向量处理单元包括所述两个或更多个向量处理单元中的一些但不是全部向量处理单元。15.根据权利要求14所述的SMD处理模块,其中所述控制单元还被配置为基于以下中的至少一项来确定所述两个或更多个向量处理单元中的哪些向量处理单元要被包括在要被用于在所述一个或多个向量上执行一个或多个指令的所述集合的所述多个向量处理单元中:(i)所述一个或多个向量中的数据项的数目,(ii)所述SIMD处理模块中的向量处理单元的数目,以及(iii)所述向量处理单元的宽度。16.根据前述权利要求中任一项所述的SMD处理模块,其中所述多个向量处理单元中的每个向量处理单元被配置为独立于所述多个向量处理单元中的其他向量处理单元在向量的部分上执行指令。17.根据前述权利要求中任一项所述的SIMD处理模块,其中一个或多个指令的所述集合形成要被执行在所述一个或多个向量上的操作。18.—种使用SIMD处理模块的多个向量处理单兀在一个或多个向量上执行一个或多个指令的集合的方法,所述方法包括: 针对所述多个向量处理单元中的每个向量处理单元,确定相应的向量位置指示,所述相应的向量位置指示指示所述向量处理单元要在其上执行一个或多个指令的所述集合的所述一个或多个向量中的每个向量的一部分的位置;并且 根据所述向量位置指示使用所述多个向量处理单元在所述一个或多个向量的部分上执行一个或多个指令的所述集合。19.根据权利要求18所述的方法,还包括: 确定用于所述多个向量处理单元中的每个向量处理单元的相应的循环计数器,所述相应的循环计数器指示所述向量处理单元要执行以便在所述向量处理单元要在其上执行一个或多个指令的所述集合的所述一个或多个向量的所述部分上执行一个或多个指令的所述集合的循环的数目;并且 在每个循环上,所述向量处理单元中的每个向量处理单元:(i)根据所述向量位置指示在来自所述一个或多个向量的适当部分的η个数据项上执行一个或多个指令的所述集合,以及(i i)使所述向量处理单元的循环计数器递减。
【文档编号】G06F9/38GK106020776SQ201610176658
【公开日】2016年10月12日
【申请日】2016年3月24日
【发明人】P·默林, G·戴维斯, A·安德森
【申请人】想象技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1