[发明专利]基于x86架构的稠密矩阵乘法汇编代码自动生成方法有效
申请号: | 201210199706.6 | 申请日: | 2012-06-14 |
公开(公告)号: | CN102750150A | 公开(公告)日: | 2012-10-24 |
发明(设计)人: | 王茜;张先轶;张云泉 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/16 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙) 11200 | 代理人: | 余长江 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 x86 架构 稠密 矩阵 乘法 汇编 代码 自动 生成 方法 | ||
技术领域
本发明涉及计算机系统应用技术领域。具体涉及一种面向x86体系架构实现的稠密矩阵乘法函数的汇编代码自动生成方法。
背景技术
代码自动生成方法已成为目前的一研究方向,许多应用领域都采用代码自动生成方法来降低开发周期,提高开发效率,比如专利ZL 200610152345.4,一种基于ASN类型对象的代码生成方法。
稠密矩阵乘法是基础线性子程序库(BLAS)中三级函数之一。它广泛应用于高性能计算领域,LINPACK测试结果严重依赖于稠密矩阵乘法函数的性能。BLAS三级中其余函数均可通过转换为稠密矩阵乘法来实现。许多CPU厂商自主研发了针对他们自己处理器系统架构特征的高性能基础线性代数子程序库,如Intel MKL和AMD ACML。
美国德克萨斯大学奥斯汀分校超级计算中心高性能计算组开发的基础线性代数子程序库(GotoBLAS)通过手工编写汇编代码实现稠密矩阵乘法函数。其性能与CPU厂商自主研发的基础线程代数子程序库(MKL,ACML)相当,但由于其(GotoBLAS)采用手工编写汇编代码来实现高效的矩阵乘法运算,这将导致稠密矩阵乘法函数的性能与处理器硬件结构特征联系紧密,比如高速缓存、物理寄存器、算术运算部件等。这些针对处理器硬件资源的优化方法往往具有平台特殊性,即针对某个特定处理器平台硬件资源种类和数量优化的稠密矩阵乘法汇编代码,往往能够在这个处理器平台上获得最优性能效果,但是当移植到另一台具有不同硬件资源的处理器平台上时,往往会出现程序性能下降的问题。GotoBLAS采取在不同的处理器上手工编写不同的稠密矩阵汇编代码来解决它在不同处理器平台间的可移植性问题。这是一种低效的代码开发方式,而且由于汇编代码的可读性比较差,代码的维护工作也需要领域专家来完成。
美国田纳西大学创新计算机实验室开发的自动调优线性代数软件(ATLAS)采用“软件的自动经验优化(AEOS)”方法,为给定的处理器“自动”选定最优的稠密矩阵实现方法。由于ATLAS生成的代码依赖底层编译器编译时实施的寄存器分配优化技术和指令调度优化技术,这两种优化技术往往对稠密矩阵乘法性能有巨大的影响。通用的底层编译器,如gcc,提供的优化技术往往需要适用于所有应用,因而不能像领域专家手工调优汇编代码一样,针对稠密矩阵乘法的算法特点充分利用物理寄存器资源和算术运算部件资源。因此,虽然ATLAS解决了稠密矩阵乘法函数开发周期长,可移植性差的问题,但是它生成的代码性能往往与手工优化编写的基础线性代数子程序库GotoBLAS以及CPU生产商自主研发的基础线性代数子程序库MKL,ACML存在5%~10%的性能差距。
发明内容
针对现有技术中手工编写稠密矩阵乘法函数的汇编代码开发效率低、可移植性差;和已有的自动调优矩阵乘法函数技术依赖底层编译器优化技术、性能低的缺点,本发明的目的在于提供一种基于x86架构的稠密矩阵乘法汇编代码生成方法,可针对不同x86处理器平台硬件资源的种类和数量自动生成稠密矩阵乘法函数的汇编代码。为降低底层编译器对生成代码性能的影响,本发明将传统编译器使用的优化技术:寄存器分配和指令调度,从编译器中“分离”出来,针对稠密矩阵乘法函数运算特点做出改进并给出实现,然后作用于本发明生成的汇编代码。
本发明解决的稠密矩阵乘法计算形式为:C=A*B+C。在后续说明内容中,A和B为源操作矩阵,C为结果矩阵,其中矩阵A的大小表示为M*K,矩阵B的大小表示为K*N,矩阵C的大小表示为M*N。本发明采用的技术方案如下:
1)将矩阵A和B划分为较小的矩阵进行计算。首先将矩阵A按Mc*Kc的大小划分为多个子块,将矩阵B按Kc*Nc的大小划分为多个子块。然后逐次将每个子块矩阵AMc*Kc拷贝到连续的地址空间中,将每个子块矩阵BKc*Nc拷贝至连续的地址空间中。本发明主要解决将子块矩阵乘法的计算过程变为汇编代码实现问题,该子块矩阵乘法计算顺序采用通用的j-i-k迭代顺序,其中k为最内层迭代,j为最外层迭代。
2)利用已有代码生成工具(POET),将1)中描述的子块矩阵乘法计算过程翻译为x86处理器支持的汇编代码。其中POET是一个可将源程序语言编写的代码根据翻译规则产生用户自定义程序语言类型代码的工具,源程序语言可以是C或者Fortran等。在本发明中,POET只作为一个代码翻译器工具,就像开发C程序使用的vc编辑器环境一样。“变换操作规则说明”在本发明中为开发人员根据通用优化技术实现的程序函数,本发明使用的变换操作包含:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210199706.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种中小型角钢双线长尺矫直的精整方法
- 下一篇:具有锁止元件的排料装置