CN112445485B - 基于编译实现的可扩展向量掩码功能的方法和装置 - Google Patents
基于编译实现的可扩展向量掩码功能的方法和装置 Download PDFInfo
- Publication number
- CN112445485B CN112445485B CN201910799256.6A CN201910799256A CN112445485B CN 112445485 B CN112445485 B CN 112445485B CN 201910799256 A CN201910799256 A CN 201910799256A CN 112445485 B CN112445485 B CN 112445485B
- Authority
- CN
- China
- Prior art keywords
- vector
- mask
- instruction
- compiler
- platform
- 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
-
- 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
本发明公开一种基于编译实现的可扩展向量掩码功能的方法和装置,包括以下步骤:S1、编译器输入用户程序,根据目标平台翻译出正确的掩码向量接口;S2、编译器前端模块对S1中获得的掩码向量接口进行关键字识别,选择对应平台的中端处理入口;S3、编译器中端模块根据目标平台的指令结构对掩码向量接口进行分析,选择合适的处理流程;S4、编译器后端模块将编译器中端模块生成的中间生成代码转换生成最终指令;S5、编译器根据向量宽度的增加,完成对平台向量宽度的识别,选择合适宽度的向量转换和掩码生成。本发明降低了重新开发代码的工作量和复杂度及用户移植的复杂度,更进一步的挖掘了课题的指令级并行性能。
Description
技术领域
本发明涉及一种基于编译实现的可扩展向量掩码功能的方法和装置,属于计算机技术领域。
背景技术
目前对于程序的指令级并行的开发是提高程序运行性能的一种主流手段,向量指令被广泛用于提升课题的指令集并行优化上,且达到很不错的性能加速。随着处理器技术的发展,向量寄存器的宽度也呈现倍数增长关系,512bit的向量寄存器已经成为了主流,相当于16倍32bit字的宽度。在使用完宽度整向量的情况下,性能能够达到最佳,但是很多课题的计算不可避免会有非连续的访存和计算,传统的全向量访存和计算已经不能适应该类课题,需要开发一种新的指令并行模式,带屏蔽码的向量指令应运而生,该技术为挖掘不连续向量操作提供了一种有效的手段。
目前的主流的x86指令集对应的硬件和软件链中,对该类向量屏蔽指令和接口有着非常完善的配套,也被各种主流开源编译器所支持,例如GCC和LLVM中均有对应的接口支持。但是该技术通常基于硬件实现的具体指令,一方面依赖于具体处理器平台,另一方面在应用设计层面不具备可扩展行上。这对课题的性能以及程序的可移植性都是一种损失。
目前对于带掩码计算的功能调用,需要硬件平台做相应的支持,掩码位作为一个独立的寄存器或者操作位成为指令的输入参数,且只有在向量掩码指令支持的硬件平台上才能做该计算以及相应的扩展操作,这就对掩码功能的向量计算的适应面做了一个限制。
Intel公司对带掩码的向量指令有着一套完备的设计和系统,主要是通过该类硬件指令集来支持用户程序中的不完整向量计算和操作,虽然不能达到完整的可向量化性能提升,但是这对程序的可向量化挖掘提供了极大的潜能;同时随着向量寄存器宽度的增加,对这种非完整向量性能的关注度也越来越高。
但是目前主流的处理器对于向量掩码的指令的调用均采用都需要硬件平台做相应的掩码指令支持,例如intel avx向量指令集里,对向量指令做了mask的扩展,即在用户的使用该指令的调用接口时,必须直接或者间接的带有mask输入参数。使用这种向量接口的调用就对程序的移植提出了挑战,即需要在所移植新的平台里找到合适的替代接口或者功能,也增加了用户开发的复杂度并降低了开发和运行效率。
发明内容
本发明的目的是提供一种基于编译实现的可扩展向量掩码功能的方法和装置,该基于编译实现的可扩展向量掩码功能的方法和装置降低了重新开发代码的工作量和复杂度及用户移植的复杂度,更进一步的挖掘了课题的指令级并行性能。
为达到上述目的,本发明采用的技术方案是:一种基于编译实现的可扩展向量掩码功能的装置,其特征在于:包括以下模块:
编译器预处理模块,用于提供一种通用带掩码向量操作接口说明,并在头文件中进行描述,还用于提供一种基于平台架构的专用向量掩码操作接口说明;
编译器前端模块,用于对经过预处理后的接口,进行识别和词法语法分析,根据不同的平台指令集选择不同的中端处理入口;
编译器中端模块,用于对无硬件掩码指令的平台,进行中间代码级的全向量指令展开、抽取和拼接转换操作,还用于对有掩码指令的平台,进行内部对应编译器内置函数直接调用转换,还用于进行基于编译器中间表示的自动向量化代码转换优化,以提升自动向量化能力;
编译器后端模块,用于完成对中间代码到汇编输出的转换。
基于上述基于编译实现的可扩展向量掩码功能的装置,本发明还提供了一种基于编译实现的可扩展向量掩码功能的方法,其特征在于:包括以下步骤:
S1、编译器输入用户程序,通过预处理模块进行掩码向量优化预处理,根据目标平台翻译出正确的掩码向量接口;
S2、编译器前端模块对S1中获得的掩码向量接口进行关键字识别,并进行词法分析和语法分析,检查语法和语义的正确性,并根据平台是否支持掩码向量指令选择对应平台的中端处理入口;
S3、编译器中端模块根据目标平台的指令结构对掩码向量接口进行分析,选择合适的处理流程;
S31、对提供掩码向量指令的平台,进行一对一的指令转换,直接将掩码向量指令翻译成可被后端识别的指令码;
S32、对不提供向量掩码指令的平台,对输入的向量掩码接口操作进行一对多的指令转换;
S33、对于无法进行指定的掩码向量,通过编译器自动进行向量转换实现掩码向量操作;
S4、编译器后端模块将编译器中端模块生成的中间生成代码转换生成最终指令;
S5、编译器根据向量宽度的增加,完成对平台向量宽度的识别,选择合适宽度的向量转换和掩码生成。
上述技术方案中进一步改进的方案如下:
1. 上述方案中,对输入的向量掩码接口操作进行一对多的指令转换,具体包括以下步骤:
S11、用对应的全向量的接口进行非掩码接口操作,并获取该全向量的非掩码接口操作的结果作为中间临时变量;
S12、对S11中获得的中间临时变量,根据掩码的指定位进行分量抽取、拼接和写回操作。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明基于编译实现的可扩展向量掩码功能的方法和装置,其给掩码向量操作提供了一种在多平台上兼容使用的可行性,也降低了重新开发代码的工作量和复杂度及用户移植的复杂度,更进一步的挖掘了课题的指令级并行性能,程序的向量化挖掘也为程序的运行带了更多的性能收益。
附图说明
附图1为本发明基于编译实现的可扩展向量掩码功能的方法流程图。
具体实施方式
实施例:一种基于编译实现的可扩展向量掩码功能的装置,包括以下模块:
编译器预处理模块,用于提供一种通用带掩码向量操作接口说明,并在头文件中进行描述,还用于提供一种基于平台架构的专用向量掩码操作接口说明;
编译器前端模块,用于对经过预处理后的接口,进行识别和词法语法分析,根据不同的平台指令集选择不同的中端处理入口;
编译器中端模块,用于对无硬件掩码指令的平台,进行中间代码级的全向量指令展开、抽取和拼接转换操作,还用于对有掩码指令的平台,进行内部对应编译器内置函数直接调用转换,还用于进行基于编译器中间表示的自动向量化代码转换优化,以提升自动向量化能力;
编译器后端模块,用于完成对中间代码到汇编输出的转换。
一种基于上述装置的基于编译实现的可扩展向量掩码功能的方法,包括以下步骤:
S1、编译器输入用户程序,通过预处理模块进行掩码向量优化预处理,根据目标平台翻译出正确的掩码向量接口;
S2、编译器前端模块对S1中获得的掩码向量接口进行关键字识别,并进行词法分析和语法分析,检查语法和语义的正确性,并根据平台是否支持掩码向量指令选择对应平台的中端处理入口;
S3、编译器中端模块根据目标平台的指令结构对掩码向量接口进行分析,选择合适的处理流程;
S31、对提供掩码向量指令的平台,进行一对一的指令转换,直接将掩码向量指令翻译成可被后端识别的指令码;
S32、对不提供向量掩码指令的平台,对输入的向量掩码接口操作进行一对多的指令转换;
S33、对于无法进行指定的掩码向量,通过编译器自动进行向量转换实现掩码向量操作;
S4、编译器后端模块将编译器中端模块生成的中间生成代码转换生成最终指令;
S5、编译器根据向量宽度的增加,完成对平台向量宽度的识别,选择合适宽度的向量转换和掩码生成。
对输入的向量掩码接口操作进行一对多的指令转换,具体包括以下步骤:
S11、用对应的全向量的接口进行非掩码接口操作,并获取该全向量的非掩码接口操作的结果作为中间临时变量;
S12、对S11中获得的中间临时变量,根据掩码的指定位进行分量抽取、拼接和写回操作。
实施例进一步解释如下:
本发明的主要出发点就是基于目前的技术背景和技术缺失下的一种弥补手段,提供一种以编译实现的可扩展的向量掩码指令功能的方法和装置。
本发明由四个编译模块组成:
1)编译器预处理模块(Pre_Mask_Vect_Process)
a)提供一种通用带掩码向量操作接口说明,在头文件common_simd.h进行描述;
b)提供一种基于平台架构的专用向量掩码操作接口说明,config_target.h。
2)编译器前端模块-Front_End_Mask_Vect_Process
a)对经过预处理后的接口,进行识别和词法语法分析,根据不同的平台指令集选择不同的中端处理入口。
3)编译器中端模块-Milddle_End_Mask_Vect_Process
a)对无硬件掩码指令的平台,进行中间代码级的全向量指令展开、抽取和拼接转换操作-Mask_Vect_Expand;
b)对有掩码指令的平台,进行内部对应builtin直接调用转换-Mask_Vect_Builtin;
c)进行基于编译器中间表示的自动向量化代码转换优化,挖掘带掩码向量的潜力-Auto_Mask_Vect_Process。
4)编译器后端模块-Back_End_Mask_Vect_Process
a)完成对中间代码到汇编输出的转换。
四个编译模块协同处理,共同完成该发明的所有功能。
本发明对用户的程序能够进行用户指定的掩码向量操作转换,该转换需要提供显式的操作接口;也可以通过分析程序的行为进行带掩码的向量自动化优化转换。
实现流程如下:
1)编译器输入用户程序,进行掩码向量优化预处理,根据target平台翻译出正确的掩码向量接口。
2)前端对该接口进行关键字识别,并进行词法分析和语法分析,检查语法和语义的正确性,并根据平台是否支持掩码向量指令选择对应平台的中端处理入口。
3)中端根据本平台的指令结构进行对掩码向量操作接口进行分析,选择合适的处理流程。
a)提供掩码向量指令的平台,则进行一对一的指令转换,直接翻译成可被后端识别的指令码
b)不提供向量掩码指令的平台,则进行一对多的指令转换,用全向量指令来计算该操作,操作结果根据掩码的指定位进行分量抽取、拼接和写回操作。
c)对于程序员无法进行指定的掩码向量操作,则通过编译器自动进行向量转换实现掩码向量操作。
说明:对于a)和b),硬件需要支持一种混淆指令功能,作为对向量任意元素的抽取,若无,则可以通过移位指令进行实现该功能,这将损失一定的性能。以混淆指令+全向量指令来实现掩码向量指令功能,是本发明实现的关键,例如,全向量加法指令va=vb+vc,输入向量va、向量vb,输出va和vb对应的每个分量分别相加,放到vc中对应的位置中;混淆指令vb=vshuff(va,mask),输入向量va、标量mask,其中mask的位数为va向量里标量的个数,比如va是8个int标量组成,那么mask就包含8bit位,每个bit位代表va中的对应的标量,mask对应的bit位为1,则表示va对应的标量值有效,根据mask的bit位,抽取va中对应的有效标量位,输出到vb中。
4)后端完成中间生成代码到最终指令的生成。
5)根据向量宽度的增加,课题通过编译器完成对平台向量宽度的识别,选择合适宽度的向量转换和掩码生成,实现可扩展的目的。
采用上述基于编译实现的可扩展向量掩码功能的方法和装置时,其通过软件编译分析实现来模拟掩码向量指令功能,降低用户开发和移植的复杂度,也减少了硬件设计和实现的压力;编译器自动为用户程序选择适用于目标平台的掩码向量转换实现方式,无需用户去了解对应目标平台是否适用于该类操作;软件编译分析适用于用户指定接口的掩码向量操作或者自动掩码向量操作转换,不仅仅适用于静态指定接口,也适用于动态可自动掩码向量化代码段,适用范围较灵活和智能;可以根据向量宽度进行扩展,有良好的硬件设计和软件算法的继承性;
给掩码向量操作提供了一种在多平台上兼容使用的可行性,也降低了重新开发代码的工作量和复杂度及用户移植的复杂度,更进一步的挖掘了课题的指令级并行性能,程序的向量化挖掘也为程序的运行带了更多的性能收益。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
编译:编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。
指令集:指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有指令集,CPU可以更高效地运行。
掩码:掩码是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (2)
1.一种基于编译实现的可扩展向量掩码功能的方法,其特征在于:基于以下模块:
编译器预处理模块,用于提供一种通用带掩码向量操作接口说明,并在头文件中进行描述,还用于提供一种基于平台架构的专用向量掩码操作接口说明;
编译器前端模块,用于对经过预处理后的接口,进行识别和词法语法分析,根据不同的平台指令集选择不同的中端处理入口;
编译器中端模块,用于对无硬件掩码指令的平台,进行中间代码级的全向量指令展开、抽取和拼接转换操作,还用于对有掩码指令的平台,进行内部对应编译器内置函数直接调用转换,还用于进行基于编译器中间表示的自动向量化代码转换优化,以提升自动向量化能力;
编译器后端模块,用于完成对中间代码到汇编输出的转换;
所述方法包括以下步骤:
S1、编译器输入用户程序,通过预处理模块进行掩码向量优化预处理,根据目标平台翻译出正确的掩码向量接口;
S2、编译器前端模块对S1中获得的掩码向量接口进行关键字识别,并进行词法分析和语法分析,检查语法和语义的正确性,并根据平台是否支持掩码向量指令选择对应平台的中端处理入口;
S3、编译器中端模块根据目标平台的指令结构对掩码向量接口进行分析,选择合适的处理流程;
S31、对提供掩码向量指令的平台,进行一对一的指令转换,直接将掩码向量指令翻译成可被后端识别的指令码;
S32、对不提供向量掩码指令的平台,对输入的向量掩码接口操作进行一对多的指令转换;
S33、对于无法进行指定的掩码向量,通过编译器自动进行向量转换实现掩码向量操作;
S4、编译器后端模块将编译器中端模块生成的中间生成代码转换生成最终指令;
S5、编译器根据向量宽度的增加,完成对平台向量宽度的识别,选择合适宽度的向量转换和掩码生成。
2.根据权利要求1所述的基于编译实现的可扩展向量掩码功能的方法,其特征在于:对输入的向量掩码接口操作进行一对多的指令转换,具体包括以下步骤:
S11、用对应的全向量的接口进行非掩码接口操作,并获取该全向量的非掩码接口操作的结果作为中间临时变量;
S12、对S11中获得的中间临时变量,根据掩码的指定位进行分量抽取、拼接和写回操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910799256.6A CN112445485B (zh) | 2019-08-28 | 2019-08-28 | 基于编译实现的可扩展向量掩码功能的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910799256.6A CN112445485B (zh) | 2019-08-28 | 2019-08-28 | 基于编译实现的可扩展向量掩码功能的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112445485A CN112445485A (zh) | 2021-03-05 |
CN112445485B true CN112445485B (zh) | 2022-11-15 |
Family
ID=74741809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910799256.6A Active CN112445485B (zh) | 2019-08-28 | 2019-08-28 | 基于编译实现的可扩展向量掩码功能的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112445485B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102231202A (zh) * | 2011-07-28 | 2011-11-02 | 中国人民解放军国防科学技术大学 | 面向向量处理器的sad向量化实现方法 |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
Family Cites Families (1)
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 |
-
2019
- 2019-08-28 CN CN201910799256.6A patent/CN112445485B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102231202A (zh) * | 2011-07-28 | 2011-11-02 | 中国人民解放军国防科学技术大学 | 面向向量处理器的sad向量化实现方法 |
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112445485A (zh) | 2021-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8839212B2 (en) | Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations | |
US8904366B2 (en) | Use of vectorization instruction sets | |
WO2018094087A1 (en) | Systems and methods for generating code for parallel processing units | |
CN111078290A (zh) | 一种用于可扩展指令集的编译器及编译方法 | |
CN104035781B (zh) | 一种快速开发异构并行程序的方法 | |
CN103077064A (zh) | 一种解析并执行程序语言方法及解释装置 | |
CN109933327A (zh) | 基于代码融合编译框架的OpenCL编译器设计方法和系统 | |
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
Khalate et al. | An LLVM-based C++ compiler toolchain for variational hybrid quantum-classical algorithms and quantum accelerators | |
CN112416313B (zh) | 支持大整数数据类型和运算符的编译方法 | |
Mathews et al. | Automatic code parallelization with openmp task constructs | |
Metcalf | The seven ages of fortran | |
US10318259B2 (en) | Technology to use control dependency graphs to convert control flow programs into data flow programs | |
Dot et al. | Analysis and optimization of engines for dynamically typed languages | |
CN107203406B (zh) | 一种面向分布式存储结构的处理方法 | |
CN107729118A (zh) | 面向众核处理器的修改Java虚拟机的方法 | |
Komisarczyk et al. | PET-to-MLIR: A polyhedral front-end for MLIR | |
CN112445485B (zh) | 基于编译实现的可扩展向量掩码功能的方法和装置 | |
CN116225452A (zh) | 一种基于多层级中介码的图神经网络编译优化方法 | |
CN112527304A (zh) | 基于异构平台的自适应节点融合编译优化方法 | |
CN112445488B (zh) | 异构平台下宽度非对称向量兼容性的编译处理方法和装置 | |
CN112579059B (zh) | 支持有限域数据类型和运算符的编译方法 | |
CN115237419A (zh) | 一种异构目标代码生成方法、装置及系统 | |
Krohn | A parallel approach to code generation for Fortran like compilers | |
TWI776338B (zh) | 應用於圖形處理器的編譯器及非暫態電腦可讀式儲存媒體 |
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 |