[发明专利]一种基于龙芯3A的单精度矩阵乘法优化方法有效
申请号: | 201110191133.8 | 申请日: | 2011-07-08 |
公开(公告)号: | CN102214160A | 公开(公告)日: | 2011-10-12 |
发明(设计)人: | 顾乃杰;何颂颂;张斌;许耿纯 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F17/16 | 分类号: | G06F17/16 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 汪祥虬 |
地址: | 230026*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于龙芯3A的单精度矩阵乘法优化方法,特征是先将龙芯3A的两个单精度源矩阵按分别不大于一级缓存一半和不大于二级缓存一半的原则划分为两个子矩阵;在龙芯3A的32位访存指令、单精度浮点乘加指令和预取指令的矩阵乘法核心计算代码中采用龙芯3A的128位访存指令和并行单精度浮点指令,并采用两倍的运算数据集大小减去运算数据单元大小预取地址计算方式来对数据进行预取,从而使浮点运算部件基本上能够满负荷运转;克服了地址非对齐数据预取无效的问题,使地址非对齐的单精度矩阵乘法执行效率接近地址对齐的单精度矩阵乘法;运算速度比基础线性代数子程序库(GotoBLAS)版本2-1.07平均提高了90%以上。 | ||
搜索关键词: | 一种 基于 精度 矩阵 乘法 优化 方法 | ||
【主权项】:
一种基于龙芯3A的单精度矩阵乘法优化方法,先将龙芯3A的两个单精度源矩阵按分块大小分别不大于二级缓存的原则划分成为两个子矩阵,然后将分块形成的子矩阵块拷贝到一个连续的地址空间中,再通过使用龙芯3A的32位访存指令、单精度浮点乘加指令和预取指令的矩阵乘法核心计算代码来完成子矩阵与子矩阵的乘法;其特征在于:所述将龙芯3A的两个单精度源矩阵按分块大小分别不大于二级缓存的原则划分采取分别不大于一级缓存一半和不大于二级缓存一半的原则划分成为两个子矩阵;在所述龙芯3A的32位访存指令、单精度浮点乘加指令和预取指令的矩阵乘法核心计算代码中采用龙芯3A的128位访存指令和并行单精度浮点指令,并采用两倍的运算数据集大小减去运算数据单元大小预取地址计算方式来对数据进行预取;具体操作步骤如下:第一步、数据分块并拷贝步骤先将龙芯3A的两个单精度源矩阵分块,使第一个源矩阵的子块大小不大于龙芯3A一级缓存容量的一半,第二个源矩阵的子块大小为不大于龙芯3A二级缓存容量的一半,然后将两个子块分别拷贝到连续的两个地址空间中;第二步、核心计算代码编写步骤通过使用128位访存指令,每次将4个单精度浮点数取到2个64位的浮点寄存器中;使用低高位合并指令将存于寄存器高32位的单精度浮点数提取出来,使用并行单精度浮点乘加指令实现并行单精度浮点乘加运算;循环展开度设为4*4,即每次从两个子块中各取4个单精度浮点数,两两分别相乘后得到16个结果累加到目标矩阵中;指令调度中,由4条指令组成一个小组,每个小组包含浮点操作指令2条,取数指令和空操作指令各一条或空操作指令2条,由5个小组组成一个大组,浮点计算需要用的操作数全部提前2个大组通过128位访存指令和低高位合并指令放到指定寄存器中;在核心计算代码的最开头,对结果矩阵和第二个源矩阵子块进行预取,其中结果矩阵的预取地址设为两倍的运算数据集大小减去运算数据单元大小,第二个源矩阵子块的预取地址设为运算数据集大小,预取指令的频率等于高速缓冲存储器行的大小除以计算数据集的大小。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201110191133.8/,转载请声明来源钻瓜专利网。
- 上一篇:水喷射真空除氧器
- 下一篇:超临界直流锅炉不带泵启动系统及启动方法