CN111857727B - 一种多维循环自动向量化分块因子分块方法及装置 - Google Patents
一种多维循环自动向量化分块因子分块方法及装置 Download PDFInfo
- Publication number
- CN111857727B CN111857727B CN202010706144.4A CN202010706144A CN111857727B CN 111857727 B CN111857727 B CN 111857727B CN 202010706144 A CN202010706144 A CN 202010706144A CN 111857727 B CN111857727 B CN 111857727B
- Authority
- CN
- China
- Prior art keywords
- blocking
- vectorization
- loop
- data
- vectorizable
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
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
本发明公开了一种多维循环自动向量化分块因子分块方法及装置,对已进行常规分块的循环代码识别可向量化循环层,为可向量化循环层选择分块因子,为可向量化循环层选择分块因子使得循环体中所有可向量化数据的数目最大,将可向量化循环层的分块因子进行调整,以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,针对具有病态规模的循环较现有方法可以获得更好的程序加速比,同时具有良好的可扩展性,本发明通过为可向量化循环层选择合理的分块因子,增强数据的对齐性,增加可向量化数据的数目,从而使程序在向量处理器上获得更好的性能。
Description
技术领域
本发明属于编译优化领域,特别涉及一种多维循环自动向量化分块因子分块方法及装置。
背景技术
在计算密集型应用程序中,特别是科学和工程计算应用程序,循环嵌套计算会耗费大部分的运行时间,称为亟待解决的程序热点。处理器计算程序的循环分块是一种应用广泛的循环优化技术,通过仿射变换对程序计算的嵌套循环部分进行代码转换,一方面增加程序的数据局部性,降低cache失效率;另一方面开发循环代码的粗粒度并行性,充分利用多核处理器的计算性能。分块后的循环迭代根据分块因子大小重置访存顺序,从而减小数据重用距离。因此,分块因子大小的选择对循环分块代码的性能有着重要的影响。近年来,随着SIMD扩展部件在微处理器和协处理器中的发展,向量寄存器的位数逐渐增加,使得自动向量化技术在开发嵌套循环的细粒度并行性方面得到有效提高。但是,循环分块的分块因子大小选择不仅影响处理器程序的局部性,也影响程序的自动向量化收益,现有方法在开发多维(维度大于1)循环自动向量化过程中因数据不对齐易导致向量化收益低下,出现病态规模问题,从而降低了处理器的处理速度。因此,如何实现分块因子的有效循环分块,在保持程序访存局部性的同时充分利用向量化收益,对处理器计算程序性能的提高具有积极意义。
发明内容
本发明的目的在于提供一种多维循环自动向量化分块因子分块方法及装置,以克服现有方法在多维循环自动向量化过程中因数据不对齐导致向量化收益低下的问题。
为达到上述目的,本发明采用如下技术方案:
一种多维循环自动向量化分块因子分块方法,包括以下步骤:
步骤1)、对已进行常规分块的循环代码识别可向量化循环层;
步骤2)、为可向量化循环层选择分块因子;
步骤3)、以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子调整为最佳分块因子,实现多维循环自动向量化分块因子分块。
进一步的,可向量化循环层是满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支。
进一步的,可向量化循环层包括嵌套循环中的最内层循环和单层循环。
进一步的,分块因子J的大小使得循环体中所有可向量化数据的数目最大。
进一步的,可向量化数据的数目为所有可向量化数据块中的数据个数。
进一步的,可向量化数据块为内存中连续的向量因子大小的数据,其第一个数据的地址对齐于向量寄存器。
进一步的,设可向量化循环层访问的数组最后一维的长度为W,向量因子为V,遍历所有的分块因子J,V≤J≤W,并计算对应的可向量化数据的数目值,取使得可向量化数据的数目值最大的分块因子作为最佳分块因子。
进一步的,向量因子为向量寄存器可容纳的最大操作数数目。
进一步的,可向量化数据的数目计算具体步骤为:
1)、初始化使可向量化数据的数目归零;
2)、从可向量化数据块数组第0行第0列开始,向右遍历数组元素,每当碰到一对相邻的地址对齐线时,若它们之间的所有元素位于同一个分块内,则使NUM_VEC累加向量因子;
3)、重复步骤2)继续遍历剩下的行,直至所有的行都被遍历完毕,即可得到可向量化数据的数目。
一种多维循环自动向量化分块因子分块装置,包括可向量化循环层识别模块、分块因子选择模块和多维向量化分块因子分块模块,其中,可向量化循环层识别模块用于识别获取已进行常规分块的循环代码的可向量化循环层,可向量化循环层满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支;分块因子选择模块用于为可向量化循环层选择分块因子;多维向量化分块因子分块模块用于以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子调整为最佳分块因子,实现多维循环自动向量化分块因子分块。
与现有技术相比,本发明具有以下有益的技术效果:
本发明一种多维循环自动向量化分块因子分块方法,对已进行常规分块的循环代码识别可向量化循环层,为可向量化循环层选择分块因子,为可向量化循环层选择分块因子使得循环体中所有可向量化数据的数目最大,将可向量化循环层的分块因子进行调整,以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,针对具有病态规模的循环较现有方法可以获得更好的程序加速比,同时具有良好的可扩展性,本发明通过为可向量化循环层选择合理的分块因子,增强数据的对齐性,增加可向量化数据的数目,从而提高了处理器计算效率,使处理器中病态规模程序计算在向量处理器上获得更好的性能。
进一步的,对于单层循环以及嵌套循环中的最内层循环,编译器能够自动向量化,访问速度快。
本发明一种多维循环自动向量化分块因子分块装置,结构简单,通过为可向量化循环层选择合理的分块因子,增强数据的对齐性,增加可向量化数据的数目,从而使病态规模程序计算在向量处理器上获得更好的性能。
附图说明
图1为本发明实施例中可向量化循环层输出组在内存中的数据布局示意图。
具体实施方式
下面结合附图对本发明做进一步详细描述:
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步地详细说明。应当理解,此处描述的实施用例仅用于解释本发明的基本构想,并不用于限定本发明的保护范围。
本发明采用矩阵乘matmul程序作为程序实例,输入数组分别为A、B,输出数组为C,问题规模为N,行分块因子为I,可向量化循环层分块因子为J。图1为matmul程序中数组C在内存中的数据布局。本发明的程序实例涉及的数据类型为双精度浮点数。
本发明一种多维循环自动向量化分块因子分块方法,包括以下步骤:
步骤1)、对已进行常规分块的循环代码识别可向量化循环层;
可向量化循环层是满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支;对于单层循环,以及嵌套循环中的最内层循环,编译器能够自动向量化,因此,嵌套循环中的最内层循环,以及单层循环都是可向量化循环层。
步骤2)、为可向量化循环层选择分块因子J;
可向量化数据的数目为所有可向量化数据块中的数据个数,可向量化数据越多,向量化收益也越大。为获得最大的向量化收益,分块因子J的大小使得循环体中所有可向量化数据的数目NUM_VEC最大;可向量化数据块为内存中连续的向量因子大小的数据,其第一个数据的地址对齐于向量寄存器。
步骤3)、以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子J调整为Best_J,实现多维循环自动向量化分块因子分块。设可向量化循环层访问的数组最后一维的长度为W,向量因子为V,遍历所有的分块因子J(V≤J≤W),并计算对应的可向量化数据的数目NUM_VEC值,取使得可向量化数据的数目NUM_VEC值最大的分块因子作为最佳分块因子Best_J;向量因子为向量寄存器可容纳的最大操作数数目。
可向量化数据的数目NUM_VEC具体计算方式包括以下步骤:
1、初始化,使可向量化数据的数目NUM_VEC归零;
2、从可向量化数据块数组第0行第0列开始,向右遍历数组元素,每当碰到一对相邻的地址对齐线时,若它们之间的所有元素位于同一个分块内,则使NUM_VEC累加V;地址对齐线如图1所示。
3、重复步骤2继续遍历剩下的行,直至所有的行都被遍历完毕,即可得到可向量化数据的数目NUM_VEC。
本发明的硬件实例中,向量寄存器的宽度为32字节,能同时容纳4个双精度浮点数,向量因子为4。
一种多维循环自动向量化分块因子分块装置,包括可向量化循环层识别模块、分块因子选择模块和多维向量化分块因子分块模块,其中,可向量化循环层识别模块用于识别获取已进行常规分块的循环代码的可向量化循环层,可向量化循环层满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支;分块因子选择模块用于为可向量化循环层选择分块因子;多维向量化分块因子分块模块用于以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子调整为最佳分块因子,实现多维循环自动向量化分块因子分块。
如图1所示,数组C的第一行C[0][:]分成三部分,分别位于三个可向量化数据块中。第一可向量化数据块中的C[0][0:5]首先被载入cache中参与计算,其中C[0][0:3]是可向量化数据,而C[0][4:5]的长度小于向量处理单元的宽度,无法被向量化,故C[0][0:5]可向量化数据个数NUM_VEC(C[0][0:5])=4。第二可向量化数据块中的C[0][6:11]被载入cache中参与计算时,C[0][6]的地址非对齐,C[0][6:7]无法被向量化,而C[0][8:11]可以被向量化,故C[0][6:11]可向量化数据个数NUM_VEC(C[0][6:11])=4。同理分析数组C的其余行,计算得到当分块因子J=6时,数组C的可向量化数据的数目NUM_VEC(C)=80。
计算当J等于其他值时对应的NUM_VEC,列出并比较结果(表1)
表1不同J对应的NUM_VEC值
其中,最大的NUM_VEC值为160,对应的J为11,因此11为本实例中最佳的可向量化循环层分块因子,Best_J=11。
在确定Best_J后,将程序可向量化循环层的分块因子J的值设置为Best_J,同时以最优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子。对已进行常规分块的循环代码识别可向量化循环层,对于单层循环以及嵌套循环中的最内层循环,编译器能够自动向量化,为可向量化循环层选择分块因子使得循环体中所有可向量化数据的数目最大,将可向量化循环层的分块因子进行调整,以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,针对具有病态规模的循环较现有方法可以获得更好的程序加速比,同时具有良好的可扩展性。通过为可向量化循环层选择合理的分块因子,增强数据的对齐性,增加可向量化数据的数目,从而使程序在向量处理器上获得更好的性能。
本发明在一台Intel Xeon E7-4820服务器上进行了实验验证,实验结果表明,本发明针对病态规模问题能够明显增加可向量化数据的数目,相对基线程序有更好的性能表现。选择病态问题规模的8个测试程序进行对比测试,与现有方法SICA、TTS相比,本发明实现的多维循环自动向量化分块因子选择方法将并行任务的执行速度平均提高了8.7%。
Claims (8)
1.一种多维循环自动向量化分块因子分块方法,其特征在于,包括以下步骤:
步骤1)、识别获取已进行常规分块的循环代码的可向量化循环层,可向量化循环层是满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支;
步骤2)、为可向量化循环层选择分块因子;
步骤3)、以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子调整为最佳分块因子,实现多维循环自动向量化分块因子分块,具体的,设可向量化循环层访问的数组最后一维的长度为W,向量因子为V,遍历所有的分块因子J,V≤J≤W,并计算对应的可向量化数据的数目值,取使得可向量化数据的数目值最大的分块因子作为最佳分块因子。
2.根据权利要求1所述的一种多维循环自动向量化分块因子分块方法,其特征在于,可向量化循环层包括嵌套循环中的最内层循环和单层循环。
3.根据权利要求1所述的一种多维循环自动向量化分块因子分块方法,其特征在于,分块因子J的大小使得循环体中所有可向量化数据的数目最大。
4.根据权利要求3所述的一种多维循环自动向量化分块因子分块方法,其特征在于,可向量化数据的数目为所有可向量化数据块中的数据个数。
5.根据权利要求3所述的一种多维循环自动向量化分块因子分块方法,其特征在于,可向量化数据块为内存中连续的向量因子大小的数据,其第一个数据的地址对齐于向量寄存器。
6.根据权利要求1所述的一种多维循环自动向量化分块因子分块方法,其特征在于,向量因子为向量寄存器可容纳的最大操作数数目。
7.根据权利要求1所述的一种多维循环自动向量化分块因子分块方法,其特征在于,可向量化数据的数目计算具体步骤为:
1)、初始化使可向量化数据的数目归零;
2)、从可向量化数据块数组第0行第0列开始,向右遍历数组元素,每当碰到一对相邻的地址对齐线时,若它们之间的所有元素位于同一个分块内,则使可向量化数据的数目NUM_VEC累加向量因子;
3)、重复步骤2)继续遍历剩下的行,直至所有的行都被遍历完毕,即可得到可向量化数据的数目。
8.一种多维循环自动向量化分块因子分块装置,其特征在于,包括可向量化循环层识别模块、分块因子选择模块和多维向量化分块因子分块模块,其中,可向量化循环层识别模块用于识别获取已进行常规分块的循环代码的可向量化循环层,可向量化循环层满足编译器自动向量化条件的循环层,满足编译器自动向量化条件包括迭代次数可数、所有数据共享相同的控制流和无条件分支;分块因子选择模块用于为可向量化循环层选择分块因子;多维向量化分块因子分块模块用于以优化程序并行性和局部性为目标,通过数学规划的方法计算和调整其他循环层的分块因子,将可向量化循环层的分块因子调整为最佳分块因子,实现多维循环自动向量化分块因子分块,具体是设可向量化循环层访问的数组最后一维的长度为W,向量因子为V,遍历所有的分块因子J,V≤J≤W,并计算对应的可向量化数据的数目值,取使得可向量化数据的数目值最大的分块因子作为最佳分块因子。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010706144.4A CN111857727B (zh) | 2020-07-21 | 2020-07-21 | 一种多维循环自动向量化分块因子分块方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010706144.4A CN111857727B (zh) | 2020-07-21 | 2020-07-21 | 一种多维循环自动向量化分块因子分块方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111857727A CN111857727A (zh) | 2020-10-30 |
CN111857727B true CN111857727B (zh) | 2021-07-13 |
Family
ID=73001240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010706144.4A Active CN111857727B (zh) | 2020-07-21 | 2020-07-21 | 一种多维循环自动向量化分块因子分块方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111857727B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN106990995A (zh) * | 2017-03-22 | 2017-07-28 | 西安交通大学 | 一种基于机器学习的循环分块大小选择方法 |
CN107193535A (zh) * | 2017-05-16 | 2017-09-22 | 中国人民解放军信息工程大学 | 基于simd扩展部件的嵌套循环向量并行的实现方法及其装置 |
CN109408867A (zh) * | 2018-09-12 | 2019-03-01 | 西安交通大学 | 一种基于mic协处理器的显式r-k时间推进加速方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8627304B2 (en) * | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
-
2020
- 2020-07-21 CN CN202010706144.4A patent/CN111857727B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN106990995A (zh) * | 2017-03-22 | 2017-07-28 | 西安交通大学 | 一种基于机器学习的循环分块大小选择方法 |
CN107193535A (zh) * | 2017-05-16 | 2017-09-22 | 中国人民解放军信息工程大学 | 基于simd扩展部件的嵌套循环向量并行的实现方法及其装置 |
CN109408867A (zh) * | 2018-09-12 | 2019-03-01 | 西安交通大学 | 一种基于mic协处理器的显式r-k时间推进加速方法 |
Non-Patent Citations (3)
Title |
---|
《Outer-Loop Auto-Vectorization for SIMD Architectures Based on Open64 Compiler》;wangdong 等;《2016 17th International Conference on Parallel and Distributed Computing, Applications and Technologies (PDCAT)》;20170608;第19-23页 * |
SIMD自动向量化编译优化概述;高伟等;《系统软件与软件工程》;20150807;第26卷(第6期);第1265-1284页 * |
面向局部性和并行优化的循环分块技术;刘松等;《计算机研究与发展》;20150619;第52卷(第5期);第1160-1176页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111857727A (zh) | 2020-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107168683B (zh) | 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 | |
CN106940815B (zh) | 一种可编程卷积神经网络协处理器ip核 | |
Ho et al. | Exploiting half precision arithmetic in Nvidia GPUs | |
US8583898B2 (en) | System and method for managing processor-in-memory (PIM) operations | |
US5247696A (en) | Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory | |
US10303735B2 (en) | Systems, apparatuses, and methods for K nearest neighbor search | |
Huang et al. | Strassen’s algorithm reloaded on GPUs | |
Aji et al. | Cell-swat: modeling and scheduling wavefront computations on the cell broadband engine | |
CN113987414B (zh) | 基于ARMv8多核处理器的小型和不规则矩阵乘优化方法 | |
Caminal et al. | Accelerating database analytic query workloads using an associative processor | |
Higbie | Tutorial: Supercomputer architecture | |
Ren et al. | Exploration of alternative GPU implementations of the pair-HMMs forward algorithm | |
Tang et al. | Optimizing and auto-tuning iterative stencil loops for GPUs with the in-plane method | |
CN111857727B (zh) | 一种多维循环自动向量化分块因子分块方法及装置 | |
US8826252B2 (en) | Using vector atomic memory operation to handle data of different lengths | |
CN114117896B (zh) | 面向超长simd管线的二值规约优化实现方法及系统 | |
CN116092587A (zh) | 一种基于生产者-消费者模型的生物序列分析系统及方法 | |
Bi et al. | Efficiently Running SpMV on Multi-core DSPs for Banded Matrix | |
CN112783511B (zh) | 一种栅元少群参数计算模块程序的优化方法、系统、终端 | |
Yang et al. | thSORT: an efficient parallel sorting algorithm on multi-core DSPs | |
Xu et al. | Optimal loop tiling for minimizing write operations on nvms with complete memory latency hiding | |
Dun et al. | Adaptive Sparse Deep Neural Network Inference on Resource-Constrained Cost-Efficient GPUs | |
Bi et al. | Efficiently Running SpMV on Multi-Core DSPs for Block Sparse Matrix | |
Saidani et al. | Parallelization schemes for memory optimization on the Cell processor: A case study of image processing algorithm | |
Shen et al. | Memory partition for simd in streaming dataflow architectures |
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 |