[发明专利]基于x86架构的稠密矩阵乘法汇编代码自动生成方法有效
申请号: | 201210199706.6 | 申请日: | 2012-06-14 |
公开(公告)号: | CN102750150A | 公开(公告)日: | 2012-10-24 |
发明(设计)人: | 王茜;张先轶;张云泉 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/16 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 余长江 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 x86 架构 稠密 矩阵 乘法 汇编 代码 自动 生成 方法 | ||
1.一种基于x86架构的稠密矩阵乘法汇编代码自动生成方法,其步骤为:
1)将稠密矩阵乘法中的源矩阵A、B分别划分为多个子块矩阵;其中,矩阵A划分的子块矩阵AMc*Kc大小为Mc*Kc,矩阵B划分的子块矩阵BKc*Nc大小为Kc*Nc;Mc为矩阵A在行方向上的分块大小,Nc为矩阵B在列方向上的分块大小,Kc为矩阵A在列方向上的分块大小,矩阵A列值与矩阵B行值相等;
2)将每个子块矩阵AMc*Kc拷贝到连续的地址空间中,将每个子块矩阵BKc*Nc拷贝至连续的地址空间中;
3)代码生成工具利用变化函数将输入的每一AMc*Kc*BKc*Nc子块矩阵乘法过程翻译为x86处理器支持的汇编代码。
2.如权利要求1所述的方法,其特征在于所述子块矩阵的大小满足关系式:
2*(Kr*Nc+Mc*Nr)+Mc*Kr<=L1和Mc*Kc<=L2/2,其中,L1代表一级高速缓存容量,L2代表二级高速缓存容量,Nr代表所述稠密矩阵乘法的j-i-k三层循环迭代计算过程中循环j的迭代步长,Mr代表所述稠密矩阵乘法的j-i-k三层循环迭代计算过程中循环i的迭代步长。
3.如权利要求1或2所述的方法,其特征在于代码生成工具生成所述汇编代码的方法为:
a)对输入的AMc*Kc*BKc*Nc子块矩阵乘法进行循环分块、展开操作:在每一次迭代k过程中,每次从第一个子块矩阵AMc*Kc中读取Mr个元素,从第二个子块矩阵BKc*Nc中读取Nr个元素,两两相乘后得到Nr*Mr个结果并将其累加到一结果矩阵C中;
b)中间代码表达式变换操作:将步骤a)的子块矩阵乘法源程序语言代码逐句翻译为四元组中间表达式,表达式形式为(操作符,源操作数1,源操作数2,目的操作数);
c)向量化变换操作:对所生成的四元组中间表达式进行合并、删除冗余处理,生成向量化的四元组中间表达式;
d)汇编指令映射变换操作:将向量化四元组表达式逐一翻译为相应汇编代码。
4.如权利要求3所述的方法,其特征在于设定一循环展开因子Uk,用于控制循环k的展开次数。
5.如权利要求3所述的方法,其特征在于对子块矩阵乘法计算过程中,将重复出现的数组访问模式替换为标量访问模式。
6.如权利要求3所述的方法,其特征在于将步骤a)的子块矩阵乘法源程序语言代码逐句翻译为四元组中间表达式的方法为:代码生成工具依次读入源程序语言代码的每一条语句,判断当前读入语句是否为循环结构,如果是循环结构,则将循环控制条件结构翻译为一组四元组表达式,否则当前读入的语句为一条表达式语句;进一步判断当前表达式语句的右操作数是否为算数表达式,若是,则产生一计算四元组表达式,否则产生一赋值四元组表达式。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210199706.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种中小型角钢双线长尺矫直的精整方法
- 下一篇:具有锁止元件的排料装置