利用矢量处理器实现矩阵转置的方法和处理系统的制作方法

文档序号:6611498阅读:216来源:国知局
专利名称:利用矢量处理器实现矩阵转置的方法和处理系统的制作方法
技术领域
本发明涉及信号处理技术领域,尤其涉及一种利用矢量处理器实现矩阵转置的方法和一种利用矢量处理器实现矩阵转置的处理系统。
背景技术
矩阵转置是多维图像和信号处理中常用的处理过程,在现有技术中,主要是以每个矩阵元素为单位,通过按行依次读取数据(内存→寄存器),再按列依次写入数据(寄存器→内存)来完成,也就是说对于M×N的矩阵进行转置,就需要M×N次数据读操作和M×N次数据写操作。
由于内存转移到寄存器需要较长的时间,因此,现有技术中矩阵转置所需的M×N次数据读操作和M×N次数据写操作方案会导致较长的读/写时间,矩阵转置速度必然受到影响,从而成为信号处理过程中的瓶颈。显然,如果能够提高矩阵转置速度,将极大地促进信号处理速度的提高,但目前尚无能够有效提高矩阵转置速度的方案。

发明内容
针对上述现有技术的缺陷,本发明提供一种实现矩阵转置的方案,目的在于提高矩阵转置处理的执行速度。
为实现上述目的,本发明的实施例提供了一种利用矢量处理器实现矩阵转置的方法,包括以下步骤S1、将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;S2、将每一小矩阵的元素以队列为单位从内存输入到矢量处理器中;S3、通过在所述矢量处理器中元素的位移和交换,完成小矩阵转置;S4、将所述矢量处理器中的元素以队列为单位输出到内存中,所述输出地址为根据转置规则进行变换后的地址;
S5、将全部转置后的小矩阵组合为所述待转置矩阵的转置矩阵。
本发明的实施例还提供了一种利用矢量处理器实现矩阵转置的处理系统,包括一内存单元,用于保存待转置矩阵和转置后的矩阵;还包括矢量处理器和一转置控制器;所述转置控制器与所述内存单元和所述矢量处理器连接,用于指令所述内存单元将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;还用于指令所述矢量处理器进行与所述内存单元的小矩阵元素读/写;所述矢量处理器用于根据所述转置控制器的指令,进行小矩阵元素读/写,通过元素的位移和交换操作进行小矩阵转置,并进行输出地址变换。
由上述技术方案可知,本发明通过分解待转置矩阵,采用矢量处理器进行少量的矢量交换、移位操作,具有以下有益效果对于M×N的矩阵进行转置,只需要[M/Y]×N次数据读操作和[M/Y]×N次数据写操作(Y为一个矢量寄存器所包含的元素个数),使数据在内存和寄存器之间的搬移时间大大减少,有效的提高了矩阵转置的执行速度。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


图1为一流程图,显示了本发明所提供的利用矢量处理器实现矩阵转置的方法一实施例;图2为按照图1所示方法,采用多矢量处理器并行实现矩阵转置的方法示意图;图3为按照图1所示方法,采用一矢量处理器串行实现矩阵转置的方法示意图;图4为按照图1所示方法,以2Z×2Z矢量处理器进行元素行转移的一个实施例流程图;图5为按照图1所示方法,以2Z×2Z矢量处理器进行元素列转移的一个实施例流程图;图6A-图6H为数据排列示意图,显示了本发明所提供的利用矢量处理器实现矩阵转置的方法一具体实施例;
图7为一系统框图,显示了本发明所提供的利用矢量处理器实现矩阵转置的处理系统一实施例。
具体实施例方式
为了克服现有技术中进行矩阵转置操作所存在的搬移时间长的缺陷,本发明利用矢量处理器的特点,提出一种新的矩阵转置方法。
所谓的矢量处理器,是随着信号处理技术的发展而出现的一种信号处理器,用于对矢量表示的数据进行存储、算数和逻辑操作。一般矢量处理器的结构如下由矢量运算单元和若干个矢量寄存器构成,每一个矢量寄存器包括若干个元素;其中,同属一个矢量寄存器的元素可以进行位置交换,两个矢量寄存器中相同位置的元素可以进行元素交换。基于矢量寄存器位置交换和元素交换的特性,矢量处理器能够在一定程度上实现对矢量数据的快速、有效处理。
正因为矢量寄存器包括若干个元素,因此,可以一次性写入/或者读出一个寄存器的元素,基于这一特点,本发明的实施例提出了一种利用矢量处理器实现矩阵转置的方法,如图1所示;同时图4和图5给出了图1所示方法的两个具体实施例。
图1所示方法包括以下步骤S1、将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;在本步骤1中,所指的划分为与矢量处理器有效容量匹配的小矩阵,是指根据组成矢量处理器的矢量寄存器的大小和数量,将待转置矩阵划分成适合矢量处理器的小矩阵,其划分的原则是使后续的小矩阵转置操作能在该处理器内完成。
需要指出,矢量处理器的有效容量不一定与矢量寄存器所能容纳的元素数目对应。比如,当矢量处理器的有效容量是16×16时,其可能由32个能容纳8个元素的矢量寄存器组成,每两个矢量寄存器可视为一组,提供对16个元素的支持,效果与一个16位的矢量寄存器相同;这种矢量处理器硬件结构的灵活性,不会影响到本发明的技术效果。
在根据矢量处理器容量进行小矩阵划分的步骤中,较佳的,是选择矢量寄存器的一半可以用于寄存一个小矩阵的所有数据,即矢量处理器的有效容量为其一半矢量寄存器所能容纳的元素,并且在每个矢量寄存器内,至多只包含小矩阵一行/一列的元素。
由于在多数情况下,为了匹配字节处理的需求,矢量处理器有效容量多为2Z×2Z,因此本发明主要描述矢量处理器有效容量为2Z×2Z时的具体处理方案,简称2Z×2Z矢量处理器;但本领域普通技术人员可以理解,2Z×2Z仅为说明而非限制,通过元素交换和位移规则的变化,本发明所提供的技术方案同样适用于有效容量为3Z×3Z、5Z×5Z……的矢量寄存器。
在2Z×2Z矢量处理器条件下,步骤S1可以包括S1-1、将待转置矩阵棋盘式划分为多个S×T小矩阵,该S、T不大于2Z。
举例来说,当待转置矩阵为32×16矩阵,且矢量处理器有效容量为8×8时,可将该待转置矩阵拆分为8个8×8小矩阵,即S=2Z,T=2Z。而且,上述拆分的结果并不唯一,只要矢量处理器的空间足以容纳拆分后的一个小矩阵即可,比如,32×16矩阵也可以拆分为16个4*8小矩阵,由16个8×8矢量处理器进行处理,即S=4<2Z,T=8=2Z。
需要指出,上述划分后的小矩阵无需相同,比如,13×14矩阵可以分解为1个8×8小矩阵,1个5×8小矩阵,1个8×6小矩阵以及1个5×6小矩阵。
上述待转置矩阵拆分方法同样适用于按列转移小矩阵元素的情况。
S2、将每一小矩阵的元素以队列为单位从内存输入到矢量处理器中;在本步骤S2中,可以存在两种处理情况一种方式是只使用一个矢量处理器,对分解后的小矩阵进行串行处理,当前一个小矩阵转置完成后,再输入下一个小矩阵进行转置处理;另一种方式是同时使用多个矢量处理器,对分解后的小矩阵进行并行处理,即同时对几个小矩阵进行转置处理。
无论采取哪一种方式,在2Z×2Z矢量处理器条件下,都可以以队列为单位进行小矩阵元素转移,在本发明的实施例中,分别以行和列为单位进行小矩阵元素转移为例加以说明。
以行为单位进行小矩阵元素转移时,按照以下步骤执行S2-1-1、将每一小矩阵条带式划分为元素行,每一元素行与所述矢量处理器的一个或多个矢量寄存器对应;由于矢量处理器的有效容量不一定与矢量寄存器所能容纳的元素数目对应,因此,每一元素行有可能对应多个矢量寄存器;亦即,从构成矢量处理器的矢量寄存器的角度而言,其可容置一行元素,也可与其他矢量寄存器一起,容置一行元素。当矢量处理器的有效容量为2Z时,如果矢量寄存器所能容纳的元素数目为Y,则共需要X个矢量寄存器来支持一行小矩阵元素,该X=2Z/Y。
以对32×16矩阵进行转置为例当矢量处理器有效容量为8×8且其每一矢量寄存器能容纳8个元素时,如果待转置矩阵被拆分为8×8小矩阵,则其每一矢量寄存器加载一行8个元素;如果带转置矩阵被拆分为16个8×4小矩阵,则其每一矢量寄存器加载一行4个元素。
当矢量处理器有效容量为16×16且其包括32个矢量寄存器,每一矢量寄存器容纳8个元素时,可以根据矢量处理器的有效容量将待转置矩阵划分为两个16×16小矩阵,则小矩阵的每一行需要转移到两个矢量寄存器中,每一矢量寄存器保存半行8个元素。由于保存同一行元素的多个矢量寄存器,其进行位移和交换的处理方式一致,因此,技术效果与将一行元素转移到一个矢量寄存器相同。
S2-1-2、逐行将所述小矩阵的元素行写入对应的矢量寄存器,所述矢量处理器未被占用的位置以0元素进行填充。
最佳的情况,以8个8位矢量寄存器构成的矢量处理器为例,如果待转置矩阵被分解为8×8小矩阵,则每次写入8个元素,矢量寄存器得以充分利用,无需0元素填充;但对于其他一些情况,比如待转置矩阵分解为4×8小矩阵的情况下,由于仅占用四个矢量寄存器,为了保证位移和交换的进行,必须将另外四个矢量寄存器用0元素加以填充;又如待转置矩阵分解为8×4小矩阵的情况下,由于每个矢量寄存器仅利用了4个元素位置,为了保证位移和交换的进行,必须将另外四个元素位置用0元素加以填充;再比如,如果待转置矩阵被分解为5×7小矩阵,那么必须从行、列两方面进行填充。
总而言之,从小矩阵的角度而言,只要其行数/列数不超过矢量处理器的处理能力即可;从每一执行矩阵转置的矢量处理器的角度来说,其所转置的矩阵必须满足行数与列数相等,且行数和列数完全得以利用的条件。比如,如果采用有效容量为3×3的矢量处理器来实现6×5矩阵的转置,就可以将6×5矩阵分解为2个3×3小矩阵和2个3×2小矩阵,则进行元素转移时,通过给3×2小矩阵补充1列0元素,就能够利用4个3×3矢量处理器实现转置。再比如,对于13×14矩阵,通过给其划分后的5×8小矩阵、8×6小矩阵以及5×6小矩阵补充0元素,就能够利用8×8矢量处理器进行转置。
需要指出的是,补充0元素的操作也可以在步骤2之前完成,比如采用8×8的矢量处理器来实现13×14矩阵的转置,就可以先行补充3行0元素和2列0元素,然后将其分解为4个8×8小矩阵。具体地拆分和填充情况视待转置矩阵和矢量处理器有效容量而定,只要满足每一个矢量处理器得以完全利用即可。
可以看出,通过步骤S2-1-1至S2-1-2的按行转移的步骤,每一次的从内存进行读取操作,都能够一次性读取多个小矩阵元素;最佳的,当小矩阵无需采用0元素进行填充时,意味着一次性读取矢量寄存器元素数目个小矩阵元素;则以矢量寄存器中包含Y个元素来说,想将一个M×N的待转置矩阵全部加载到矢量处理器中,只需要[M/Y]×N次数据读操作。相较于现有技术中每一次读取一个数据,显然实现了内存→寄存器的数据转移效率的提高。
上述步骤S2-1-1至步骤S2-1-2是按行转移小矩阵元素,如果是按列进行转移,则执行以下步骤S2-2-1、将每一小矩阵条带式划分为元素列,每一元素列与所述矢量处理器的一个或多个矢量寄存器对应;S2-2-2、逐列将所述小矩阵的元素列写入对应的矢量寄存器,所述矢量处理器未被占用的位置以0元素进行填充。
类似的,通过步骤S2上述按列转移的步骤,每一次的从内存进行读取操作,也都能够一次性读取多个小矩阵元素;当小矩阵没有采用0元素进行列填充时,意味着一次性读取小矩阵元素;以矢量寄存器中包含Y个元素来说,想将一个M×N的待转置矩阵全部加载到矢量处理器中,只需要M×[N/Y]次数据读操作,相较于现有技术中每一次读取一个数据,同样实现了内存→寄存器的数据转移效率的提高。
本领域普通技术人员可以理解,本发明通过按行转移和按列转移为例,以对利用矢量寄存器按队列转移元素进行描述,其仅为举例而非限制。但需要指出,在一般实现中,比较优选的方式为按行转移。
S3、通过在所述矢量处理器中元素的位移和交换,完成小矩阵转置;通过本步骤S3,使小矩阵的转置完全在矢量寄存器中完成,具体为通过矢量寄存器内的元素移位和矢量寄存器间的元素交换完成。
以2Z×2Z矢量处理器进行小矩阵行转移为例,包括以下步骤S3-1-1、对所述矢量处理器中的元素执行位置右移操作,包括将保存第M行元素的矢量寄存器中的每一元素依次向右循环移动(M-1)位,其中,保存第M行元素的矢量寄存器可能为X个,X=2Z/Y,Y为矢量寄存器所能容纳的元素个数;具体来说,就是保存小矩阵第一行元素的矢量寄存器保持不变,保存矩阵第二行元素的矢量寄存器分别依次向右循环移动一个元素的位置,保存矩阵第三行元素的矢量寄存器依次向右循环移动两个元素的位置,以此类推,直到最后一行。
S3-1-2、对矢量寄存器间元素执行位置交换操作,包括当(N+1)不大于Z时,对保存模2(N+1)余n行和模2(N+1)余(n+2N)行元素的矢量寄存器,交换其处于模2(N+1)余(n+2N)、模2(N+1)余(n+1+2N)、……、模2(N+1)余(2(N+1)+n-2)、和模2(N+1)余(2(N+1)+n-1)位置的元素;其中,N取0、1、2、3……矢量寄存器的数量值,n取1,2,……,(2N-1),2N;本步骤S3-1-2的分解表示如下(I)N=0时,2N=20=1,即n能取且仅能取1;模2(N+1)余n为模2余1,模2(N+1)余(n+2N)为模2余2即模2余0;则保存模2余1行(奇数行)和模2余0行(偶数行)元素的矢量寄存器,即序号差1行(邻行)的矢量寄存器进行元素交换;
就具体的交换位置而言,模2(N+1)余(n+2N)为模2余2(模2余0),模2(N+1)余(2(N+1)+n-1)亦为模2余2(模2余0),与模2(N+1)余(n+2N)重合;显然,具体的交换位置能取且仅能取模2余0,即偶数位置。
因此,N=0时,是每一个奇数行矢量寄存器和它的下一偶数行矢量寄存器交换偶数位置的元素。
(II)N=1时,2N=21=2,即n能取1、2;n取1时,模2(N+1)余n为模4余1,模2(N+1)余(n+2N)为模4余3;n取2时,模2(N+1)余n为模4余2,模2(N+1)余(n+2N)为模4余4即模4余0;即,序号差2行的矢量寄存器进行元素交换。
对于模4余1行和模4余3行,n=1;就具体的交换位置而言,模2(N+1)余(n+2N)为模4余3,模2(N+1)余(n+1+2N)=模2(N+1)余(2(N+1)+n-1)=模4余4(模4余0),即模4余1行和模4余3行交换模4余3和模4余0位置的元素;对于模4余2行和模4余0行,n=2;就具体的交换位置而言,模2(N+1)余(n+2N)为模4余4(模4余0),模2(N+1)余(n+1+2N)=模2(N+1)余(2(N+1)+n-1)=模4余5(模4余1),即模4余2行和模4余0行交换模4余0和模4余1位置的元素。
(III)N=2时,2N=22=4,即n能取1、2、3和4;n取1时,模2(N+1)余n为模8余1,模2(N+1)余(n+2N)为模8余5;n取2时,模2(N+1)余n为模8余2,模2(N+1)余(n+2N)为模8余6;n取3时,模2(N+1)余n为模8余3,模2(N+1)余(n+2N)为模8余7;n取4时,模2(N+1)余n为模8余4,模2(N+1)余(n+2N)为模8余8即模8余0;即,序号差4行的矢量寄存器进行元素交换。
对于模8余1行和模8余5行,n=1;就具体的交换位置而言,模2(N+1)余(n+2N)为模8余5,模2(N+1)余(n+1+2N)=模8余6,模2(N+1)余(n+2+2N)=模8余7,模2(N+1)余(n+3+2N)=模2(N+1)余(2(N+1)+n-1)=模8余8(模8余0);即模8余1行和模8余5行交换模8余5、模8余6、模8余7和模8余0位置的元素;对于模8余2行和模8余6行,n=2;就具体的交换位置而言,模2(N+1)余(n+2N)为模8余6,模2(N+1)余(n+1+2N)=模8余7,模2(N+1)余(n+2+2N)=模8余8(模8余0),模2(N+1)余(n+3+2N)=模2(N+1)余(2(N+1)+n-1)=模8余9(模8余1);即模8余2行和模8余6行交换模8余6、模8余7、模8余0和模8余1位置的元素;对于模8余3行和模8余7行,n=3;就具体的交换位置而言,模2(N+1)余(n+2N)为模8余7,模2(N+1)余(n+1+2N)=模8余8(模8余0),模2(N+1)余(n+2+2N)=模8余9(模8余1),模2(N+1)余(n+3+2N)=模2(N+1)余(2(N+1)+n-1)=模8余10(模8余2);即模8余3行和模8余7行交换模8余7、模8余0、模8余1和模8余2位置的元素;对于模8余4行和模8余0行,n=4;就具体的交换位置而言,模2(N+1)余(n+2N)为模8余8(模8余0),模2(N+1)余(n+1+2N)=模8余9(模8余1),模2(N+1)余(n+2+2N)=模8余10(模8余2),模2(N+1)余(n+3+2N)=模2(N+1)余(2(N+1)+n-1)=模8余11(模8余3);即模8余4行和模8余0行交换模8余0、模8余1、模8余2和模8余3位置的元素。
(IV)依次类推,直到,达到N+1大于Z。
S3-1-3、对所述矢量处理器中的元素执行位置左移操作,包括将保存第M行元素的矢量寄存器中的每一元素依次向左循环移动(M-1)位;本步骤S3-1-3为步骤S3-1-1的逆过程。具体来说,保存矩阵第一行元素的矢量寄存器保持不变,保存矩阵第二行元素的矢量寄存器分别依次向左循环移动一个元素的位置,保存矩阵第三行元素的矢量寄存器依次向左循环移动两个元素的位置,以此类推,最后一行,保存矩阵第M行元素的寄存器依次向左循环移动(M-1)个元素的位置。
可以看出,步骤S3-1-1至步骤S3-1-3的操作,都是利用矢量处理器的特性,通过矢量寄存器内元素位置移动和矢量寄存器之间元素位置交换完成小矩阵的转置。
此外,还包括S3-1-4、对于存在0元素填充的情况,删除所有填充的0元素。
上述步骤S3-1-1至步骤S3-1-4给出了行转移的实现方案,如果采用列转移,则步骤S3包括以下步骤S3-2-1、对所述矢量处理器中的元素执行位置右移操作,包括将保存第M列元素的矢量寄存器中的每一元素依次向右循环移动(M-1)位;S3-2-2、对矢量寄存器间元素执行位置交换操作,包括当(N+1)不大于Z时,对保存模2(N+1)余n列和模2(N+1)余(n+2N)列元素的矢量寄存器,交换其处于模2(N+1)余(n+2N)、模2(N+1)余(n+1+2N)、……、模2(N+1)余(2(N+1)+n-2)、和模2(N+1)余(2(N+1)+n-1)位置的元素;其中,N取0、1、2、3……,n取1,2,……,(2N-1),2N;S3-2-3、对所述矢量处理器中的元素执行位置左移操作,包括将保存第M列元素的矢量寄存器中的每一元素依次向左循环移动(M-1)位;S3-2-4、删除所有填充的0元素。
上述两种方案所提供的都是在2Z×2Z矢量处理器中进行小矩阵转置的方案,但本发明并不局限于此。比如,对于3×3矢量处理器,通过相同的右移操作和左移操作步骤,以及交换第1、2行第2个元素,交换第1、3行第3个元素,交换第2、3行第一个元素,即可实现小矩阵转置,在此不再赘述。
S4、将所述矢量处理器中的元素以队列为单位输出到内存中,所述输出地址为根据转置规则进行变换后的地址;本步骤是以矢量寄存器为单位,逐一将其输出写入内存;其中,每一输出与转置后小矩阵的一元素行或者元素列对应。可以看出,通过步骤S4,每一次的内存写入操作都能够写入小矩阵的一行/列元素;以矢量寄存器中包含Y个元素来说,只需要[M/Y]×N或者M×[N/Y]次数据写操作,相较于相较于现有技术中每一次写入一个数据,实现了寄存器→内存的数据转移效率的提高。
具体来说,按行转移的步骤如下S4-1-1、计算所述矢量处理器输入地址相对于首个矢量处理器输入地址的第一偏移量;S4-1-2、根据所述第一偏移量和转置规则,计算所述矢量处理器输出地址相对于首个矢量处理器输出地址的第二偏移量;S4-1-3、根据所述第二偏移量,将所述矢量寄存器中的元素以行为单位输出到内存中。
按列转移的步骤如下S4-2-1、计算所述矢量处理器输入地址相对于首个矢量处理器输入地址的第一偏移量;S4-2-2、根据所述第一偏移量和转置规则,计算所述矢量处理器输出地址相对于首个矢量处理器输出地址的第二偏移量;S4-2-3、根据所述第二偏移量,将所述矢量寄存器中的元素以列为单位输出到内存中。
其中,首个矢量处理器输出地址可以由矢量处理器输出转置结果时确定,也可以由内存写入矢量寄存器时分配好,具体采用哪一种方案,不会影响本发明的整体技术效果。
S5、将全部转置后的小矩阵组合为所述待转置矩阵的转置矩阵;本步骤S5在内存中完成,当每一转置后的小矩阵都被写入内存时,就构成了一个完整的转置矩阵。
通过上述实施例的步骤S1-S5,充分利用了矢量处理器的特性,将标量运算转换为矢量运算,使一个矩阵转置只需要M×N/Y次数据读操作和M×N/Y次数据写操作,以及少量的矢量交换、移位操作。可以看出,采取了上述步骤之后,数据在内存和寄存器之间的搬移时间可以极大地减少,从而有效地提高矩阵转置的执行速度。
需要指出,在上述实施例的描述中,涉及到了并行处理和串行处理两种方式,为了本领域普通技术人员不致产生混淆,下面分别对两种情况加以具体描述参见图2,为并行实现矩阵转置的方法示意图,包括以下步骤首先,对于待转置矩阵进行划分,即将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;其次,同时将多个划分后的小矩阵并行输入相应数目的矢量处理器进行矩阵转置;具体步骤可以包括将多个小矩阵的元素以队列为单位,并行地从内存分别输入到对应的矢量处理器中,在矢量处理器中通过元素的位移和交换完成小矩阵转置,并以队列为单位输出到内存中;其中,如果矢量处理器数目足够,可以实现全部小矩阵的同时输入;否则,可以分批输入。
然后,将全部转置后的小矩阵组合为所述待转置矩阵的转置矩阵。
参见图3,为串行实现矩阵转置的方法示意图,包括以下步骤首先,同样对于待转置矩阵进行划分,即将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;其次,将划分后的一个小矩阵输入一矢量处理器进行矩阵转置;具体步骤可以包括将该小矩阵的元素以队列为单位,从内存输入到该矢量处理器中,在矢量处理器中通过元素的位移和交换完成小矩阵转置,并以队列为单位输出到内存中;然后,再将下一个小矩阵输入该矢量处理器进行矩阵转置,方法与上述具体步骤相同;依次类推,直至最后一个小矩阵处理完成;最后,全部小矩阵组合为所述待转置矩阵的转置矩阵。
可以看出,无论是采用串行处理还是采用并行处理,本发明所提供的技术方案都能够利用矢量处理器实现对于矩阵的转置;当然,并行处理的效率要优于串行处理。
下面,以32×16的矩阵(矩阵的每个元素为32比特)转置为例,说明本发明的具体实施方法。
在本例中,矢量处理器采用的是NXP公司的VD32040处理器,此处理器有16个矢量寄存器,每个矢量寄存器可以存放8个元素,每个元素为32比特的数据;当使用其一半数目的矢量寄存器用于小矩阵元素转移存放,另一半用于为矢量寄存器之间元素交换提供支持时,此矢量处理器的有效容量为8×8。
首先,根据矢量寄存器的大小和数量,将矩阵棋盘式划分成适合矢量处理器的小矩阵。在上述VD32040处理器中,其有效容量为8×8,即可以支持8×8的矩阵转置。所以,32×16的矩阵可以被分割成8个8×8小矩阵,如图6A所示。
其次,对每一小矩阵,将其元素以行为单位从内存转移到对应的矢量处理器;共占有8个矢量寄存器,执行这一步骤后的8个矢量寄存器中数据排列情况如图6B所示。
可以看出,本步骤写入矢量寄存器时,每一小矩阵共执行8次数据读操作,8个小矩阵共执行64次数据读操作。
第三,矢量寄存器内的元素位置右移矢量寄存器1的元素保持不变,矢量寄存器2的元素依次向右移动1个元素的位置,矢量寄存器3的元素依次向右移动2个元素的位置,……,以此类推,矢量寄存器8的元素依次向右移动7个元素的位置。执行这一步骤后的8个矢量寄存器中数据排列情况如图6C所示。
第四,矢量寄存器间的元素位置交换。
由于N取2的时候,2(N+1)=8,故此N不能够取大于2的数值。因而,按照交换规则,矢量寄存器间的元素位置交换由三次交换实现,即N分别取值0,1,2。映射到矢量寄存器中,如下面的描述(1)N=0,序号差1行(邻行)交换偶数位置的元素矢量寄存器1和矢量寄存器2,矢量寄存器3和矢量寄存器4,矢量寄存器5和矢量寄存器6,矢量寄存器7和矢量寄存器8,交换第2,4,6,8位置的元素。执行这一步骤后的8个矢量寄存器中数据排列情况如图6D所示。
(2)N=1,序号差2行交换矢量寄存器1和矢量寄存器3,矢量寄存器5和矢量寄存器7,交换第3,4,7,8位置的元素;矢量寄存器2和矢量寄存器4,矢量寄存器6和矢量寄存器8,交换第4,5,8,1位置的元素。执行这一步骤后的8个矢量寄存器中数据排列情况如图6E所示。
(3)N=2,序号差4行交换矢量寄存器1和矢量寄存器5,交换第5,6,7,8位置的元素;矢量寄存器2和矢量寄存器6,交换第6,7,8,1位置的元素;矢量寄存器3和矢量寄存器7,交换第7,8,1,2位置的元素;矢量寄存器4和矢量寄存器8,交换第8,1,2,3位置的元素。执行这一步骤后的8个矢量寄存器中数据排列情况如图6F所示。
第五,矢量寄存器内的元素位置左移矢量寄存器1的元素保持不变,矢量寄存器2的元素依次向左移动1个元素的位置,矢量寄存器3的元素依次向左移动2个元素的位置,……,以此类推,矢量寄存器8的元素依次向左移动7个元素的位置。至此,8个矢量寄存器中存放的是转置后的小矩阵。执行这一步骤后的8个矢量寄存器中数据排列情况如图6G所示。
第六、将小矩阵的元素从8个矢量寄存器依次转移到内存当中,所述输出地址为根据转置规则进行变换后的地址;全部转置后的小矩阵组合成为该32×16矩阵的转置矩阵。
可以看出,本步骤写入内存时,每一小矩阵共执行8次数据写操作,8个小矩阵共执行64次数据写操作。
其中,地址变换的规则遵从矩阵转置的性质即按行读入,按列输出的规则;以图6A中的R4为例,当按行输出时,其相对于R0(设为地址Addr1)的第一偏移量为4个单位(Addr1+4个小矩阵的偏移),则按列输出时,其输出地址相对于R0T的偏移量为2个单位(Addr2+2个小矩阵的偏移);则根据所述第二偏移量,将所述矢量寄存器中的元素以行为单位输出到内存中即可,如图6H所示。参见图6H,为最终内存中小矩阵的存放情况。
本发明还提供了一种利用矢量处理器实现矩阵转置的处理系统,如图7所示,为一实施例的系统框图,包括内存单元U1、矢量处理器U2和转置控制器U3;所述转置控制器U3与所述内存单元U1和所述矢量处理器U2连接,用于指令所述内存单元U1将待转置矩阵棋盘式划分为多个与矢量处理器U2有效容量匹配的小矩阵,并进行转置后小矩阵的合并;其中,划分的原则是使后续的小矩阵转置操作能在寄存器内完成,一般来说,使矢量寄存器组U2的一半可以用于寄存一个小矩阵的所有数据,并且在每个矢量寄存器内,至多只包含一行的元素;还用于指令所述矢量处理器U2进行与所述内存单元U1的小矩阵元素读/写;其中,所述矢量处理器为一个或多个,分别对应串行处理和并行处理两种情况。图7所示为多个矢量处理器U2的情况,每个矢量处理器都包括多个矢量寄存器(图中未示),每一矢量寄存器用于作为所述小矩阵至多一行元素的载体,进行位移和交换。
所述每一矢量处理器U2用于根据所述转置控制器U3的指令,以队列为单位从所述内存单元U1中读取所述小矩阵的元素,并以队列为单位向所述内存单元U1写入转置后的小矩阵的元素;显然,当矢量寄存器中包含Y个元素时,只需要M/Y×N次数据读操作和M/Y×N次数据写操作;以及,所述每一矢量处理器U2还用于通过元素的位移和交换操作实现小矩阵的转置。
通过本发明提供的处理系统,利用了矢量处理器的特性,将标量运算转换为矢量运算,使一个矩阵转置只需要M/Y×N次数据读操作和M/Y×N次数据写操作,以及少量的矢量交换、移位操作。可以看出,数据在内存和寄存器之间的搬移时间可以极大地减少,从而有效地提高矩阵转置的执行速度。
其中,当所述矢量处理器的有效容量为2Z×2Z时,其包括X×2Z个矢量寄存器用于矩阵转置,且每一矢量寄存器包含Y个元素,X与Y之积为2Z;其中,X取1、2、3……。
所述矢量处理器U2中还包括运算单元(图中未示),用于保存元素位移和交换规则;当所述矢量处理器的有效容量为2Z×2Z为例,进行行转移时,所述元素位移和交换规则包括将保存第M行元素的矢量寄存器中的每一元素依次向右循环移动(M-1)位;在2(N+1)不大于行数/列数的条件下,对保存模2(N+1)余n行和模2(N+1)余(n+2N)行元素的矢量寄存器,交换其处于模2(N+1)余(n+2N)、模2(N+1)余(n+1+2N)、……、模2(N+1)余(2(N+1)+n-2)、和模2(N+1)余(2(N+1)+n-1)位置的元素;其中,N取0、1、2、3……,n取1,2,……,(2N-1),2N;将保存第M行元素的矢量寄存器中的每一元素依次向左循环移动(M-1)位。
进行列转移时,矢量寄存器中元素位移和交换规则类似,在此不再赘述。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
权利要求
1.一种利用矢量处理器实现矩阵转置的方法,其特征在于,包括以下步骤S1、将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;S2、将每一小矩阵的元素以队列为单位从内存输入到矢量处理器中;S3、通过在所述矢量处理器中元素的位移和交换,完成小矩阵转置;S4、将所述矢量处理器中的元素以队列为单位输出到内存中,所述输出地址为根据转置规则进行变换后的地址;S5、将全部转置后的小矩阵组合为所述待转置矩阵的转置矩阵。
2.根据权利要求1所述的利用矢量处理器实现矩阵转置的方法,其特征在于,所述步骤S1包括将待转置矩阵棋盘式划分为多个S×T小矩阵,所述S、T不大于2Z;其中,2Z×2Z为所述矢量处理器的有效容量。
3.根据权利要求1或2所述的利用矢量处理器实现矩阵转置的方法,其特征在于,所述以队列为单位进行小矩阵元素转移为以行/列为单位进行小矩阵元素转移。
4.根据权利要求3所述的利用矢量处理器实现矩阵转置的方法,其特征在于,当以行/列为单位进行小矩阵元素转移时,所述步骤S2包括将每一小矩阵条带式划分为元素行/列,每一元素行/列与所述矢量处理器的一个或多个矢量寄存器对应;逐行/列将所述小矩阵的元素行/列写入对应的矢量寄存器,所述矢量处理器未被占用的位置以0元素进行填充。
5.根据权利要求3所述的利用矢量处理器实现矩阵转置的方法,其特征在于,所述步骤S3包括对所述矢量处理器中的元素执行位置右移操作,包括将保存第M行/列元素的矢量寄存器中的每一元素依次向右循环移动(M-1)位;对矢量寄存器间元素执行位置交换操作,包括当2(N+1)不大于行数/列数时,对保存模2(N+1)余n行/列和模2(N+1)余(n+2N)行/列元素的矢量寄存器,交换其处于模2(N+1)余(n+2N)、模2(N+1)余(n+1+2N)、……、模2(N+1)余(2(N+1)+n-2)、和模2(N+1)余(2(N+1)+n-1)位置的元素;其中,N取0、1、2、3……,n取1,2,……,(2N-1),2N;对所述矢量处理器中的元素执行位置左移操作,包括将保存第M行/列元素的矢量寄存器中的每一元素依次向左循环移动(M-1)位;删除所有填充的0元素。
6.根据权利要求3所述的利用矢量处理器实现矩阵转置的方法,其特征在于,所述步骤S4包括计算所述矢量处理器输入地址相对于首个矢量处理器输入地址的第一偏移量;根据所述第一偏移量和转置规则,计算所述矢量处理器输出地址相对于首个矢量处理器输出地址的第二偏移量;根据所述第二偏移量,将所述矢量寄存器中的元素以行/列为单位输出到内存中。
7.一种利用矢量处理器实现矩阵转置的处理系统,包括一内存单元,用于保存待转置矩阵和转置后的矩阵;其特征在于,还包括矢量处理器和一转置控制器;所述转置控制器与所述内存单元和所述矢量处理器连接,用于指令所述内存单元将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵以及指令所述内存单元将转置后的小矩阵合并;还用于指令所述矢量处理器进行与所述内存单元的小矩阵元素读/写;所述矢量处理器用于根据所述转置控制器的指令,进行小矩阵元素读/写,通过元素的位移和交换操作进行小矩阵转置,并进行输出地址变换。
8.根据权利要求7所述的利用矢量处理器实现矩阵转置的处理系统,其特征在于,所述矢量处理器为一个或多个。
9.根据权利要求7或8所述的利用矢量处理器实现矩阵转置的处理系统,其特征在于,所述矢量处理器的有效容量为2Z×2Z,包括X×2Z个矢量寄存器用于矩阵转置,且每一矢量寄存器包含2Z/X个元素,所述X取1或1以上的整数。
10.根据权利要求9所述的利用矢量处理器实现矩阵转置的处理系统,其特征在于,所述矢量处理器中包括运算单元,用于保存元素位移和交换规则;所述元素位移和交换规则包括将保存第M行/列元素的矢量寄存器中的每一元素依次向右循环移动(M-1)位;在2(N+1)不大于行数/列数的条件下,对保存模2(N+1)余n行/列和模2(N+1)余(n+2N)行/列元素的矢量寄存器,交换其处于模2(N+1)余(n+2N)、模2(N+1)余(n+1+2N)、……、模2(N+1)余(2(N+1)+n-2)、和模2(N+1)余(2(N+1)+n-1)位置的元素;其中,N取0、1、2、3……,n取1,2,……, (2N-1),2N;将保存第M行/列元素的矢量寄存器中的每一元素依次向左循环移动(M-1)位。
全文摘要
本发明公开了一种利用矢量处理器实现矩阵转置的方法和处理系统。该方法包括将待转置矩阵棋盘式划分为多个与矢量处理器有效容量匹配的小矩阵;将每一小矩阵的元素以队列为单位从内存输入到矢量处理器中;通过在所述矢量处理器中元素的位移和交换,完成小矩阵转置;将所述矢量处理器中的元素以队列为单位输出到内存中,所述输出地址为根据转置规则进行变换后的地址;以及,将全部转置后的小矩阵组合为待转置矩阵的转置矩阵。通过本发明公开的方法和系统,对于M×N的矩阵进行转置,只需要[M/Y]×N次数据读操作和[M/Y]×N次数据写操作,使数据在内存和寄存器之间的搬移时间大大减少,有效的提高了矩阵转置的执行速度。
文档编号G06F17/16GK101093474SQ200710141188
公开日2007年12月26日 申请日期2007年8月13日 优先权日2007年8月13日
发明者马振国 申请人:北京天碁科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1