CN103279327B - 面向异构simd扩展部件的自动向量化方法 - Google Patents

面向异构simd扩展部件的自动向量化方法 Download PDF

Info

Publication number
CN103279327B
CN103279327B CN201310155403.9A CN201310155403A CN103279327B CN 103279327 B CN103279327 B CN 103279327B CN 201310155403 A CN201310155403 A CN 201310155403A CN 103279327 B CN103279327 B CN 103279327B
Authority
CN
China
Prior art keywords
vector
vectorization
instruction
statement
virtual
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.)
Expired - Fee Related
Application number
CN201310155403.9A
Other languages
English (en)
Other versions
CN103279327A (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.)
PLA Information Engineering University
Original Assignee
PLA Information Engineering 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 PLA Information Engineering University filed Critical PLA Information Engineering University
Priority to CN201310155403.9A priority Critical patent/CN103279327B/zh
Publication of CN103279327A publication Critical patent/CN103279327A/zh
Application granted granted Critical
Publication of CN103279327B publication Critical patent/CN103279327B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及高性能计算自动并行化领域,特别涉及一种面向异构SIMD扩展部件的自动向量化方法,适用于不同向量长度、不同向量指令集的异构SIMD扩展部件,设计一套虚拟指令集,能够在自动向量化统一架构下将输入的C和Fortran程序转化为虚拟指令的中间表示,通过向量长度解虚拟化和指令集解虚拟化,自动变换为面向异构SIMD扩展部件的向量化代码,使程序员从繁冗复杂的手工向量化编码中解脱出来,本发明将向量化方法与相关优化方法相结合,从不同粒度进行向量识别,通过常规优化和引用点优化,最大限度的发掘循环级和基本块级的混合并行性,通过分析跨越基本块的数据依赖,对生成后的代码进行冗余优化,有效提升了程序的执行效率。

Description

面向异构SIMD扩展部件的自动向量化方法
技术领域
本发明涉及高性能计算自动并行化领域,特别涉及一种面向异构SIMD扩展部件的自动向量化方法。
背景技术
人类对计算能力无休止的需求,使得并行计算技术越来越受到人们的重视,总体上并行硬件技术的发展要远远快于并行软件技术的发展。SIMD扩展部件为提升程序性能提供了硬件支持,为充分发挥SIMD扩展的性能,需要充分发掘程序中的并行性,开发具有良好可扩展性的向量化程序。
如今计算问题规模庞大、计算量大,手工编写向量化程序难度较大,自动向量化技术通过分析程序中语句操作和数据的特征,识别出串行程序中可以向量化的代码部分,不需要程序员对程序进行修改就可以在编译器下进行向量化编译,使程序员摆脱繁琐及手工易错的向量化代码编写工作,提高代码的重用性。
传统向量化技术是较早使用且较为成熟的技术,其基本思想是按照循环内的数据依赖构造相应的语句依赖图,语句依赖中不在强连通分量的语句就是可以向量执行的语句,该方法不用考虑向量长度的影响,但是其方法也可用于向量长度有限的SIMD扩展。
超字并行向量化思想来源于指令级并行,以基本块为单位识别出相邻且连续的访问语句,对其中的同构语句进行打包,然后根据定义使用关系进行包扩展,最后生成比传统向量化更有效的打包方案。
模式匹配的向量化方法需要视目标程序的特征来确定匹配的模式,首先将循环内的指令组进行划分,以数据存取指令为起始节点构建树形结构,然后识别基本块内的公共子表达式,最后采用数据重组算法对其中的公共子表达式进行优化。
以上三种典型向量化方法中,传统向量化对循环进行逐层分析,当依赖为内层循环携带依赖环时无法向量化;超字并行向量化在包生成中有一定的随机性,可能导致最终的向量化策略和理想的结果不一致;模式匹配向量化仅是上述两种方法的补充。这些方法仅能对具有单一的向量长度的一种SIMD指令集生成向量化代码,其可移植性和可扩展性不强,具有一定的局限性。
发明内容
为克服现有技术中的不足,针对目前异构SIMD扩展部件具有不同向量长度和不同指令集,本发明提供一种具有可扩展性、可移植性且灵活、高效的面向异构SIMD扩展部件的自动向量化方法。
按照本发明所提供的设计方案,一种面向异构SIMD扩展部件的自动向量化方法,与特定ISA(指令集架构)指令集无关的阶段包括预优化与分析、循环展开与优化、超字并行向量化发掘,这些阶段将通过向量识别和并行性发掘,变换为包含虚拟向量指令集信息的中间表示;向量长度解引用和指令集解虚拟化进行虚实转换,变换得到包含特定SIMD指令集的中间表示,该自动向量化方法包含如下步骤:
设计虚拟向量指令集,针对不同向量长度和不同向量指令集的异构SIMD扩展部件,设计一套包括存取指令、算术运算指令、逻辑运算指令、移位指令、选择指令、比较指令和整理指令在内的七类基本指令,且与指令集无关、与向量长度无关、与数据类型无关的虚拟向量指令集,虚拟向量长度与具体平台指令集架构的长度位数无关,其值
其中Leni为不同平台的向量长度;
该值实际ISA向量长度按2n取整的最大值,由于当前大多SIMD硬件或向量化方法支持stride(跨步)访问的向量操作,当stride为2n时具有一定的向量化收益,simd_gather和simd_scatter两种指令用来实现stride内存访问的虚拟操作,整理指令中simd_shuffle通过掩码能够将两向量任意位置的元素进行重组,具体实现的虚拟指令见表1,
表1虚拟向量指令集列表:
步骤2、预分析与优化,对能否进行基本块向量化进行可行性分析,首先进行循环迭代次数分析,设置循环迭代次数阈值,分析语句向量化情况,包含如下内容:
2.1、根据循环中语句可向量化指令个数与语句的指令总数的比例,首先判断不同平台上是否提供该条指令所对应的向量化指令,然后,对不同的指令赋于不同的权值,通过计算语句中可向量化操作的权重,得到向量化后收益值,当该收益值大于设定的阈值时,该语句向量化;
2.2、根据循环中可向量化语句占循环中语句总数的比例,通过步骤2.2得到循环中可向量化语句占循环中语句总数的比例,当该值大于设定的阈值时,该语句向量化;
2.3、根据循环中可向量化的操作个数占所有操作个数的比例,对不同的可向量化操作赋予不同的权重,得到循环中可向量化的操作个数占所有操作个数的比例,设定的阈值为从总体上判断循环中可向量化操作的数目,当得到的比例值大于设定的阈值时,该语句向量化;
2.4、根据循环中访问存储器的操作个数占循环中所有操作个数的比例,设定的阈值为从总体上判断循环访问存储器的操作数目,当得到的比例值大于设定的阈值时,该语句向量化;
步骤3、引用点分析与优化,包含如下步骤:
3.1、数组引用点对齐分析,基本块向量化模块建立数组引用点的对齐信息,计算循环外或者循环内数组引用点对齐信息,并建立引用点到对齐信息的映射;
3.2、确定循环展开因子,在循环内分析相邻地址引用,收集所有迭代间连续的引用点连续地址偏移,通过虚拟向量长度确定展开因子:
u n r o l l _ f a c t o r = Len v G C D ( Len v , offset 1 , ... , offset i , ... ) , 其中offseti为不同引用点的连续地址偏移;
3.3、循环剥离,确定循环剥离因子,实施循环剥离变换;
3.4、循环展开,按照循环展开因子进行循环展开变换;
3.5、多版本优化,当引用点的数组首地址不可知,或数组某一维不可知,或某一维线性下标中有符号量,通过多版本优化来确定其对齐信息;
步骤4:超字并行向量化发掘,包含:
4.1、将基本块中的语句进行三地址化,引入寄存器,每条语句转化为原子操作,并更新定义-使用关系图和数组依赖图;
4.2、向量化发掘,向量化发掘的对象为基本块,采用使用定义链优先搜索的超字并行发掘方式,按照虚拟向量长度对应的虚拟向量寄存器槽位数对同构语句进行组合;
4.3、向量化发掘根据收益分析进行判断,构建代价模型,统计所有向量化操作相比较对应的标量操作所节省的时延开销,同时减去数据重组所带来的时延开销,并对产生收益的语句进行向量化打包,每个包及其间的操作分别与虚拟向量和虚拟向量指令对应;
步骤5:向量长度解虚拟化,为保证虚拟向量长度能够转化为不同长度的物理向量,打包进虚拟向量的基本操作数为打包进物理向量操作数的倍数,向量长度解虚拟化包含如下步骤:
5.1、依据向量间、标量间和向量与标量间的依赖关系构建语句依赖图;
5.2、根据实际向量长度和虚拟向量长度对向量进行切分;
5.3、在语句依赖图的基础上按照拓扑顺序对向量操作进行切分;
5.4、基本块内的所有SIMD向量操作进行切分后,进行循环展开或压紧的反变换;
5.5、通过步骤5.4反变换后得到具有特定向量长度的SIMD虚拟指令;
步骤6:指令集解虚拟化,由虚拟指令向具体平台指令集进行映射,具体步骤如下:
6.1、在依赖关系图的基础上依次分析每条虚拟向量指令;
6.2、若能进行一对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行一对一向量指令映射,则进入步骤6.3;
6.3、若能进行多对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行多对一向量指令映射,则进入步骤6.4;
6.4、若能进行一对多向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行一对多向量指令映射,则进入步骤6.5;
6.5、若能进行一对多标量指令映射和转换,返回步骤6.1;
6.6、对依赖关系图中的所有语句进行遍历后,得到具体平台向量ISA的实际向量指令;
步骤7:向量化代码优化,针对基本块间的冗余操作,以基本块为单位构建控制流图和数据流图,发掘基本块间的数据依赖,在基本块间建立各个变量打包、拆包的收益模型,在相邻基本块间进行向量化代码优化。
所述具体平台为Intel,或AMD,或DSP,或申威。
所述步骤3.4还包含如果待展开循环中有归约操作且归约语句与循环内其它语句无依赖时,对归约变量进行重命名,在该循环前加上归约初始化部分,该循环后面加上归约结束处理。
本发明面向异构SIMD扩展部件的自动向量化方法的有益效果:
1.本发明面向异构SIMD扩展部件的自动向量化方法适用于不同向量长度和不同向量指令集的异构SIMD扩展部件,通过设计一套虚拟指令集,能够在自动向量化统一架构下将输入的C和Fortran程序转化为虚拟指令的中间表示,通过向量长度解虚拟化和指令集解虚拟化,自动变换为面向异构SIMD扩展部件的向量化代码,使程序员从繁冗复杂的手工向量化编码中解脱出来。
2.本发明面向异构SIMD扩展部件的自动向量化方法将向量化方法与相关优化方法相结合,从不同粒度进行向量识别,通过常规优化和引用点优化,最大限度的发掘了循环级和基本块级的混合并行性,并通过分析跨越基本块的数据依赖,对生成后的代码进行跨基本块冗余优化,有效提升了程序的执行效率。
附图说明:
图1是本发明面向异构SIMD扩展部件的自动向量化方法架构示意图;
图2是本发明中向量长度解虚拟化流程;
图3是本发明中指令集解虚拟化流程。
具体实施方式:
参见图1~3,针对本发明予以详细描述,一种面向异构SIMD扩展部件的自动向量化方法具体实施步骤如下:
1虚拟向量指令集
虚拟指令集包括存取指令、算术运算指令、逻辑运算指令、移位指令、选择指令、比较指令和整理指令共七类基本指令,这些指令是从不同长度、不同SIMD指令集中抽象出来的基本向量操作,可看作原子指令,特定SIMD指令集架构中的特殊指令可以通过虚拟指令的序列组合实现。实际指令集中具有128位、160位、256位、320位和512位等多种不同的向量长度,非2n位数的向量长度一般含有符号位扩展,虚拟向量长度与具体指令集架构的长度位数无关,其值
其中Leni为不同平台的向量长度。
该值实际ISA向量长度按2n取整的最大值。由于当前大多SIMD硬件或向量化方法支持stride(跨步)访问的向量操作,当stride为2n时具有一定的向量化收益,simd_gather和simd_scatter两种指令用来实现stride内存访问的虚拟操作。整理指令中simd_shuffle将重组操作抽象到一般,通过掩码能够将两向量任意位置的元素进行重组。
2预分析与优化
对循环向量化时会耗费一定的编译时间用于程序分析和代码生成,如基本块向量化指令的打包策略需要在全空间搜索同构指令的组成策略,循环展开与优化时需要对循环体部分确定对齐信息和优化等。因此并不是所有的循环都适合进行向量化变换,通过在对循环作基本块向量化分析和变换之前进行循环可向量化的预分析,可以减少编译时间、避免盲目优化。
主要从下面五个方面,对循环进行基本块向量化预分析。
(1)循环迭代次数。如果循环迭代次数过少,其执行时间所占程序运行时间比例很低,即使采用最佳的向量化策略,对于整个程序性能的提高也是有限的,因此通过设置循环迭代次数阈值,可以避免对执行迭代次数少的循环进行向量化,从而降低程序编译时间。
(2)语句中可向量化指令个数与语句中指令总数的比例。一条指令首先判断不同平台上是否提供相应的向量化指令。然后,对不同的指令赋于不同的权值,用来区别向量化后得到的收益。通过计算语句中可向量化操作的权重,得到向量化后收益值。当该值大于设定的阈值时,就认为该语句值得向量化。
(3)循环中可向量化语句占循环中语句总数的比例。通过第二条标准可以得到循环中可向量化语句占循环中语句总数的比例,当该值大于某个阈值时,可以预测出该循环向量化后收益的大致趋势。
(4)循环中可向量化的操作个数占所有操作个数的比例。该阈值是从总体上判断循环中可向量化操作的数目,同样采用对不同可向量化操作赋予不同权重的方法。
(5)循环中访存操作个数占循环中所有操作个数的比例。该阈值可以从总体上判断循环访存的操作数目。这是因为,在一般情况下与标量运算相比,向量访存操作带宽利用率更高,局部性更好;而标量的软流水对非内存操作的优化更高。
3引用点分析与优化
分析引用点的对齐信息,并进行相关的程序优化来静态确定更多引用点的数据对齐信息。对循环中的每个引用点计算出其相对于向量因子的数据偏移,根据循环中数组引用的起始地址是否对齐来判断该循环是否需要进行多版本变换,从而可以产生更为高效的向量化代码。其主要目的是通过循环展开,发掘更大力度的并行性。
引用点分析与优化主要从以下五个方面展开:
(1)数组引用点对齐分析。为基本块向量化模块建立数组引用点的对齐信息,计算循环外或者循环内数组引用点对齐信息,并且建立引用点到对齐信息的映射。
(2)确定循环展开因子。在循环内通过相邻地址分析尽大限度的发掘相邻的地址引用,在收集所有在迭代间连续的引用点连续地址偏移的基础上,通过虚拟向量长度确定展开因子:
u n r o l l _ f a c t o r = Len v G C D ( Len v , offset 1 , ... , offset i , ... ) , 其中offseti为不同引用点的连续地址偏移。
确定展开因子后,便于后期处理做循环展开变换。
(3)循环剥离。确定循环剥离因子,实施循环剥离变换,便于后续生成对齐访存代码。
(4)循环展开。按照该循环展开因子进行循环展开变换,如果待展开循环中有归约操作且归约语句与循环内其它语句无依赖时,对归约变量进行重命名,在该循环前加上归约初始化部分,后面加上归约结束处理。
(5)多版本优化。对于引用点的数组首地址不可知,数组某一维不可知,或某一维线性下标中有符号量的情况,通过多版本优化来确定其对齐信息。在多版本优化之后,把版本条件信息传到对齐分析模块并重新做一次对齐分析。
4超字并行向量化发掘
对于基本块内部的向量化发掘,在预优化的基础上应用基本块向量化技术进行基本块内的向量化指令选择,确定基本块中各个操作是向量还是标量执行;对于向量执行方式,还应确定各个操作数在向量寄存器中的顺序。
基本块向量化发掘时,包大小为虚拟向量长度Lenv,先根据地址的相邻和对齐关系建立初始pack集,然后沿依赖图的遍历顺序通过使用定义链实现包扩展,采用搜索树的方法,以目标机上的SIMD向量化收益模型为基础进行启发式的搜索和扩展,最后选择收益最大的包生成方法从而确定一条完整的最优路径,并在包生成之后删除冗余的装载包和对三地址化的语句进行恢复。在向量化发掘的后续优化中,根据数据使用的上下文对向量化发掘结果进行调整,如将某些标量执行语句转换为向量执行语句以减少重组操作。
5.向量长度解虚拟化
进行超字并行向量化发掘后得到了具有虚拟向量长度的虚拟向量指令,为将虚拟向量长度能够转化特定SIMD架构的向量长度,需要进行向量长度的解虚拟化,其步骤如下。
5.1201依据向量间、标量间和向量与标量间的依赖关系构建语句依赖图;
5.2202根据实际向量长度和虚拟向量长度对向量进行切分;
5.3203在语句依赖图的基础上按照拓扑顺序对向量操作进行切分,206虚拟向量长度为Lenv,207实际向量长度为Lens,存在关系Lenv=2n*Lens,一条连续的SIMD装载操作将被切分为Lenv/Lens条长度为Lens的连续的SIMD装载操作;
5.4204在对基本块内的所有SIMD向量操作进行切分后,对其适合于进行循环展开与压紧反变换;
5.5205为在204变换后得到具有特定向量长度Lens的SIMD虚拟指令。
6.指令集解虚拟化
指令集解虚拟化是由虚拟指令向特定平台指令集进行映射,具体步骤如下:
6.6301在语句依赖图的基础上依次分析每条虚拟向量指令;
6.7302若能进行一对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,转6.1;若不能进行一对一向量指令映射,则转6.3;
6.8303若能进行多对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,转6.1;若不能进行多对一向量指令映射,则转6.4;
6.9304若能进行一对多向量指令映射,则直接将虚拟向量指令转化为实际向量指令,转6.1;若不能进行一对多向量指令映射,则转6.5;
6.10305进行一对多标量指令映射和转换,转6.1。
对依赖关系图中的所有语句进行遍历后,生成得到在特定向量ISA的实际向量指令。
7向量化代码优化
生成特定平台向量指令后,在基本块边界可能产生大量冗余操作,其主要原因是超字并行的向量化发掘针对基本块展开,未对跨基本块间的打包、拆包的冗余操作进行分析。针对基本块间的冗余操作,以基本块为单位构建控制流图和数据流图,发掘基本块间的数据依赖,在基本块间建立各个变量打包、拆包的收益模型,在相邻基本块间进行向量化代码优化,避免生成低效、冗余的向量化代码。

Claims (8)

1.一种面向异构SIMD扩展部件的自动向量化方法,其特征在于包含如下步骤:
步骤1、设计虚拟向量指令集,针对不同向量长度和不同向量指令集的异构SIMD扩展部件,设计一套虚拟向量指令集,该虚拟向量指令集包括存取指令、算术运算指令、逻辑运算指令、移位指令、选择指令、比较指令和整理指令共七类基本指令,且该虚拟向量指令集与具体平台指令集无关、与向量长度无关、与数据类型无关,所述虚拟向量指令集中的虚拟向量长度Lenv与具体平台指令集架构的长度位数无关,其值其中Leni为不同平台的向量长度;
步骤2、预分析与优化,对能否进行基本块向量化进行可行性分析;
步骤3、引用点分析与优化;
步骤4:超字并行向量化发掘;
步骤5:向量长度解虚拟化,为保证虚拟向量长度能够转化为不同长度的物理向量,打包进虚拟向量的基本操作数为打包进物理向量操作数的倍数;
步骤6:指令集解虚拟化,由虚拟指令向具体平台指令集进行映射;
步骤7:向量化代码优化,针对基本块间的冗余操作,以基本块为单位构建控制流图和数据流图,发掘基本块间的数据依赖,在基本块间建立各个变量打包、拆包的收益模型,在相邻基本块间进行向量化代码优化。
2.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤2包含:首先进行循环迭代次数分析,设置循环迭代次数阈值,分析语句向量化情况,其次,包含内容如下:
步骤2.1、根据循环中语句可向量化指令个数与语句的指令总数的比例,首先判断不同平台上是否提供语句中的指令所对应的向量化指令,然后,对不同的指令赋于不同的权值,通过计算语句中可向量化操作的权重,得到向量化后收益值,当该收益值大于设定的阈值时,该语句向量化;
步骤2.2、根据循环中可向量化语句占循环中语句总数的比例,当该比例值大于设定的阈值时,该语句向量化;
步骤2.3、根据循环中可向量化的操作个数占所有操作个数的比例,对不同的可向量化操作赋予不同的权重,得到循环中可向量化的操作个数占所有操作个数的比例,设定的阈值为从总体上判断循环中可向量化操作的数目,当得到的比例值大于设定的阈值时,该语句向量化;
步骤2.4、根据循环中访问存储器的操作个数占循环中所有操作个数的比例,设定的阈值为从总体上判断循环访问存储器的操作数目,当得到的比例值大于设定的阈值时,该语句向量化。
3.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤3包含如下内容:
步骤3.1、数组引用点对齐分析,基本块向量化模块建立数组引用点的对齐信息,计算循环外或者循环内数组引用点对齐信息,并建立引用点到对齐信息的映射;
步骤3.2、确定循环展开因子,在循环内分析相邻地址引用,收集所有迭代间连续的引用点连续地址偏移,通过虚拟向量长度确定展开因子unroll_factor:
u n r o l l _ f a c t o r = Len v G C D ( Len v , offset 1 , ... , offset i , ... ) , 其中offseti为不同引用点的连续地址偏移;
步骤3.3、循环剥离,确定循环剥离因子,实施循环剥离变换;
步骤3.4、循环展开,按照循环展开因子进行循环展开变换;
步骤3.5、多版本优化,当引用点的数组首地址不可知,或数组某一维不可知,或某一维线性下标中有符号量,通过多版本优化来确定其对齐信息。
4.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤4包含:
步骤4.1、将基本块中的语句进行三地址化,引入寄存器,每条语句转化为原子操作,并更新定义-使用关系图和数组依赖图;
步骤4.2、向量化发掘,向量化发掘的对象为基本块,采用使用定义链优先搜索的超字并行发掘方式,按照虚拟向量长度对应的虚拟向量寄存器槽位数对同构语句进行组合;
步骤4.3、向量化发掘根据收益分析进行判断,构建代价模型,统计所有向量化操作相比较对应的标量操作所节省的时延开销,同时减去数据重组所带来的时延开销,并对产生收益的语句进行向量化打包,每个包及其间的操作分别与虚拟向量和虚拟向量指令对应。
5.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤5中的向量长度解虚拟化包含如下步骤:
步骤5.1、依据向量间、标量间和向量与标量间的依赖关系构建语句依赖图;
步骤5.2、根据实际向量长度和虚拟向量长度对向量进行切分;
步骤5.3、在语句依赖图的基础上按照拓扑顺序对向量操作进行切分;
步骤5.4、基本块内的所有SIMD向量操作进行切分后,进行循环展开或压紧的反变换;
步骤5.5、通过步骤5.4反变换后得到具有特定向量长度的SIMD虚拟指令。
6.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤6包含内容如下:
步骤6.1、在语句依赖图的基础上依次分析每条虚拟向量指令;
步骤6.2、若能进行一对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行一对一向量指令映射,则进入步骤6.3;
步骤6.3、若能进行多对一向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行多对一向量指令映射,则进入步骤6.4;
步骤6.4、若能进行一对多向量指令映射,则直接将虚拟向量指令转化为实际向量指令,返回步骤6.1;若不能进行一对多向量指令映射,则进入步骤6.5;
步骤6.5、若能进行一对多标量指令映射和转换,返回步骤6.1;
步骤6.6、对依赖关系图中的所有语句进行遍历后,得到具体平台向量ISA的实际向量指令。
7.根据权利要求3所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述步骤3.4还包含如果待展开循环中有归约操作且归约语句与循环内其它语句无依赖时,对归约变量进行重命名,在该循环前加上归约初始化部分,该循环后面加上归约结束处理。
8.根据权利要求1所述的面向异构SIMD扩展部件的自动向量化方法,其特征在于:所述具体平台为Intel,或AMD,或申威。
CN201310155403.9A 2013-04-28 2013-04-28 面向异构simd扩展部件的自动向量化方法 Expired - Fee Related CN103279327B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310155403.9A CN103279327B (zh) 2013-04-28 2013-04-28 面向异构simd扩展部件的自动向量化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310155403.9A CN103279327B (zh) 2013-04-28 2013-04-28 面向异构simd扩展部件的自动向量化方法

Publications (2)

Publication Number Publication Date
CN103279327A CN103279327A (zh) 2013-09-04
CN103279327B true CN103279327B (zh) 2015-11-25

Family

ID=49061870

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310155403.9A Expired - Fee Related CN103279327B (zh) 2013-04-28 2013-04-28 面向异构simd扩展部件的自动向量化方法

Country Status (1)

Country Link
CN (1) CN103279327B (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
CN105487839A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 一种面向连续不对界向量数据访问的编译优化方法
CN105808310A (zh) * 2016-04-01 2016-07-27 浪潮电子信息产业股份有限公司 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法
CN107315566B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行向量循环移位运算的装置和方法
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
GB2552154B (en) * 2016-07-08 2019-03-06 Advanced Risc Mach Ltd Vector register access
CN106502631B (zh) * 2016-10-18 2019-07-09 中国南方电网有限责任公司电网技术研究中心 一种基于全局数据重组的循环倾斜优化方法
CN107193535B (zh) * 2017-05-16 2019-11-08 中国人民解放军信息工程大学 基于simd扩展部件的嵌套循环向量并行的实现方法及其装置
CN108920412B (zh) * 2018-06-20 2020-12-29 中国科学院计算技术研究所 针对异构计算机体系结构的算法自动调优方法
CN109918134B (zh) * 2019-03-06 2023-05-30 湖南科技大学 用于vliw基本块调度的组合启发式指令选择优化方法
CN112445481B (zh) * 2019-08-27 2022-07-12 无锡江南计算技术研究所 低功耗的寄存器分配编译优化方法
CN112445485B (zh) * 2019-08-28 2022-11-15 无锡江南计算技术研究所 基于编译实现的可扩展向量掩码功能的方法和装置
CN110806897B (zh) * 2019-10-29 2022-02-01 中国人民解放军战略支援部队信息工程大学 面向多代码粒度的向量并行性发掘方法
CN111158755A (zh) * 2019-11-29 2020-05-15 华东师范大学 用于消除simd向量化程序中缓存缺失的多向量交错执行方法
CN111124415B (zh) * 2019-12-06 2022-02-01 西安交通大学 一种开发循环代码中潜在可向量化循环的方法
CN113391842A (zh) 2020-03-13 2021-09-14 华为技术有限公司 一种单指令多数据simd指令的生成、处理方法以及相关设备
CN111857727B (zh) * 2020-07-21 2021-07-13 西安交通大学 一种多维循环自动向量化分块因子分块方法及装置
CN112230995B (zh) * 2020-10-13 2024-04-09 广东省新一代通信与网络创新研究院 一种指令的生成方法、装置以及电子设备
CN112651489A (zh) * 2020-12-22 2021-04-13 龙芯中科(合肥)技术有限公司 操作处理方法、装置、用于操作处理的装置及存储介质
CN114840256A (zh) * 2021-01-30 2022-08-02 华为技术有限公司 一种程序数据级并行分析方法、装置及相关设备
CN117093268B (zh) * 2023-10-19 2024-01-30 超睿科技(长沙)有限公司 一种向量处理方法、系统、设备及存储介质
CN117234514B (zh) * 2023-11-08 2024-02-23 睿思芯科(深圳)技术有限公司 将标量化程序转换为向量化程序的方法、系统及相关设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231202A (zh) * 2011-07-28 2011-11-02 中国人民解放军国防科学技术大学 面向向量处理器的sad向量化实现方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231202A (zh) * 2011-07-28 2011-11-02 中国人民解放军国防科学技术大学 面向向量处理器的sad向量化实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
The Research on SLP Optimization Technique towards DSP;Weiyi Suo等;《2012 11th International Symposium on Distributed Computing and Applications to Business,Engineering and Science》;20121022;第179-183页 *
面向DSP的超字并行指令分析和冗余优化算法;索维毅等;《计算机应用》;20121201;第32卷(第12期);第3303-3307页 *

Also Published As

Publication number Publication date
CN103279327A (zh) 2013-09-04

Similar Documents

Publication Publication Date Title
CN103279327B (zh) 面向异构simd扩展部件的自动向量化方法
Zohouri et al. Evaluating and optimizing OpenCL kernels for high performance computing with FPGAs
Kamil et al. An auto-tuning framework for parallel multicore stencil computations
Li et al. A note on auto-tuning GEMM for GPUs
Hiranandani et al. An overview of the fortran d programming system
CN104035781B (zh) 一种快速开发异构并行程序的方法
Cohen et al. Processor virtualization and split compilation for heterogeneous multicore embedded systems
CN114416045A (zh) 自动生成算子的方法和装置
CN105302624A (zh) 一种可重构编译器中循环流水迭代间启动间距自动分析方法
CN105700933A (zh) 可重构处理器的高级语言的并行化和循环优化方法及系统
Bispo et al. On identifying and optimizing instruction sequences for dynamic compilation
Diken et al. Construction and exploitation of VLIW ASIPs with heterogeneous vector-widths
You et al. DRStencil: Exploiting data reuse within low-order stencil on GPU
CN106383961B (zh) Cpu+mic异构平台下的大涡模拟算法优化处理方法
Torres et al. Icon dsl: A domainspecific language for climate modeling
Van Der Spek et al. Sublimation: expanding data structures to enable data instance specific optimizations
Hoffman et al. Vectorizing the community land model
Palkowski et al. Parallel tiled cache and energy efficient codes for o (n4) RNA folding algorithms
Vidal et al. A parallel discrete firefly algorithm on GPU for permutation combinatorial optimization problems
Xu et al. Exploiting hyper-loop parallelism in vectorization to improve memory performance on CUDA GPGPU
Saà-Garriga et al. Omp2hmpp: Hmpp source code generation from programs with pragma extensions
Ren Compiling vector programs for simd devices
Feng et al. An SLP Vectorization Method Based on Equivalent Extended Transformation.
Saà-Garriga et al. OMP2HMPP: Compiler Framework for Energy Performance Trade-off Analysis of Automatically Generated Codes
Yu et al. Case Study: Optimization Methods with TVM Hybrid-OP on RISC-V Packed SIMD

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20151125

Termination date: 20160428