基于数据粒度的混洗开关矩阵压缩方法

文档序号:6336795阅读:429来源:国知局
专利名称:基于数据粒度的混洗开关矩阵压缩方法
技术领域
本发明主要涉及采用单指令流多数据流(Single Instruction stream Multiple Data streams, SIMD)技术的通用处理器或数字信号处理器(Digital Signal Processor, DSP)领域,特指一种应用于SIMD或DSP中的混洗开关矩阵压缩方法。
背景技术
以子字并行和向量技术为代表的SIMD技术在解决媒体处理和无线通信等数据运 算密集型应用中具有很大的优势,因而得到了广泛的应用和发展,受到了处理器特别是DSP 的青睐。混洗单元主要负责SIMD部件各个处理单元寄存器之间数据的交互,是制约并行的 处理单元性能发挥的关键部件。混洗单元的硬件主体结构一般有以下三种方式,分别为交叉开关(Crossbar)、多 级网络和完全混洗交换网络。这三种结构当中Crossbar的灵活性最强,多级网络次之,完 全混洗交换网络最差;完全混洗交换网络的硬件实现开销最小且扩展性也比较好,多级网 络次之,Crossbar最差。由于嵌入式应用需要的混洗模式的多样性,Crossbar的使用最为 广泛,本发明所论述的方法也以混洗单元的硬件结构为Crossbar为背景。在以Crossbar为主要硬件结构的混洗单元中,混洗模式是和控制控制Crossbar 中每个开关节点断开或导通的01值组成的矩阵是一一对应的。将控制Crossbar中每个开 关节点断开或导通的01值组成的矩阵称之为开关矩阵,用户在执行混洗指令时(或之前) 必须直接或间接告诉Crossbar本次混洗所需要的开关矩阵。由于开关矩阵本身的数据量 比较大,需要对其进行压缩。一方面,这种压缩是非常必要的,开关矩阵的数据量和SIMD数 据通路的宽度的平方成正比,随着SIMD数据通路的宽度的增加,开关矩阵的数据量会急剧 膨胀;另一方面,必须要考虑到解压时电路的复杂性,宜采用比较简单的压缩解压技术,以 便在关键路径延时和压缩效率方面进行折衷。传统的混洗单元和混洗指令中,一般采用最小数据粒度索引法来进行压缩。如图1 所示,是传统的采用最小数据粒度索引法的压缩流程示意图一个混洗请求进行开关矩阵 压缩时,不考虑其数据粒度,将其数据粒度设置为最小数据粒度,然后按照当前粒度索引法 对开关矩阵进行索引压缩,然后判断当前混洗请求是否是程序中的最后一个混洗请求,如 果不是则继续对下一个混洗请求进行开关矩阵的压缩处理,否则处理完毕。以摩托罗拉公司为设计主体的AltiVec指令集为例,在AltiVec指令集中,向量的 宽度为128bits(16个字节),且混洗的最小数据粒度为8bits,AltiVec指令集中的混洗指 令VPERM使用了一个向量寄存器(USbit)表示混洗模式,该向量寄存器共分为16个域(每 一个Sbits),分别指示目标向量寄存器的每一个字节分别来自源向量寄存器中的哪一个字 节(即每一个域表示了开关矩阵中的一行),类似的还有飞利浦公司的EVP处理器的SHF指 令。这种最小数据粒度索引法的开关矩阵压缩方法在目前的向量处理器中使用比较 广泛,但这种方法对于不同数据粒度的混洗请求的压缩效率是一样的,并且整体的压缩效率较低。不同应用的程序(或同一个应用程序不同的程序段)往往具有不同的数据宽度, 如在视频算法中,数据宽度以字节或半字居多,在无线通讯算法中,复数运算(数据宽度为 字或双字)所占的比例很大,上述现象也导致了不同程序(或同一个应用程序不同的程序 段)的混洗请求的数据粒度也存在较大差异,这为本发明寻求更高效的开关矩阵压缩方法 提供了可能。

发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一 种原理简单、操作简便、能够有效提高混洗模式存储器的利用率、提高压缩效率的基于数据 粒度的混洗开关矩阵压缩方法。为解决上述技术问题,本发明采用以下技术方案一种基于数据粒度的混洗开关矩阵压缩方法,其特征在于步骤为步骤1 混洗请求在进行基于数据粒度的混洗开关矩阵压缩时,首先当前混洗请 求的数据粒度设置为最小数据粒度;步骤2 判断当前混洗请求的数据粒度是否可以加倍,如果不可以加倍,则转至步 骤3;否则跳转至步骤4;步骤3 将当前的数据粒度加倍,并基于加倍后的数据粒度对当前的混洗开关矩 阵进行压缩,并跳转至步骤2;步骤4:按照该混洗请求,使用当前粒度索引法对现有的开关矩阵进行进一步的 压缩;步骤5 判断当前的混洗请求是否是程序中的最后一个混洗请求,如果不是,则处 理下一个混洗请求,并转至步骤1,否则算法结束。作为本发明的进一步改进所述步骤2的流程为2. 1将标识当前混洗请求的数据是否可加倍的变量s设置为1,同时将变量i和j 设置为0 ;2. 2判断当前的混洗开关矩阵χ中的元素是否满足下面两个条件之一①.Xi,」、
这四个元素全部为0 ;②.Xi,^ xi+1,J+1这两个元素为1,且 Xi+l, j、Xi, j+i Vi 两个元素为0,若不满足,则设置S为0,并转至2. 5 ;否则转至2. 3 ;2. 3判断j是否等于当前开关矩阵的规模η减去2,如果是,则转至2. 4,否则j自 增2,并且转至2.2;2. 4判断i是否等于当前开关矩阵的规模η减去2,如果是,则转至2. 5,否则i自 增2,j等于0,并且转至2.2;2. 5若当前s = 1,则当前混洗请求的数据粒度可以加倍,否则不可以加倍。所述步骤4的流程为4. 1将变量i设置为0 ;4. 2判断当前数据粒度的开关矩阵的第i行的元素是否全部为0,如果是则将最终 混洗模式SF的第i域的最高位SF_i[log2n]赋值为1,其余位置SF_i [log2n-l 0]赋值为0,并且跳转至4. 4,否则将SF_i [log2n]赋值为0,设置变量j为0,并且跳转至4. 3 ;4. 3判断当前数据粒度的开关矩阵的第i行第j列的元素是否为1,若是则将SF_ i[log2n-l:0]赋值为j,并跳转至4. 4,否则将j自增1,并转至4. 3 ;4. 4将i自增1 ;并判断i是否小于当前数据粒度的开关矩阵的规模n,若是,则跳 转至4. 2,继续压缩开关矩阵的下一行元素,否则压缩完毕,得到的SF_0,SF_i,…,SF_n-l 即为最终的混洗模式。与现有技术相比,本发明的优点在于1.提出的混洗矩阵压缩技术,能够有效地提高混洗模式存储器的利用率,使存储 混洗模式的存储器得到充分的利用;2.应用本发明,同一个应用程序所需要的混洗模式的总数据量较少,在执行应用 程序时,加载混洗模式的数据量也对应变少,降低了功耗;3.解压电路简单,对关键路径延时影响较小。应用本发明提出方法,解压电路只需 在传统方法的译码电路基础上增加少量的信号复制逻辑,硬件复杂度不大。4.综上所述,本发明提出的方法能够有效地压缩开关矩阵的容量,并且对现有解 压电路的影响不大,为向量处理器混洗指令和混洗单元的接口设计提供了新的思路。


图1是采用最小数据粒度索引法的压缩流程示意图;图2是本发明基于数据粒度的混洗开关矩阵压缩方法的流程示意图;图3是本发明中判断当前混洗请求的数据粒度是否可以加倍的算法流程示意图;图4是具体实施中当前粒度索引法的流程示意图;图5是数据粒度较大的混洗请求的开关矩阵采用传统方法的压缩过程示意图;图6是数据粒度较大的混洗请求的开关矩阵采用本发明提出的方法的压缩过程 示意图。
具体实施例方式以下将结合说明书附图和具体实施例对本发明做进一步详细说明。本发明在预处理阶段,对于每个混洗请求,逐级确定其最终的混洗数据粒度,并按 照逐级确定的数据粒度对开关矩阵进行压缩,最后按照当前粒度索引法进行进一步压缩, 从而完成对开关矩阵最终的压缩。假设处理器的数据通路总宽度为W bits,最小数据粒度为G bits, Crossbar的规 模为N*N,且每个端口的宽度为G bits (这里的W和G均为2的整数次幂,且N = W/G),则 每一个混洗请求的混洗模式在初始时为一个N*N的开关矩阵,设其为X,且其中每一个元素 的数值为Xi,」(1彡i彡N-l,1彡j彡N-1),假设处理器支持的最大数据粒度为M bits,则 T = log2(M/G)0设当前混洗请求的开关矩阵为X,当前混洗请求的开关矩阵规模为n*n当前混洗
请求的开关矩阵中的元素为Xi, j(l彡i彡n-1,1彡j彡n-1),当前混洗请求的数据粒度为 g°如图2所示,本发明基于数据粒度的混洗开关矩阵压缩方法的流程为
步骤1 混洗请求在进行基于数据粒度的开关矩阵压缩时,首先当前混洗请求的 数据粒度设置为最小数据粒度;即设置X = X, g = G, η = N, Xijj = XijJd ( i ^N-I, 1彡j彡N-1),t = 0,并转至步骤2 ;步骤2 判断当前混洗请求的数据粒度是否可以加倍,如果不可以加倍,则转至步 骤3;否则跳转至步骤4;步骤3 将当前的数据粒度加倍,并基于加倍后的数据粒度对当前的开关矩阵 进行压缩,并跳转至步骤2 ;设压缩后的开关矩阵为y,则压缩的方法为设置yy = xi#2, j*2(l ( i ( n/2-1,1 ^ j ( ηΛ-l),设置 g = 2g, χ = y, η = η/2, t = t+1 ;若 t 彡 T,则 转至步骤2,否则跳至步骤4;步骤4:按照该混洗请求,使用当前粒度索引法对现有的开关矩阵进行进一步的 压缩;步骤5 判断当前的混洗请求是否是程序中的最后一个混洗请求,如果不是,则处 理下一个混洗请求,并转至步骤1,否则算法结束。如图3所示,为上述步骤2中判断当前混洗请求的数据粒度是否可以加倍的算法 流程示意图2. 1将标识当前混洗请求的数据是否可加倍的变量s设置为1,同时将变量i和j 设置为O ; S卩,定义变量S标识当前混洗请求的数据粒度是否为2g(s = 1表示是,S = 0表 示否),设置s = 1,设置i = 0,j = 0 ;2. 2判断当前的开关矩阵χ中的元素是否满足下面两个条件之一①.Xi, xi+1,j> ΧΜ·+1、Χ +1,」+1这四个元素全部为0 ;②· XiijJw, j+1这两个元素为1且Xi+1,j、Xi,j+1这两个元 素为0。若不满足,则设置s为0,并转至2. 5 ;否则转至2. 3 ;2. 3判断j是否等于当前开关矩阵的规模η减去2 (即η_2),如果是,则转至2. 4, 否则j自增2 (j = j+2),并且转至2. 2 ;2. 4判断i是否等于当前开关矩阵的规模η减去2 (即η_2),如果是,则转至2. 5, 否则i自增2 (i = i+2),j等于0,并且转至2. 2 ;2.5若当前S = 1,则当前混洗请求的数据粒度可以加倍(即当前混洗请求的数据 粒度为2g),否则不可以加倍(即当前混洗请求的数据粒度为g)。如图4所示,为传统的最小数据粒度索引法和本发明提出的基于数据粒度的混洗 开关矩阵压缩方法中共有的子算法——当前粒度索引法的流程示意图,即上述步骤4,设最 终的混洗模式为SF,则SF共有η个域,每个域的位数l+log2n,这里用SF_i [j]
O^ j ^ log2n)表示混洗模式域i的第j位,具体流程为4. 1将变量i设置为0 ;4. 2判断当前数据粒度的开关矩阵的第i行的元素是否全部为0,如果是则将最终 混洗模式SF的第i域的最高位SF_i[log2n]赋值为1,其余位置SF_i [log2n-l 0]赋值为 0,并且跳转至4. 4,否则将SF_i [log2n]赋值为0,设置变量j为0,并且跳转至4. 3 ;4. 3判断当前数据粒度的开关矩阵的第i行第j列的元素是否为1,若是则将SF_ i[log2n-l:0]赋值为j,并跳转至4. 4,否则将j自增1,并转至4. 3 ;4. 4将i自增1 ;并判断i是否小于当前数据粒度的开关矩阵的规模n,若是,则跳 转至4. 2,继续压缩开关矩阵的下一行元素,否则压缩完毕,得到的SF_0,SF_1,…,SF_n-l为最终的混洗模式。由上可知,本发明提出的方法是对传统的最小数据粒度索引法的改进,如果不进 行上述的第一到第四步,而直接进行第五步,该方法就是最小数据粒度索引法。本发明提出 的方法主要特征是对混洗请求的数据粒度进行了区分,对于一个N*N的开关矩阵,能够将 其压缩至N/^—Wa+lc^jN/^—1))位(这里的χ为当前混洗请求的数据粒度是最小数据粒 度的倍数),而传统的最小数据粒度索引法只能将其压缩为N*(l+log2N)位,当混洗请求的 粒度不等于最小数据粒度,即χ > 1时,本发明提出的方法对开关矩阵的压缩效果将远远优 于传统的方法。针对上述的基于数据粒度的开关矩阵压缩方法,本发明提出了如下混洗指令 SHUF (B, H, W, Dff) (Mode),VRi,VRj.其中 SHUFB、SHUFH、SHUFff 和 SHUFDW 分别标识混洗的粒 度为字节、半字、字和双字;Mode标识对应的混洗模式在存储器中的地址(在具体实现时, 也可以不设置Mode,这时默认对应的混洗模式存放在某个寄存器中,程序员需要提前将混 洗模式搬移到这个寄存器);VRi和VRj分别标识混洗操作的源操作数所在寄存器编号和目 的操作数所在的寄存器编号。本发明提出的方法在混洗指令执行,且混洗模式解压为开关矩阵时,只需在传统 方法的译码电路基础上增加少量的信号复制逻辑,因而对关键路径延时影响很小。如图5所示,为数据粒度较大的混洗请求的开关矩阵采用传统方法的压缩过程示 意图图中a,b,c,d,e,f,g, h,A, B, C,D,E,F,G,H中的每一个元素的宽度均8bits,混洗 单元中的Crossbar的规模为16*16,且端口的宽度为8bits,能够支持的混洗请求的最小数 据粒度也为^Dits。将向量abcdefghABCDEFGH混洗为向量efghEFGHabcdOOOO,其混洗模式 对应的原始开关矩阵为一个16*16的01矩阵(如图中左下部分所示),传统的最小数据粒 度索引法直接对原始开关矩阵按照图4所示的步骤进行压缩,原始开关矩阵中的第0行为 0000_1000_0000_0000,因为这一行的元素不全为0,所以压缩后的混洗模式的第0域的最 高位为0 ;同时因为这一行的第4个元素为1,所以压缩后的混洗模式的第0域的最低四位 为4(原始开关矩阵中的第1 15行的压缩过程这里不再赘述)。采用传统方法,示例中的 256个元素的开关矩阵被压缩为80bits。如图6所示,为数据粒度较大的混洗请求的开关矩阵采用本发明提出的方法的压 缩过程示意图。显然,图中所示的混洗请求和图5中的示例完全相同。按照本发明提出的方 法,原始的混洗请求的数据粒度可以为2倍的最小数据粒度,S卩16bits,此时原始的开关矩 阵可以压缩为2倍最小数据粒度压缩后的开关矩阵(其规模变为原来的1/4);更进一步, 2倍最小数据粒度压缩后的开关矩阵还可以继续被压缩,即按照数据粒度为32bits进行压 缩,此时2倍最小数据粒度压缩后的开关矩阵压缩为4倍最小数据粒度压缩后的开关矩阵 (其规模变为原来的1/4,变为原始开关矩阵的1/16);最后再按照32bits索引的方法(图 4所描述的方法)压缩为001_011_001_100,这样采用本发明提出方法,示例中的256个元 素的开关矩阵最终被压缩至12bits,相对于传统的方法,本发明提出的方法的压缩率提高 了 6倍以上。以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡 属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通 技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1.一种基于数据粒度的混洗开关矩阵压缩方法,其特征在于步骤为步骤1 混洗请求在进行基于数据粒度的混洗开关矩阵压缩时,首先当前混洗请求的 数据粒度设置为最小数据粒度;步骤2 判断当前混洗请求的数据粒度是否可以加倍,如果不可以加倍,则转至步骤3 ; 否则跳转至步骤4 ;步骤3 将当前的数据粒度加倍,并基于加倍后的数据粒度对当前的混洗开关矩阵进 行压缩,并跳转至步骤2;步骤4 按照该混洗请求,使用当前粒度索引法对现有的开关矩阵进行进一步的压缩;步骤5 判断当前的混洗请求是否是程序中的最后一个混洗请求,如果不是,则处理下 一个混洗请求,并转至步骤1,否则算法结束。
2.根据权利要求1所述的基于数据粒度的混洗开关矩阵压缩方法,其特征在于所述步 骤2的流程为·2. 1将标识当前混洗请求的数据是否可加倍的变量s设置为1,同时将变量i和j设置 为0;·2. 2判断当前的混洗开关矩阵χ中的元素是否满足下面两个条件之一①.Xi, xi+1,j> xi,j+i>xi+i,j+i这四个元素全部为0 ;②· Xi^XwJ1这两个元素为1,且XiApXiJ1这两个元 素为0,若不满足,则设置s为0,并转至2. 5 ;否则转至2. 3 ;·2. 3判断j是否等于当前开关矩阵的规模η减去2,如果是,则转至2. 4,否则j自增2, 并且转至2. 2 ;·2. 4判断i是否等于当前开关矩阵的规模η减去2,如果是,则转至2. 5,否则i自增2, j等于0,并且转至2.2;·2.5若当前s = 1,则当前混洗请求的数据粒度可以加倍,否则不可以加倍。
3.根据权利要求1所述的基于数据粒度的混洗开关矩阵压缩方法,其特征在于所述步 骤4的流程为·4.1将变量i设置为0 ;·4. 2判断当前数据粒度的开关矩阵的第i行的元素是否全部为0,如果是则将最终混洗 模式SF的第i域的最高位SF_i[lo&n]赋值为1,其余位置SF_i [l0&n-l 0]赋值为0,并 且跳转至4. 4,否则将SF_i [log2n]赋值为0,设置变量j为0,并且跳转至4. 3 ;·4. 3判断当前数据粒度的开关矩阵的第i行第j列的元素是否为1,若是则将SF_ i[log2n-l:0]赋值为j,并跳转至4. 4,否则将j自增1,并转至4. 3 ;·4.4将i自增1 ;并判断i是否小于当前数据粒度的开关矩阵的规模n,若是,则跳转至 4. 2,继续压缩开关矩阵的下一行元素,否则压缩完毕,得到的SF_0,SF_1,…,SF_n-l即为 最终的混洗模式。
全文摘要
一种基于数据粒度的混洗开关矩阵压缩方法,其步骤为步骤1混洗请求在进行基于数据粒度的混洗开关矩阵压缩时,首先当前混洗请求的数据粒度设置为最小数据粒度;步骤2判断当前混洗请求的数据粒度是否可以加倍,如果不可以加倍,转至步骤3;否则跳转至步骤4;步骤3将当前的数据粒度加倍,并基于加倍后的数据粒度对当前的混洗开关矩阵进行压缩,并跳转至步骤2;步骤4使用当前粒度索引法对现有的开关矩阵进行进一步的压缩;步骤5判断当前的混洗请求是否是程序中的最后一个混洗请求,如果不是,处理下一个混洗请求,并转至步骤1,否则算法结束。本发明原理简单、操作简便、能够有效提高混洗模式存储器的利用率和压缩效率。
文档编号G06F9/38GK102073479SQ201010559590
公开日2011年5月25日 申请日期2010年11月25日 优先权日2010年11月25日
发明者万江华, 刘祥远, 刘胜, 孙海燕, 张凯, 李振涛, 王耀华, 陈书明, 陈海燕, 陈跃跃 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1