CN112783503A - 一种基于Arm架构的NumPy运算加速优化方法 - Google Patents

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

Info

Publication number
CN112783503A
CN112783503A CN202110062369.5A CN202110062369A CN112783503A CN 112783503 A CN112783503 A CN 112783503A CN 202110062369 A CN202110062369 A CN 202110062369A CN 112783503 A CN112783503 A CN 112783503A
Authority
CN
China
Prior art keywords
function
loop
numpy
optimization
optimized
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110062369.5A
Other languages
English (en)
Other versions
CN112783503B (zh
Inventor
张文毅
梁嘉迪
杜云飞
卢宇彤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN202110062369.5A priority Critical patent/CN112783503B/zh
Publication of CN112783503A publication Critical patent/CN112783503A/zh
Application granted granted Critical
Publication of CN112783503B publication Critical patent/CN112783503B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

一种基于Arm架构的NumPy运算加速优化方法
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种基于Arm架构的NumPy运算加速优化方法。
背景技术
作为一种被广泛使用的解释型语言,Python以它的易用性、面向对象、支持众多的第三方模块等特性逐渐成为深受科学家和工程师喜爱的编程语言。其中,NumPy(NumericalPython,一种开源的数值计算扩展)模块以它强大的计算能力成为数据科学家们争相推崇的一个优质第三方库。NumPy的函数功能完备,不仅提供了有关线性代数的计算接口,还提供了有关算术运算、统计、字符串、位运算、排序等计算接口以及I/O等操作接口。尽管如此,NumPy在面对人工智能、科学计算与实际工程运用等领域日益增加的计算量时,它的运算速度无法令人满意。
对于NumPy的加速和优化依赖于平台环境。Arm作为当前计算机芯片的重要架构方式之一,相较于x86芯片架构提供了精简指令集(RISC)和低功耗等截然不同的特性,这也导致针对x86架构的软件优化方法无法直接移植到Arm处理器上。Armv8的存储体系结构主要分为CPU寄存器、多级Cache缓存和内存,计算数据由于需要与CPU计算元器件ALU(arithmetic and logic unit,算术逻辑单元)交互,故计算时都存放在CPU寄存器中,因此普遍存在运算速度慢、运算效率低的问题。
发明内容
本发明为克服上述现有技术所述的Arm平台上原生NumPy库存在计算性能低下的缺陷,提供一种基于Arm架构的NumPy运算加速优化方法。
为解决上述技术问题,本发明的技术方案如下:
一种基于Arm架构的NumPy运算加速优化方法,包括以下步骤:
S1:配置Arm架构环境,获取NumPy源代码;
S2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤;
S3:对待优化函数进行循环体优化;
S4:对待优化函数进行多线程处理;
S5:将完成函数优化的NumPy源代码进行编译优化。
作为优选方案,所述数值计算类函数包括线性代数函数、超越函数、算术函数、统计函数;所述非数值计算类函数包括数组创建函数、数组形状处理函数、字符串函数、位运算函数、条件筛选函数。
作为优选方案,所述S3步骤中,对待优化函数进行循环体优化的具体步骤包括对循环体内部语句的SIMD(Single Instruction Multiple Data,单指令流多数据流)改写优化,以及对循环体本身进行优化。
作为优选方案,在对循环体本身进行优化时,根据循环体的特性对循环体本身进行拆分、合并和展开操作;其中:
对时间复杂度大于或等于O(N2)的循环体进行拆分操作,将循环体拆分为若干小循环;其中N表示循环体的问题规模;
对时间复杂度小于O(N2)的循环体进行进行合并操作,将待优化函数上下流中的若干循环体合并至一个循环体;
对循环之间存在循环依赖或访问冲突的循环体采用循环展开操作。
作为优选方案,对于时间复杂度大于或等于O(N2)的循环体,将循环体中内层的循环语句作为单独的整体,得到其对应的计算结果,然后将所述计算结果作为原循环体外层循环的输入,并另起一个新的循环在原程序的后方,实现循环体的拆分操作;
对于时间复杂度小于O(N2)的循环体,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原程序后方的循环体作为合并后的循环体的外循环,实现循环体的合并操作。
作为优选方案,对于循环之间存在循环依赖或访问冲突的循环体,采用手工循环展开操作;其具体步骤如下:将待处理循环体的循环内容进行手动改写,在一次循环体内完成大于或等于两次的操作。
作为优选方案,所述S4步骤中,对待优化函数进行多线程处理的具体步骤包括使用OpenMP进行多线程改写、合理化并行执行的任务大小、避免不必要的共享写入。
作为优选方案,所述Arm架构中的一个计算节点包括128个核心;在所述S4步骤中,对待优化函数使用OpenMP进行多线程改写时,在需要多线程处理的语句前添加调用指令,使其能将所控制的语句分发到各核心上实行;
对待优化函数进行合理化并行执行的任务大小时,对计算节点的任务大小进行线性化划分,然后对划分的任务进行实测,选取出合理的任务细粒度划分下的运行时间最短的任务大小作为核心的最小任务大小;
对待优化函数进行避免不必要的共享写入时,通过OpenMP代码中使用reduction子句替代直接写入共享变量,在循环过程中写入线程私有变量。
作为优选方案,所述S5步骤中,对完成函数优化的NumPy源代码进行编译优化的具体步骤包括自动向量化处理、选择编译优化选项。
作为优选方案,对完成函数优化的NumPy源代码进行自动向量化处理时,设定Arm架构中的编译器自动采用Neon Intrinsics对程序的编译过程进行优化;
对完成函数优化的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:对待优化函数进行循环体优化。
本实施例中,对待优化函数进行循环体优化的具体步骤包括对循环体内部语句的SIMD改写优化,以及对循环体本身进行优化。
其中,对于循环体内部语句的SIMD改写优化,本实施例采用Arm平台的NeonIntrinsics进行改写。
对于循环体本身的优化,主要根据循环体的特性对循环体本身进行拆分、合并、展开操作。
本实施例中,根据循环体的计算复杂度判断执行拆分、合并和展开操作,且本实施例中将时间复杂度在O(N2)及以上的循环体视作大循环体,将时间复杂度在O(N2)以下的循环体视为小循环体。针对较为复杂或计算密集的循环,可以将大循环拆分至多个小循环内执行,以此提升寄存器的利用效率;针对小循环体,可以考虑将函数上下流中的多个循环合并至一个循环体内执行,减少对循环变量的操作,同时也有利于增强Arm处理器乱序执行的机会。
进一步的,对时间复杂度大于或等于O(N2)的循环体进行拆分操作,将循环体拆分为若干小循环;具体的,将循环体中内层的循环语句作为单独的整体,得到其对应的计算结果,然后将所述计算结果作为原循环体外层循环的输入,并另起一个新的循环在原程序的后方,实现循环体的拆分操作,用于减小循环的尺寸;
对时间复杂度小于O(N2)的循环体进行进行合并操作,将待优化函数上下流中的若干循环体合并至一个循环体;具体的,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原程序后方的循环体作为合并后的循环体的外循环,实现循环体的合并操作,用于提高寄存器的利用效率。
对循环之间存在循环依赖或访问冲突的循环体采用循环展开操作;进一步的,本实施例中采用手工循环展开的方式,将待处理循环体的循环内容进行手动改写,在一次循环体内完成大于或等于两次的操作,以牺牲函数尺寸的代价来降低循环带来的开销,加快程序执行速度。
S4:对待优化函数进行多线程处理。
本实施例中,对待优化函数进行多线程处理的具体步骤包括使用OpenMP进行多线程改写、合理化并行执行的任务大小、避免不必要的共享写入。
本实施例中通过OpenMP来充分利用Arm架构的多核心进行并行计算,在Arm架构上一个计算节点一般有128个核心,通过OpenMP工具进行源代码的改写,我们可以同时在这128个核心上各自启用线程并行执行同一个计算任务的不同部分,以大幅提高计算的效率。
进一步的,本实施例中对待优化函数使用OpenMP进行多线程改写时,在需要多线程处理的语句前添加调用指令,使其能将所控制的语句分发到各核心上实行;
对待优化函数进行合理化并行执行的任务大小时,对计算节点的任务大小进行线性化划分,然后对划分的任务进行实测,选取出合理的任务细粒度划分下的运行时间最短的任务大小作为核心的最小任务大小;
对待优化函数进行避免不必要的共享写入时,通过OpenMP代码中使用reduction子句替代直接写入共享变量,在循环过程中写入线程私有变量。
S5:将完成函数优化的NumPy源代码进行编译优化。
本实施例中,对完成函数优化的NumPy源代码进行编译优化的具体步骤包括自动向量化处理、选择编译优化选项。其中,向量化处理是指将简单循环或者多条相似的简单语句优化为SIMD指令。
进一步的,对完成函数优化的NumPy源代码进行自动向量化处理时,设定Arm架构中的编译器自动采用Neon Intrinsics对程序的编译过程进行优化;
对完成函数优化的NumPy源代码进行选择编译优化选项处理时,对Arm架构中的编译器设置O2优化选项,执行不包含时间和空间这种的优化,且不进行循环打开和函数内联。
实施例2
本实施例应用实施例1提出的一种基于Arm架构的NumPy运算加速优化方法,提出一种具体实施方式。
S1:配置Arm架构环境,获取NumPy源代码。
本实施例中,采用Armv8架构64位处理器,通过配置Armv8的环境,以确保NumPy运算加速优化是对处理器相洽的。另外,可以从网络上获取适应Python3的NumPy源代码用于优化改写。
S2:对NumPy源代码中待优化函数进行类型判断:若待优化函数为数值计算类函数,则执行S3步骤;若待优化函数为非数值计算类函数,则跳转执行S4步骤。
本实施例中对于NumPy源代码中的常用函数划分为数值计算类函数和非数值计算类函数,其中数值计算类函数包括线性代数函数、超越函数、算术函数、统计函数,非数值计算类函数包括数组创建函数、数组形状处理函数、字符串函数、位运算函数、条件筛选函数。
S3:对待优化函数进行循环体优化。本步骤中主要采用SIMD对循环体内部代码和通过对循环体本身的优化进行处理。
首先对于循环体内部的代码,SIMD作为CPU基本指令集的扩展,主要用于提供细粒度数据的并行操作,可以使用同一条指令操作多组数据以提升计算的速度。在Arm平台上,Neon Intrinsics指令集是SIMD指令集的代表,在本实施例使用Neon Intrinsics指令集对NumPy进行优化。本实施例采用Arm平台的Neon Intrinsics进行改写。
如图3所示,为本实施例的SIMD指令加速原理示意图。在NumPy的原始代码中,对于数据的处理是串行处理的。本实施例以矩阵加法计算为例,给定两个数组按照对应元素相加,在循环体内的语句每次对两个矩阵X、Y对应位置的一组元素进行加法操作,然后将结果写入Z矩阵对应位置。
本实施例采用Neon Intrinsics改写该循环体内部函数,采用vaddq_f32命令可以同时操作四组浮点数,并行计算每一组数据的和,将四组计算结果同时写入Arm处理器的128位向量寄存器,此时循环的增量控制指令部分可以由原来的“i+=1”变为“i+=4”,即循环的次数变为原来的四分之一,但是产生的汇编代码的长度却是几乎相等的,这样运算的速度可以提升到原来的四倍。更进一步地,对于实际的代码,需要根据情况进行专门的改写,通过改写后,可以充分利用Arm的多核心、并行的特性,实现最大程度地发挥Arm架构的优势。
对于循环体本身的优化,本实施例根据循环体的计算复杂度进行相应的拆分、合并和展开的操作。
本实施例中将时间复杂度在O(N2)及以上的循环体视作大循环体,将时间复杂度在O(N2)以下的循环体视为小循环体。针对大循环体,将循环体中内层的循环语句作为单独的整体,得到其对应的计算结果,然后将所述计算结果作为原循环体外层循环的输入,并另起一个新的循环在原程序的后方,实现循环体的拆分操作,用于减小循环的尺寸;针对小循环体,将待优化函数上下流中的若干循环体合并至一个循环体,具体的,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原程序后方的循环体作为合并后的循环体的外循环,实现循环体的合并操作,用于提高寄存器的利用效率。
针对循环体之间存在循环依赖或访问冲突的场景,本实施例采用手工循环展开的方式,以牺牲函数尺寸的代价来降低循环带来的开销,加快程序执行速度。本实施例采用的手工循环展开方式,是指将待处理循环体的循环内容手动改写,在一次循环体内完成两次甚至更多次的操作,例如计算0~100的自然数之和,原循环体每次叠加当前变量的值,修改为叠加当前变量及其之后共N个数的值,以此减少循环次数到原来的1/N。经过手工循环展开处理后的循环中每一步的增量相应地减少,且循环的次数相应地减少,循环所产生的开销也相对地减少。
S4:对待优化函数进行多线程处理。
本实施例中,对待优化函数进行多线程处理的具体步骤包括使用OpenMP进行多线程改写、合理化并行执行的任务大小、避免不必要的共享写入。
本实施例中通过OpenMP来充分利用Arm架构的多核心进行并行计算。具体的,在需要多线程处理的语句前添加调用OpenMP的“#pragma omp parallel”指令,使其能将所控制的语句分发到各核心上以实现并行。其中“#pragma omp parallel”具体指令作用是通知编译器,接下来编译器所覆盖到的代码段应该使用多线程予以执行,如果不专门指定线程的数目,那么这里的多线程执行中线程数由操作系统自行决定,典型情况下系统将在每个核上运行一个线程。经过使用OpenMP进行多线程改写处理后可以充分利用Arm的多核心优势,将一个大的任务分发到各个核心上进行计算,大大提升程序运行的速度。
针对待优化函数进行合理化并行执行的任务大小,考虑到当每个核分得的任务过小时,线程管理、任务分发和同步等操作代价比例增加可能导致最终性能下降。本实施例通过实测确定每个核的最小任务大小,即最佳线程数目。在实际的实验中,由于硬件配置和软件环境的不同,每个核的最佳线程数通常没有一个特定的标准予以确定。本实施例对程序的任务大小进行线性化的划分(划分的细粒度视具体任务而定),然后对划分的任务进行实际的测量,通常选取出合理的任务细粒度划分下的运行时间最短的作为最终确定的最小任务大小。
针对待优化函数进行避免不必要的共享写入,考虑到多核写入共享变量会导致Cache Line在这些核心的私有Cache之间重复无效化,降低Cache命中率,本实施例中通过在OpenMP代码中使用reduction子句替代直接写入共享变量,通过在循环过程中写入线程私有变量来提升计算的性能。具体的,在“#pragma omp parallel”指令后添加“reduction(cal:val)”语句,其中“cal”表示reduction归约后的归约计算方法,“val”表示reduction归约后的归约结果存储的变量。通过上述操作,能够有效减少计算过程中产生的不必要的重复Cache写入,帮助提升Cache的命中率,以加快程序的运行速度。
S5:将完成函数优化的NumPy源代码进行编译优化。
经过S3~S4步骤的优化处理后,需要对改写后的NumPy源代码进行编译使其成为可供Python链接的一个库。本实施例中,对完成函数优化的NumPy源代码进行编译优化的具体步骤包括自动向量化处理、选择编译优化选项。
针对S3步骤中未优化的循环体以外的多条相似简单语句,本实施例采用自动向量化方法使其达到并行的效果,以提升程序运行的速度。具体的,本实施例中采用在编译选项中加上“-ftree-vectorize”指令,该指令用于设定编译器自动采用Neon Intrinsics对程序的编译过程进行优化,得到高效的汇编代码。
进一步的,为了满足用户不同程度的需要,通常提供了-O0、-O1、-O2、-O3四种优化选项来对编译时间、目标文件长度和执行效率这三个维度进行取舍与平衡。其中-O0为默认编译选项,不对编译过程做任何优化;-O1为部分编译优化选项,主要涉及代码尺寸的缩小;-O2为推荐编译选项,该选项会进行更多关于不包含时间和空间折中的优化,但是不会进行循环打开和函数内联;-O3为最高界别优化,它会引入编译器自动向量化,但是会导致编译调优的困难。
本实施例在编译改写的NumPy源代码时选用-O2级别的推荐编译选项优化。
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。

Claims (10)

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)的循环体,将有依赖关系的变量所在的循环进行合并,位于原程序前方的循环体作为合并后的循环体的内循环,位于原程序后方的循环体作为合并后的循环体的外循环,实现循环体的合并操作。
6.根据权利要求4所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,对于循环之间存在循环依赖或访问冲突的循环体,采用手工循环展开操作;其具体步骤如下:将待处理循环体的循环内容进行手动改写,在一次循环体内完成大于或等于两次的操作。
7.根据权利要求1所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,所述S4步骤中,对待优化函数进行多线程处理的具体步骤包括使用OpenMP进行多线程改写、合理化并行执行的任务大小、避免不必要的共享写入。
8.根据权利要求7所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,所述Arm架构中的一个计算节点包括128个核心;在所述S4步骤中,对待优化函数使用OpenMP进行多线程改写时,在需要多线程处理的语句前添加调用指令,使其能将所控制的语句分发到各核心上实行;
对待优化函数进行合理化并行执行的任务大小时,对计算节点的任务大小进行线性化划分,然后对划分的任务进行实测,选取出合理的任务细粒度划分下的运行时间最短的任务大小作为核心的最小任务大小;
对待优化函数进行避免不必要的共享写入时,通过OpenMP代码中使用reduction子句替代直接写入共享变量,在循环过程中写入线程私有变量。
9.根据权利要求1所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,所述S5步骤中,对完成函数优化的NumPy源代码进行编译优化的具体步骤包括自动向量化处理、选择编译优化选项。
10.根据权利要求9所述的基于Arm架构的NumPy运算加速优化方法,其特征在于,对完成函数优化的NumPy源代码进行自动向量化处理时,设定Arm架构中的编译器自动采用NeonIntrinsics对程序的编译过程进行优化;
对完成函数优化的NumPy源代码进行选择编译优化选项处理时,对Arm架构中的编译器设置O2优化选项,执行不包含时间和空间这种的优化,且不进行循环打开和函数内联。
CN202110062369.5A 2021-01-18 2021-01-18 一种基于Arm架构的NumPy运算加速优化方法 Active CN112783503B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110062369.5A CN112783503B (zh) 2021-01-18 2021-01-18 一种基于Arm架构的NumPy运算加速优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110062369.5A CN112783503B (zh) 2021-01-18 2021-01-18 一种基于Arm架构的NumPy运算加速优化方法

Publications (2)

Publication Number Publication Date
CN112783503A true CN112783503A (zh) 2021-05-11
CN112783503B CN112783503B (zh) 2023-12-22

Family

ID=75756328

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110062369.5A Active CN112783503B (zh) 2021-01-18 2021-01-18 一种基于Arm架构的NumPy运算加速优化方法

Country Status (1)

Country Link
CN (1) CN112783503B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070294680A1 (en) * 2006-06-20 2007-12-20 Papakipos Matthew N Systems and methods for compiling an application for a parallel-processing computer system
US20100070956A1 (en) * 2008-09-17 2010-03-18 Reservoir Labs, Inc Methods and apparatus for joint parallelism and locality optimization in source code compilation
CN102446160A (zh) * 2011-09-06 2012-05-09 中国人民解放军国防科学技术大学 面向双精度simd部件的矩阵乘实现方法
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
US20160246580A1 (en) * 2015-02-23 2016-08-25 Qualcomm Incorporated Whole-program optimization using data from previous compilation runs
CN110383247A (zh) * 2017-04-28 2019-10-25 伊纽迈茨有限公司 由计算机执行的方法、计算机可读介质与异构计算系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070294680A1 (en) * 2006-06-20 2007-12-20 Papakipos Matthew N Systems and methods for compiling an application for a parallel-processing computer system
US20100070956A1 (en) * 2008-09-17 2010-03-18 Reservoir Labs, Inc Methods and apparatus for joint parallelism and locality optimization in source code compilation
CN102446160A (zh) * 2011-09-06 2012-05-09 中国人民解放军国防科学技术大学 面向双精度simd部件的矩阵乘实现方法
US20160246580A1 (en) * 2015-02-23 2016-08-25 Qualcomm Incorporated Whole-program optimization using data from previous compilation runs
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN110383247A (zh) * 2017-04-28 2019-10-25 伊纽迈茨有限公司 由计算机执行的方法、计算机可读介质与异构计算系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
L. ODEN: "Lessons learned from comparing C-CUDA and Python-Numba for GPU-Computing", 2020 28TH EUROMICRO INTERNATIONAL CONFERENCE ON PARALLEL, DISTRIBUTED AND NETWORK-BASED PROCESSING, pages 216 - 223 *
龚鸣清;叶煌;张鉴;卢兴敬;陈伟;: "基于ARMv8架构的面向机器翻译的单精度浮点通用矩阵乘法优化", 计算机应用, no. 06, pages 7 - 12 *

Also Published As

Publication number Publication date
CN112783503B (zh) 2023-12-22

Similar Documents

Publication Publication Date Title
Owaida et al. Synthesis of platform architectures from OpenCL programs
US10331615B2 (en) Optimization of loops and data flow sections in multi-core processor environment
Wang et al. Kernel fusion: An effective method for better power efficiency on multithreaded GPU
JP7015249B2 (ja) 再構成可能アルゴリズムによるパイプラインコアおよびアルゴリズムマッチングパイプラインコンパイラを有するプロセッサ
US8572588B2 (en) Thread-local memory reference promotion for translating CUDA code for execution by a general purpose processor
US7181730B2 (en) Methods and apparatus for indirect VLIW memory allocation
WO2013184380A2 (en) Systems and methods for efficient scheduling of concurrent applications in multithreaded processors
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
US20230024035A1 (en) Zero-copy sparse matrix factorization synthesis for heterogeneous compute systems
EP2523120A1 (en) Microcomputer architecture for low power efficient baseband processing
Homann et al. SoAx: A generic C++ Structure of Arrays for handling particles in HPC codes
Owaida et al. Massively parallel programming models used as hardware description languages: The OpenCL case
Rauber et al. General Purpose GPU Programming
Rutzig et al. A transparent and energy aware reconfigurable multiprocessor platform for simultaneous ILP and TLP exploitation
CN112783503A (zh) 一种基于Arm架构的NumPy运算加速优化方法
Lebacki et al. The pgi fortran and c99 openacc compilers
Planas et al. AMA: Asynchronous management of accelerators for task-based programming models
Agathos et al. Adaptive openmp runtime system for embedded multicores
Ozen Compiler and runtime based parallelization & optimization for GPUs
Wang et al. Program optimization of array-intensive spec2k benchmarks on multithreaded gpu using cuda and brook+
Chen Crystal: A synthesis approach to programming parallel machines
Agathos et al. Compiler-assisted, adaptive runtime system for the support of OpenMP in embedded multicores
Souza et al. Towards a dynamic and reconfigurable multicore heterogeneous system
Miles et al. Performance portability and OpenACC
Luo et al. Parallel Optimization of Super Pixel Algorithm SLIC

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant