发明名称 面向CPU+DSP异构系统的矩阵乘加速方法
摘要 本发明公开了一种面向CPU+DSP异构系统的矩阵乘加速方法,目的是面向CPU+DSP异构系统提出一种高效协同的矩阵乘加速方法,以提高矩阵乘的运算速度和最大化CPU+DSP异构系统的计算效率。技术方案是先初始化参数并对CPU+DSP异构系统信息配置,依据主处理器CPU和加速器DSP设计目标和计算性能的差异,将分配给计算结点待处理的数据划分给CPU和DSP协同处理,然后CPU和DSP并行进行数据传输与协同计算,得到<img file="DDA0000586892660000011.GIF" wi="170" he="111" />个块矩阵C<sub>(i‑1)(j‑1)</sub>,最后将块矩阵C<sub>(i‑1)(j‑1)</sub>归并,组成M×N的结果矩阵C。采用本发明可使得CPU在负责数据传输和程序控制的同时积极与DSP协同完成矩阵乘计算,且数据传输与协同计算重叠,提高了CPU+DSP异构系统的矩阵乘运算速度和计算资源利用率。
申请公布号 CN104317768B 申请公布日期 2017.02.15
申请号 CN201410544785.9 申请日期 2014.10.15
申请人 中国人民解放军国防科学技术大学 发明人 刘杰;迟利华;甘新标;晏益慧;徐涵;胡庆丰;蒋杰;李胜国;王庆林;皇甫永硕;崔显涛;周陈
分类号 G06F15/16(2006.01)I;G06F17/16(2006.01)I 主分类号 G06F15/16(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种面向CPU+DSP异构系统的矩阵乘加速方法,其特征在于包括以下步骤:第一步、初始化参数并对CPU+DSP异构系统信息配置,具体步骤如下:1.1定义矩阵A的维度为M×K,矩阵B的维度为K×N,则A与B相乘的结果矩阵C的维度为M×N,M,K,N均为正整数;1.2查询CPU+DSP异构计算系统体系结构文档获取计算节点配置,即一个计算节点由C颗CPU和D颗DSP组成;1.3查询CPU+DSP异构计算系统体系结构文档获取计算结点的拓扑结构m×n,即,CPU+DSP异构系统由m×n个计算节点组成,每行有n个计算节点,每列有m个计算节点;1.4依据计算结点中DSP的个数,将DSP分别标识为0,1,…d,…(D‑1),0≤d<D;1.5依据CPU+DSP异构计算系统提供的基础软件工具集中的相关函数完成DSP初始化;1.6查询CPU+DSP异构计算系统体系结构文档,获取各处理器体系结构信息,即每个计算结点中用于数据传输和流程控制的CPU核个数p<sub>cl</sub>、用于计算的CPU核个数p<sub>ct</sub>、每个用于计算的CPU核拥有的浮点乘累加功能部件的数目m及主频f,每个DSP单元拥有的浮点乘累加功能部件的数目m'及主频f';1.7计算主处理器CPU的理论计算峰值R<sub>peak</sub>=p<sub>ct</sub>*m*f;1.8计算加速器DSP的理论计算峰值R'<sub>peak</sub>=D*m'*f';1.9确定矩阵数据划分因子η=R'<sub>peak</sub>/R<sub>peak</sub>,R'<sub>peak</sub>为加速器DSP的理论计算峰值,R<sub>peak</sub>为主处理器CPU的理论计算峰值;第二步、依据主处理器CPU和加速器DSP设计目标和计算性能的差异,将分配给计算结点待处理的数据划分给CPU和DSP协同处理,具体方法如下:2.1将M*K的矩阵A划分成m*K的块矩阵A<sub>i</sub>,<img file="FDA0001147089510000011.GIF" wi="186" he="88" /><img file="FDA0001147089510000012.GIF" wi="68" he="68" />表示上取整,具体分块方法如下:2.1.1令i=1;2.1.2选取矩阵A的第(i‑1)*m+1行至第i*m行组成块矩阵A<sub>i</sub>;2.1.3 i=i+1;2.1.4若<img file="FDA0001147089510000013.GIF" wi="203" he="133" />转2.1.2,否则,转2.1.5,进行尾部处理;2.1.5选取矩阵A的第(i‑1)*m+1行至第M行组成块矩阵A<sub>i</sub>;2.2将K*N的矩阵B划分成K*n的子块矩阵B<sub>j</sub>,<img file="FDA0001147089510000021.GIF" wi="253" he="127" /><img file="FDA0001147089510000022.GIF" wi="68" he="71" />表示上取整,具体分块方法如下:2.2.1令j=1;2.2.2选取矩阵B的第(j‑1)*n列至第j*n列组成块矩阵B<sub>j</sub>;2.2.3 j=j+1;2.2.4若<img file="FDA0001147089510000023.GIF" wi="166" he="110" />转2.2.2,否则,转2.2.5,进行尾部处理;2.2.5选取矩阵B的第(j‑1)*n列至第N列组成块矩阵B<sub>j</sub>;2.3依据矩阵数据划分因子η将块矩阵B<sub>j</sub>划分为<sup>1</sup>B<sub>j</sub>和<sup>2</sup>B<sub>j</sub>两个子矩阵,具体方法如下:2.3.1令j=1;2.3.2依据矩阵数据划分因子η将块矩阵B<sub>j</sub>划分为<sup>1</sup>B<sub>j</sub>和<sup>2</sup>B<sub>j</sub>两个子矩阵,子矩阵<sup>1</sup>B<sub>j</sub>的维度为K*n<sub>1</sub>,<sup>2</sup>B<sub>j</sub>的维度为K*n<sub>2</sub>,并且n<sub>1</sub>,n<sub>2</sub>满足公式(1):<img file="FDA0001147089510000024.GIF" wi="1142" he="239" />2.3.3 j=j+1;2.3.4若<img file="FDA0001147089510000025.GIF" wi="169" he="110" />转2.3.2,否则,转第三步;第三步、CPU和DSP并行进行数据传输与协同计算,具体方法如下:3.1令i=1,j=1;3.2采用CPU+DSP异构系统数据传输函数将块矩阵数据A<sub>i</sub>和<sup>2</sup>B<sub>j</sub>传输至DSP端存储空间,具体步骤如下:3.2.1在DSP端申请大小为size=M×k×sizeof(a<sub>ij</sub>)的存储空间,sizeof(a<sub>ij</sub>)表示矩阵A中元素a<sub>ij</sub>的存储长度,单位为字节;3.2.2采用CPU+DSP异构系统提供的数据传输函数将块矩阵A<sub>i</sub>传输至DSP端存储空间,将DSP端存储空间中存储块矩阵A<sub>i</sub>的空间称为<img file="FDA0001147089510000026.GIF" wi="101" he="61" />3.2.3 i=i+1;3.2.4在DSP端申请大小为size=k*n<sub>2</sub>×sizeof(b<sub>ij</sub>)的存储空间,sizeof(b<sub>ij</sub>)表示矩阵B中元素b<sub>ij</sub>的存储长度为多少字节;3.2.5采用CPU+DSP异构系统提供的数据传输函数将子矩阵<sup>2</sup>B<sub>j</sub>传输至DSP端存储空间,将DSP端存储空间中存储块矩阵<sup>2</sup>B<sub>j</sub>的空间称为<img file="FDA0001147089510000031.GIF" wi="123" he="76" />3.2.6 j=j+1;3.3采用3.2.1和3.2.2所述方法传输块矩阵数据A<sub>i</sub>传输至<img file="FDA0001147089510000032.GIF" wi="103" he="69" />3.4采用3.2.4和3.2.5所述方法传输块子矩阵数据<sup>2</sup>B<sub>j</sub>传输至<img file="FDA0001147089510000033.GIF" wi="115" he="77" />3.5 CPU和DSP同时并行执行以下操作:3.5.1用于数据传输和流程控制的CPU核上的主线程负责CPU和DSP之间的通信和交互,同时,主线程创建两个子线程T<sub>c</sub>和T<sub>d</sub>分别控制CPU端和DSP端的矩阵计算;3.5.2 T<sub>c</sub>调用矩阵乘库函数完成A<sub>(i‑1)</sub>×<sup>1</sup>B<sub>(j‑1)</sub>的矩阵计算,其计算结果为结果矩阵C的块矩阵C<sub>(i‑1)(j‑1)</sub>的子矩阵<sup>1</sup>C<sub>(i‑1)(j‑1)</sub>;3.5.3 T<sub>d</sub>调用面向DSP体系结构的矩阵库函数完成A<sub>(i‑1)</sub>×<sup>2</sup>B<sub>(j‑1)</sub>的矩阵计算,其计算结果为结果矩阵C的块矩阵C<sub>(i‑1)(j‑1)</sub>的子矩阵<sup>2</sup>C<sub>(i‑1)(j‑1)</sub>;3.5.4主线程将子矩阵<sup>2</sup>C<sub>(i‑1)(j‑1)</sub>传回至CPU端存储空间;3.5.5释放<img file="FDA0001147089510000034.GIF" wi="151" he="79" />3.5.6由子矩阵<sup>1</sup>C<sub>(i‑1)(j‑1)</sub>组成块矩阵C<sub>(i‑1)(j‑1)</sub>第1列至第n<sub>1</sub>列,由子矩阵<sup>2</sup>C<sub>(i‑1)(j‑1)</sub>组成块矩阵C<sub>(i‑1)(j‑1)</sub>第n<sub>1</sub>+1列至第N列,其中,n<sub>1</sub>+n<sub>2</sub>=N;3.6 j=j+1;3.7如果<img file="FDA0001147089510000035.GIF" wi="163" he="103" />转3.4,否则,转3.8,进行尾部计算;3.8释放<img file="FDA0001147089510000038.GIF" wi="135" he="72" />3.9 i=i+1;3.10如果<img file="FDA0001147089510000036.GIF" wi="158" he="100" />转3.3,否则,转第四步;第四步、将<img file="FDA0001147089510000037.GIF" wi="161" he="95" />个块矩阵C<sub>(i‑1)(j‑1)</sub>归并,组成M×N的结果矩阵C,具体方法如下:4.1令i=1,j=1;4.2由块矩阵C<sub>(i‑1)(j‑1)</sub>的第1行至第m行的第1列至第n列组成结果矩阵C的第(i‑1)*m+1行至i*m行的第(j‑1)*n+1列至第j*n列;4.3 j=j+1;4.4如果<img file="FDA0001147089510000041.GIF" wi="203" he="134" />转4.2,否则,转4.5,进行列尾部处理;4.5由块矩阵C<sub>(i‑1)(j‑1)</sub>的第1行至第m行的第1列至第N‑(i‑1)*n列组成结果矩阵C的第(i‑1)*m+1行至第i*m行的第(j‑1)*n+1列至第N列;4.6 i=i+1;4.7如果<img file="FDA0001147089510000042.GIF" wi="206" he="132" />转4.2,否则,转4.8,进行行尾部处理;4.8由块矩阵C<sub>(i‑1)(j‑1)</sub>的第1行至第M‑(i‑1)*m行的第1列至第N‑(i‑1)*n列组成结果矩阵C的第(i‑1)*m+1行至第M行的第(j‑1)*n+1列至第N列;第五步、结束。
地址 410073 湖南省长沙市开福区德雅路109号
您可能感兴趣的专利