[发明专利]一种基于龙芯3B的自适应矩阵乘法优化方法有效
申请号: | 201310442878.6 | 申请日: | 2013-09-25 |
公开(公告)号: | CN103530276A | 公开(公告)日: | 2014-01-22 |
发明(设计)人: | 顾乃杰;赵增;张孝慈;张明 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F17/16 | 分类号: | G06F17/16 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 何梅生 |
地址: | 230026*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于龙芯3B的自适应矩阵乘法优化方法,先将龙芯3B的乘法矩阵和被乘矩阵按分块大小不大于二级缓存的原则划分成为两个子矩阵,利用龙芯3B芯片上的直接高速缓冲存储器存取器预取列长为M宽为K的乘法矩阵到高速缓冲区,同时将列长为K宽为N的被乘矩阵复制于二级高速缓冲区,用直接寄存器存取器从二级高速缓冲区中预取列长为l,宽为h的乘法矩阵以及长为h宽为g的被乘矩阵到寄存器,利用乘加指令完成乘加运算,通过访存状态收集模块获得信息并对分块参数M、K、N、l、h、g进行自适应调整,获得新的分块参数,从而实现龙芯3B平台上矩阵乘法运算的高效自适应优化。 | ||
搜索关键词: | 一种 基于 自适应 矩阵 乘法 优化 方法 | ||
【主权项】:
一种基于龙芯3B的自适应矩阵乘法优化方法,其特征在于,所述优化方法按如下步骤进行:步骤1、对乘法矩阵和被乘矩阵进行一次分块以龙芯3B上的乘法矩阵的起始地址为基准划分为列长为M宽为K的单元乘法矩阵,以所述龙芯3B上的被乘矩阵的起始地址为基准划分为列长为K宽为N的单元被乘矩阵,所述单元乘法矩阵和单元被乘矩阵的大小不超过二级高速缓冲存储器L2‑cache的大小;步骤2、预取分块后的乘法矩阵和被乘矩阵至二级高速缓冲存储器L2‑cache2‑1、通过nmap函数映射获得所述龙芯3B上的直接高速缓冲存储器存取器DCA的控制寄存器的读写虚地址;2‑2、将直接高速缓冲存储器存取器DCA的控制寄存器的源矩阵行元素个数域赋值为所述单元乘法矩阵的列长M,2‑3、将直接高速缓冲存储器存取器DCA的控制寄存器的源矩阵列元素个数域赋值为所述单元乘法矩阵的行宽K;2‑4、将直接高速缓冲存储器存取器DCA的控制寄存器的源矩阵起始地址域赋值为所述单元乘法矩阵所在内存空间的起始地址;2‑5、将所述单元被乘矩阵的数据复制到二级高速缓冲存储器L2‑cache中;步骤3、对分块后的乘法矩阵和被乘矩阵进行二次分块将所述二级高速缓冲存储器L2‑cache中的单元乘法矩阵划分为列长为l宽为h的次单元乘法矩阵,将所述二级高速缓冲存储器L2‑cache中的单元被乘矩阵划分为列长为h宽为g的次单元被乘矩阵;步骤4、预取二次分块后的乘法矩阵和被乘矩阵至寄存器堆中通过nmap函数映射获得所述龙芯3B上的直接寄存器存取器DRA的控制寄存器的读写基地址;步骤A、二次分块后的乘法矩阵的预取A1、将直接寄存器存取器DRA的Cr2寄存器的行宽域赋值为所述次单元乘法矩阵的行宽h;A2、将直接寄存器存取器DRA的Cr2寄存器的次数域赋值为所述次单元乘法矩阵的列长l;A3、将直接寄存器存取器DRA的Cr3寄存器的寄存器堆起始域赋值为存放次单元乘法矩阵的寄存器堆的起始地址;A4、将直接寄存器存取器DRA的R0寄存器的源矩阵起始地址域赋值为次单元乘法矩阵所 在内存空间的起始地址;步骤B、二次分块后的被乘矩阵的预取B1、将直接寄存器存取器DRA的Cr4寄存器的行宽域赋值为所述次单元被乘矩阵的行宽g;B2、将直接寄存器存取器DRA的Cr4寄存器的次数域赋值为所述次单元被乘矩阵的列长h;B3、将直接寄存器存取器DRA的Cr5寄存器的寄存器堆起始域赋值为存放次单元被乘矩阵的寄存器堆的起始地址;B4、将直接寄存器存取器DRA的R1寄存器的源矩阵起始地址域赋值为次单元被乘矩阵所在内存空间的起始地址;步骤5、对所述寄存器堆中的次单元乘法矩阵和次单元被乘矩阵进行乘加运算C1、CPU等待直接寄存器存取器DRA发送的取数中断命令;C2、CPU根据所获得的取数中断命令从寄存器堆中取出次单元乘法矩阵的n列和次单元被乘矩阵的n行;C2、CPU利用乘加向量指令对所述的n列次单元乘法矩阵和n行次单元被乘矩阵进行乘加运算;C3、CPU设置直接寄存器存取器DRA的控制寄存器的Cr16到Cr23的值为0;C5、重复步骤C1至C3,直到所述次单元乘法矩阵和次单元被乘矩阵中的数据都完成乘加运算;步骤6、将所述乘加运算的结果存储至内存上的结果矩阵D1、将直接寄存器存取器DRA的Cr12寄存器的行宽域赋值为结果矩阵行宽的行宽g;D2、将直接寄存器存取器DRA的Cr12寄存器的次数域赋值为结果矩阵的列长l;D3、将直接寄存器存取器DRA的Cr13寄存器的寄存器堆起始域赋值为存放所述乘加运算的结果所在的寄存器堆的起始地址;D4、将直接寄存器存取器DRA的R*寄存器的源矩阵起始地址域赋值为所述结果矩阵所在内存空间的起始地址;步骤7、构建访存状态收集模块所述访存状态收集模块是利用结构体Dstruct来构建的;所述结构体Dstruct包含:当前访存状态收集模块所统计的事件的名称、所述事件对应的访存协处理器的名称、CPU等待访存协处理器就绪状态的周期、CPU查询访存协处理器工作状态的次数、CPU等待访存协处理器就绪状态的周期的阈值;步骤8、利用访存状态收集模块统计访存协处理器的预取状态;E1、记录所述当前访存状态收集模块所统计的事件名称和所述事件对应存协处理器的名称、设定CPU等待访存协处理器到达空闲状态的周期的阈值;E2、利用CPU查询对应访存协处理器的工作状态寄存器;E3、记录CPU查询访存协处理器工作状态的次数;E4、判断所述CPU查询访存协处理器工作状态的次数是否达到所述CPU等待访存协处理器就绪状态的周期的阈值;E5、若所述CPU查询访存协处理器工作状态的次数达到所述CPU等待访存协处理器就绪状态的周期的阈值,则所述CPU等待访存协处理器就绪状态的周期加1;E6、重复步骤C2至C5直至对应访存协处理器的工作状态为空闲;步骤9、更新所述乘法矩阵和被乘矩阵的一次分块和二次分块的参数CPU获得不同事件所对应的结构体Dstruct内容;并查询所述不同事件所对应的结构体Dstruct内容中的当前访存状态收集模块所统计的事件的名称;F1、当事件为直接寄存器存取器DRA预取次单元被乘矩阵或直接寄存器存取器DRA预取次单元乘法矩阵时;F1.1、查询直接寄存器存取器DRA预取次单元被乘矩阵事件或直接寄存器存取器DRA预取次单元乘法矩阵事件所对应的CPU等待访存协处理器就绪状态的周期;F1.2、当直接寄存器存取器DRA预取次单元被乘矩阵事件或直接寄存器存取器DRA预取次单元乘法矩阵事件所对应的CPU等待访存协处理器就绪状态的周期不为零,则同步增加二次分块参数l与二次分块参数g的数值直至达到二次分块约束上限;所述二次分块约束上限是指二次分块参数l和二次分块参数g满足式(1)l×g<256 (1)F2、当事件为直接寄存器存取器DRA写回单元结果矩阵时;F2.1、查询直接寄存器存取器DRA写回单元结果矩阵事件所对应的CPU等待访存协处理器就绪状态的周期;F2.2、当直接寄存器存取器DRA写回单元结果矩阵事件所对应的CPU等待访存协处理器就绪状态的周期不为零,则增加二次分块的分块参数h的数值直到达到对二次分块约束上限;所述二次分块约束上限是指二次分块参数l、二次分块参数h和二次分块参数g满足式(2):4×(l×h+h×g)+2(l×g)<512 (2)F3、当事件为直接高速缓冲存储器存取器DCA预取单元乘法矩阵时;F3.1、查询直接高速缓冲存储器存取器DCA预取单元乘法矩阵事件所对应的CPU等待访存协处理器就绪状态的周期;F3.2、当直接高速缓冲存储器存取器DCA预取单元乘法矩阵事件所对应的CPU等待访存协处理器就绪状态的周期不为零,则增加一次分块参数N和一次分块参数K的数值直到达到一次分块约束上限;所述一次分块约束上限是指M为l的倍数,K为h的倍数,N为g的倍数且满足式(3);8×(2M×K+K×N)≤1.5×1024×1024 (3)步骤10、根据更新前的一次分块参数M、一次分块参数N、一次分块参数K,通过地址偏移计算获得新的乘法矩阵和被乘矩阵的起始地址;步骤11、重复步骤2至步骤10直至新的乘法矩阵和被乘矩阵的起始地址超过乘法矩阵和被乘矩阵的所处的地址空间范围。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201310442878.6/,转载请声明来源钻瓜专利网。
- 上一篇:具有高刚度和良好光学性质的热成型制品
- 下一篇:一种离合器位置传感装置