当前位置: 首页 > 专利查询>中山大学专利>正文

一种基于Arm架构的NumPy运算加速优化方法技术

技术编号:28418766 阅读:19 留言:0更新日期:2021-05-11 18:25
本发明专利技术为克服Arm平台上原生NumPy库存在计算性能低下的缺陷,提出一种基于Arm架构的NumPy运算加速优化方法,包括以下步骤:配置Arm架构环境,获取NumPy源代码;对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则对待优化函数进行循环体优化,再对待优化函数进行多线程处理;否则直接对待优化函数进行多线程处理;然后将完成函数优化的NumPy源代码进行编译优化。本发明专利技术对Arm架构环境中的NumPy源代码进行优化,根据NumPy源代码中的函数类型执行循环体优化、多线程处理等操作,能够有效提高了依赖于NumPy的各类Python程序运行效率。

【技术实现步骤摘要】
一种基于Arm架构的NumPy运算加速优化方法
本专利技术涉及计算机
,更具体地,涉及一种基于Arm架构的NumPy运算加速优化方法。
技术介绍
作为一种被广泛使用的解释型语言,Python以它的易用性、面向对象、支持众多的第三方模块等特性逐渐成为深受科学家和工程师喜爱的编程语言。其中,NumPy(NumericalPython,一种开源的数值计算扩展)模块以它强大的计算能力成为数据科学家们争相推崇的一个优质第三方库。NumPy的函数功能完备,不仅提供了有关线性代数的计算接口,还提供了有关算术运算、统计、字符串、位运算、排序等计算接口以及I/O等操作接口。尽管如此,NumPy在面对人工智能、科学计算与实际工程运用等领域日益增加的计算量时,它的运算速度无法令人满意。对于NumPy的加速和优化依赖于平台环境。Arm作为当前计算机芯片的重要架构方式之一,相较于x86芯片架构提供了精简指令集(RISC)和低功耗等截然不同的特性,这也导致针对x86架构的软件优化方法无法直接移植到Arm处理器上。Armv8的存储体系结构主要分为CPU寄存器、多级Cache缓存和内存,计算数据由于需要与CPU计算元器件ALU(arithmeticandlogicunit,算术逻辑单元)交互,故计算时都存放在CPU寄存器中,因此普遍存在运算速度慢、运算效率低的问题。
技术实现思路
本专利技术为克服上述现有技术所述的Arm平台上原生NumPy库存在计算性能低下的缺陷,提供一种基于Arm架构的NumPy运算加速优化方法。为解决上述技术问题,本专利技术的技术方案如下:一种基于Arm架构的NumPy运算加速优化方法,包括以下步骤:S1:配置Arm架构环境,获取NumPy源代码;S2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤;S3:对待优化函数进行循环体优化;S4:对待优化函数进行多线程处理;S5:将完成函数优化的NumPy源代码进行编译优化。作为优选方案,所述数值计算类函数包括线性代数函数、超越函数、算术函数、统计函数;所述非数值计算类函数包括数组创建函数、数组形状处理函数、字符串函数、位运算函数、条件筛选函数。作为优选方案,所述S3步骤中,对待优化函数进行循环体优化的具体步骤包括对循环体内部语句的SIMD(SingleInstructionMultipleData,单指令流多数据流)改写优化,以及对循环体本身进行优化。作为优选方案,在对循环体本身进行优化时,根据循环体的特性对循环体本身进行拆分、合并和展开操作;其中:对时间复杂度大于或等于O(N2)的循环体进行拆分操作,将循环体拆分为若干小循环;其中N表示循环体的问题规模;对时间复杂度小于O(N2)的循环体进行进行合并操作,将待优化函数上下流中的若干循环体合并至一个循环体;对循环之间存在循环依赖或访问冲突的循环体采用循环展开操作。作为优选方案,对于时间复杂度大于或等于O(N2)的循环体,将循环体中内层的循环语句作为单独的整体,得到其对应的计算结果,然后将所述计算结果作为原循环体外层循环的输入,并另起一个新的循环在原程序的后方,实现循环体的拆分操作;对于时间复杂度小于O(N2)的循环体,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原程序后方的循环体作为合并后的循环体的外循环,实现循环体的合并操作。作为优选方案,对于循环之间存在循环依赖或访问冲突的循环体,采用手工循环展开操作;其具体步骤如下:将待处理循环体的循环内容进行手动改写,在一次循环体内完成大于或等于两次的操作。作为优选方案,所述S4步骤中,对待优化函数进行多线程处理的具体步骤包括使用OpenMP进行多线程改写、合理化并行执行的任务大小、避免不必要的共享写入。作为优选方案,所述Arm架构中的一个计算节点包括128个核心;在所述S4步骤中,对待优化函数使用OpenMP进行多线程改写时,在需要多线程处理的语句前添加调用指令,使其能将所控制的语句分发到各核心上实行;对待优化函数进行合理化并行执行的任务大小时,对计算节点的任务大小进行线性化划分,然后对划分的任务进行实测,选取出合理的任务细粒度划分下的运行时间最短的任务大小作为核心的最小任务大小;对待优化函数进行避免不必要的共享写入时,通过OpenMP代码中使用reduction子句替代直接写入共享变量,在循环过程中写入线程私有变量。作为优选方案,所述S5步骤中,对完成函数优化的NumPy源代码进行编译优化的具体步骤包括自动向量化处理、选择编译优化选项。作为优选方案,对完成函数优化的NumPy源代码进行自动向量化处理时,设定Arm架构中的编译器自动采用NeonIntrinsics对程序的编译过程进行优化;对完成函数优化的NumPy源代码进行选择编译优化选项处理时,对Arm架构中的编译器设置O2优化选项,执行不包含时间和空间这种的优化,且不进行循环打开和函数内联。与现有技术相比,本专利技术技术方案的有益效果是:本专利技术对Arm架构环境中的NumPy源代码进行优化,并根据NumPy源代码中的函数类型执行循环体优化、多线程处理等操作,能够有效提高了依赖于NumPy的各类Python程序运行效率;本专利技术还将完成函数优化的NumPy源代码进行编译优化,将NumPy运算加速优化方法进行封装作为一个单独的第三方库,便于直接调用。附图说明图1为实施例1的基于Arm架构的NumPy运算加速优化方法的流程图。图2为实施例1的基于Arm架构的NumPy运算加速优化方法的流程图。图3为实施例2的SIMD指令加速原理示意图。具体实施方式附图仅用于示例性说明,不能理解为对本专利的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。下面结合附图和实施例对本专利技术的技术方案做进一步的说明。实施例1本实施例提出一种基于Arm架构的NumPy运算加速优化方法,如图1~2所示,为本实施例的基于Arm架构的NumPy运算加速优化方法的流程图。本实施例提出的基于Arm架构的NumPy运算加速优化方法中,包括以下步骤:S1:配置Arm架构环境,获取NumPy源代码。S2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤。本实施例中,数值计算类函数包括线性代数函数、超越函数、算术函数、统计函数;非数值计算类函数包括数组创建函数、数组形状处理函数、字符串函数、位运算函数、条件筛选函数。S3:对待优化函数进行本文档来自技高网...

【技术保护点】
1.一种基于Arm架构的NumPy运算加速优化方法,其特征在于,包括以下步骤:/nS1:配置Arm架构环境,获取NumPy源代码;/nS2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤;/nS3:对待优化函数进行循环体优化;/nS4:对待优化函数进行多线程处理;/nS5:将完成函数优化的NumPy源代码进行编译优化。/n

【技术特征摘要】
1.一种基于Arm架构的NumPy运算加速优化方法,其特征在于,包括以下步骤:
S1:配置Arm架构环境,获取NumPy源代码;
S2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤;
S3:对待优化函数进行循环体优化;
S4:对待优化函数进行多线程处理;
S5:将完成函数优化的NumPy源代码进行编译优化。


2.根据权利要求1所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,所述数值计算类函数包括线性代数函数、超越函数、算术函数、统计函数;所述非数值计算类函数包括数组创建函数、数组形状处理函数、字符串函数、位运算函数、条件筛选函数。


3.根据权利要求1所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,所述S3步骤中,对待优化函数进行循环体优化的具体步骤包括对循环体内部语句的SIMD改写优化,以及对循环体本身进行优化。


4.根据权利要求3所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,在对循环体本身进行优化时,根据循环体的特性对循环体本身进行拆分、合并和展开操作;其中:
对时间复杂度大于或等于O(N2)的循环体进行拆分操作,将循环体拆分为若干小循环;
对时间复杂度小于O(N2)的循环体进行进行合并操作,将待优化函数上下流中的若干循环体合并至一个循环体;
对循环之间存在循环依赖或访问冲突的循环体采用循环展开操作。


5.根据权利要求4所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,对于时间复杂度大于或等于O(N2)的循环体,将循环体中内层的循环语句作为单独的整体,得到其对应的计算结果,然后将所述计算结果作为原循环体外层循环的输入,并另起一个新的循环在原程序的后方,实现循环体的拆分操作;
对于时间复杂度小于O(N2)的循环体,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原...

【专利技术属性】
技术研发人员:张文毅梁嘉迪杜云飞卢宇彤
申请(专利权)人:中山大学
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1