[发明专利]一种基于申威平台的基础线性代数库BLAS三级函数GEMM的高性能实现方法有效
申请号: | 201610130123.6 | 申请日: | 2016-03-08 |
公开(公告)号: | CN105808309B | 公开(公告)日: | 2019-04-05 |
发明(设计)人: | 刘昊;杨超;刘芳芳;赵玉文;张鹏;孙乔 | 申请(专利权)人: | 中国科学院软件研究所 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41 |
代理公司: | 北京科迪生专利代理有限责任公司 11251 | 代理人: | 成金玉;孟卜娟 |
地址: | 100190 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提出了一种基于申威平台的基础线性代数库BLAS三级函数GEMM的高性能实现方法,针对国产申威SW1600平台,采用“interface接口‑driver驱动‑kernel汇编核心代码”的三层代码设计框架,使用乘加指令、循环展开、软件流水线指令重排、SIMD向量化运算、寄存器分块技术等与平台架构相关的技术手段,实现汇编级手工优化,解决了编译器针对计算密集型函数GEMM优化不足的问题,大幅提升函数性能,与开源BLAS数学库GotoBLAS相较,平均加速比为4.72,最高加速比为5.61。 | ||
搜索关键词: | 一种 基于 平台 基础 线性代数 blas 三级 函数 gemm 性能 实现 方法 | ||
【主权项】:
1.一种基于申威平台的基础线性代数库BLAS三级函数GEMM的高性能实现方法,其特征在于:基于申威SW1600平台的一个CPU进行设计,采用interface接口层函数‑driver驱动层函数‑kernel汇编核心层函数的三层代码设计框架,支持两个矩阵A、B各自为转置或非转置多种情况,框架内部调用关系为interface‑driver‑kernel,具体实现如下:(1)interface接口层函数:该层为函数接口,负责输入参数检查,判断矩阵规模参数是否合法,当输入参数不合法时返回错误码;判断两个输入矩阵A、B的转置情况,依据不同情况调用对应的driver驱动层函数;(2)driver驱动层函数:由interface接口层函数调用,并调用下层的kernel汇编核心层函数;该driver驱动层函数负责矩阵数据重排,以适应kernel汇编核心层函数的寄存器分块情况,计算过程包含矩阵的N维和M维两重嵌套循环,在N维循环内进行输入矩阵B重排,在M维循环内进行输入矩阵A重排,保证kernel汇编核心层函数连续从cache中获取数据,以减少cache不命中的情况,提高性能;(3)kernel汇编核心层函数:为底层核心层函数,由driver驱动层函数调用,负责实际计算的高性能实现;kernel汇编核心层函数基于申威SW1600的扩展ALPHA架构指令集,使用256位的SIMD向量化运算与乘加指令提高计算性能;基于该平台的ALPHA架构特征,使用F0至F31共32个浮点向量寄存器,采用寄存器分块策略进行算法设计;利用GEMM的计算密集型特性,手工实现汇编级的循环展开与指令重排,使用计算指令掩盖访存延迟,保证CPU利用率;使用乘加指令、循环展开、软件流水线指令重排、SIMD向量化运算、寄存器分块技术、矩阵分块与数据重排的技术手段,大幅提升函数性能。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院软件研究所,未经中国科学院软件研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610130123.6/,转载请声明来源钻瓜专利网。