CN114217771A - 一种基于国产异构平台的c++向量编程方法 - Google Patents
一种基于国产异构平台的c++向量编程方法 Download PDFInfo
- Publication number
- CN114217771A CN114217771A CN202110452548.XA CN202110452548A CN114217771A CN 114217771 A CN114217771 A CN 114217771A CN 202110452548 A CN202110452548 A CN 202110452548A CN 114217771 A CN114217771 A CN 114217771A
- Authority
- CN
- China
- Prior art keywords
- vector
- code
- compiler
- built
- programming
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于国产异构平台的C++向量编程方法,所述编程方法包括以下步骤:S1、通过引入头文件simd.h的形式获得向量数据类型和向量编程接口的支持;S2、编译器对C++向量程序进行前端处理,生成中间表示代码;S3、编译器中端对S25中生成的中间表示代码进行优化,生成新的中间表示;S4、编译器中端对步骤S3中优化后的中间代码进行指令生成,形成向量汇编代码;S5、生成机器码;S6、链接器将上述生成的所有主核和从核机器码混合链接成一个可执行码;S7、将可执行码运行在异构众核平台上。本发明为国产异构众核架构的应用开发提供了一种新型的编程方式,有利于最大限度的发挥架构优势,提升应用性能。
Description
技术领域
本发明涉及一种基于国产异构平台的C++向量编程方法,属于高性能计算技术领域。
背景技术
国产异构平台,适用于高性能计算领域,同时也越来越适用于人工智能领域,两大领域存在大量的C++向量编程需求,用来提高编程并行效率,加快程序运行速度。通用的C++程序并行方式各有不同,只有部分课题使用了向量方式,但是其向量宽度以及向量接口不适用于国产异构平台。
目前国产异构平台只支持C语言和FORTRAN语言的向量编程接口,且现有的基于C语言的国产异构平台向量编程接口,接口名包含向量宽度表示,在主核程序改写为从核程序时,或在国产异构平台更新换代时,需要修改大量的程序代码。
异构众核平台包含主核和从核两种核心,根据核心的功能划分不同,每种核心的向量宽度和向量指令不一致,由于芯片设计水平的提高和芯片造价的降低,每一代国产异构平台具有的向量指令和向量宽度不一致;通用的C++向量语言,向量宽度与国产异构平台不一致,向量接口无法直接应用在国产异构平台上,更无法使用国产异构平台的高效向量指令实现程序的高性能开发。因此在国产异构平台的C++程序编写或移植过程中,需要区分和记忆大量的接口,难度较大。
发明内容
本发明的目的是提供一种基于国产异构平台的C++向量编程方法,以解决同代国产异构平台不同核心代码向量接口不一致、不同代国产异构平台向量接口不一致的问题,并在国产异构平台上加速C++程序的性能。
为达到上述目的,本发明采用的技术方案是:提供一种基于国产异构平台的C++向量编程方法,基于以下配置:
在C++程序基础上增加C++向量头文件构建源程序,所述C++向量头文件用于实现对向量数据类型和向量编程接口的定义;
所述C++向量头文件为simd.h,该C++向量头文件通过宏定义区分不同架构的向量数据类型与向量编程接口,宏定义由编译器根据架构选项自动生成;
在C++向量头文件simd-N.h中,N由支持的架构代号决定,每一个simd-N.h文件中,包含统一的向量编程接口,向量编程接口根据不同向量宽度调用编译器内建函数,编译器通过代码降级,将内建函数翻译为国产异构平台的向量汇编代码;
对于不同向量数据类型,提供同名的向量编程接口,根据向量数据类型处理向量编程接口;
所述向量编程接口底层实现包括op语法模式和内建函数模式,所述op语法模式使用数学符号操作符表示操作类型,所述内建函数模式通过调用编译器内建函数的方式表示操作类型;
所述编程方法包括以下步骤:
S1、通过引入头文件simd.h的形式获得向量数据类型和向量编程接口的支持;
S2、编译器对C++向量程序进行前端处理,具体包括:
S21、编译器驱动根据编译命令中架构选项,打开对应的架构控制宏定义,用来生效simd.h中对应架构的代码;
S22、编译器前端将向量编程接口进行换名操作,将向量编程接口的接口符号、参数和接口类型进行编码,形成新的符号;
S23、编译器前端判断是否为从核代码,如果是,再次进行换名操作,将S22中形成的新的符号添加slave_前缀;
S24、编译器前端对向量编程接口的实现进行识别,区别为内建函数模式和OP语法模式;
S25、编译器前端通过词法、语法、语义识别处理,生成抽象语法树,在抽象语法树的基础上生成中间表示代码,将S24中识别出的内建函数模式生成内建函数接口中间表示,OP语法模式生成操作符中间表示;
S3、编译器中端对S25中生成的中间表示代码进行优化,生成新的中间表示;
S4、编译器中端对步骤S3中优化后的中间代码进行指令生成,将S25或S3中生成的操作符中间表示通过模式匹配生成对应的向量汇编代码,内建函数接口中间表示通过内建函数降级模块,区分不同的内建函数进行对应的指令降级,形成向量汇编代码;
S5、汇编器将向量汇编代码进行汇编,生成机器码;
S6、链接器将上述生成的所有主核和从核机器码混合链接成一个可执行码;
S7、将可执行码运行在异构众核平台上。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明一种基于国产异构平台的C++向量编程方法,通过编译器及C++头文件,实现软硬件结合,在国产异构平台上实现了C++向量编程,填补了生态链的空白,为国产异构众核架构的应用开发提供了一种新型的编程方式,有利于最大限度的发挥架构优势,提升应用性能。
附图说明
附图1为本发明一种基于国产异构平台的C++向量编程方法的示意图;
附图2为本发明一种基于国产异构平台的C++向量编程方法的示意图。
具体实施方式
实施例:本发明提供一种基于国产异构平台的C++向量编程方法,基于以下配置:
在C++程序基础上增加C++向量头文件构建源程序,所述C++向量头文件用于实现对向量数据类型和向量编程接口的定义;
所述C++向量头文件为simd.h,该C++向量头文件通过宏定义区分不同架构的向量数据类型与向量编程接口,宏定义由编译器根据架构选项自动生成,从而实现不同架构向量编程方式的统一性;
在C++向量头文件simd-N.h中,N由支持的架构代号决定,每一个simd-N.h文件中,包含统一的向量编程接口,如图一中向量数据处理和代码降级,向量编程接口根据不同向量宽度调用编译器内建函数,编译器通过代码降级,将内建函数翻译为国产异构平台的向量汇编代码;
对于不同向量数据类型,提供同名的向量编程接口,根据向量数据类型处理向量编程接口;
所述向量编程接口底层实现包括op语法模式和内建函数模式,所述op语法模式使用数学符号操作符表示操作类型,所述内建函数模式通过调用编译器内建函数的方式表示操作类型;
所述编程方法包括以下步骤:
S1、如图1所示,国产异构平台的C++向量编程由C++程序与C++向量头文件组成,用户编程通过引入头文件simd.h的形式获得向量数据类型和向量编程接口的支持;
S2、编译器对C++向量程序进行前端处理,具体包括:
S21、编译器驱动根据编译命令中架构选项,打开对应的架构控制宏定义,用来生效simd.h中对应架构的代码;
如图2所示,该头文件通过架构控制宏定义区分不同架构的向量数据类型与向量编程接口,从而实现不同架构向量编程方式的统一性;
在simd-N.h中,N由支持的架构代号决定,每一个simd-N.h文件中,包含统一的向量编程接口;
S22、编译器前端将向量编程接口进行换名操作,将向量编程接口的接口符号、参数和接口类型进行编码,形成新的符号;
S23、编译器前端判断是否为从核代码,如果是,再次进行换名操作,将S22中形成的新的符号添加slave_前缀;
S24、编译器前端对向量编程接口的实现进行识别,如图2中所示,区别为内建函数模式和OP语法模式;
S25、编译器前端通过词法、语法、语义识别处理,生成抽象语法树,在抽象语法树的基础上生成中间表示代码,将S24中识别出的内建函数模式生成内建函数接口中间表示,OP语法模式生成操作符中间表示;
S3、编译器中端对S25中生成的中间表示代码进行优化,生成新的中间表示;
S4、编译器中端对步骤S3中优化后的中间代码进行指令生成,将S25或S3中生成的操作符中间表示通过模式匹配生成对应的向量汇编代码,内建函数接口中间表示通过内建函数降级模块,区分不同的内建函数进行对应的指令降级,形成向量汇编代码;
S5、汇编器将向量汇编代码进行汇编,生成机器码;
S6、链接器将上述生成的所有主核和从核机器码混合链接成一个可执行码;
S7、将可执行码运行在异构众核平台上。
对上述实施例的进一步解释如下:
本发明采用语言扩展的方式,通过编译器将C++语言及编程模型扩展,最大程度的保留C++语言本身的语言特征,根据国产异构平台的硬件向量设计,增加与硬件向量寄存器宽度一致的向量数据类型,将编程语言与芯片向量宽度和向量接口设计相呼应,以头文件的形式提供一套可重载易移植的向量编程接口,在国产异构众核芯片上可以使用C++语言向量编程,为程序开发和移植降低了难度,并且保证充分使用国产异构平台的向量特性;
填补了国产异构平台生态链中C++向量编程的空白,提高国产平台C++编程的并行效率,加快运行速度,并且降低程序移植和改写的难度,提高了兼容性,充分发挥了国产异构平台的硬件优势,加快了程序的运行速度,在现实的高性能与人工智能应用的移植和性能提升中具有重要意义。
国产异构平台的编程模型,可以将C++程序的向量数据类型和硬件向量寄存器宽度相一致,C++程序的向量编程接口可以生成国产异构平台的汇编代码;
国产异构平台的C++可重载可移植的向量编程接口,在国产异构平台中同一芯片中主核和从核、不同代芯片中的主核和主核、不同代芯片中的从核和从核,使用相同的向量编程接口,屏蔽向量数据类型的差异和向量汇编代码的差异,做到可重载可移植。
具体流程如下:
1、如图1所示,国产异构平台的C++向量编程由C++程序与C++向量头文件组成,用户编程通过引入头文件的形式获得向量数据类型和向量编程接口的支持。
2、如图2所示,C++向量头文件为simd.h,该头文件通过宏定义区分不同架构的向量数据类型与向量编程接口,宏定义由编译器根据架构选项自动生成,从而实现不同架构向量编程方式的统一性。在simd-N.h中,N由支持的架构代号决定,每一个simd-N.h文件中,包含统一的向量编程接口,如图一中向量数据处理和代码降级,向量编程接口将根据不同向量宽度调用编译器内建函数,编译器通过代码降级,将内建函数翻译为国产异构平台的汇编代码。
3、如图1所示,头文件中实现向量的数据类型定义,由编译器进行处理,编译器可以支持所有宽度的向量数据类型扩展,不同架构的向量数据类型由步骤2中的方式控制。
4、如图2所示,头文件中实现向量编程接口定义,由编译器进行处理,编译器可以支持所有架构的向量接口处理,不同架构的向量编程接口由步骤2中的方式控制。
5、对于不同向量数据类型,提供同名的向量编程接口,根据向量数据类型处理向量编程接口。
6、向量的操作接口分为两种方式,第一种方式为op模式,即使用数学符号表示操作类型,如“+”表示向量加法;第二种方式为内建函数模式,即调用函数的方式,如“simd_add”表示向量加法。
7、如图2所示,部分内建函数模式,实际上调用op操作扩展处理。
8、如图1所示,对向量数据类型和向量编程接口处理后,进行代码降级,生成了与架构无关的中间表示。
9、如图1所示,中间表示通过编译器后端的处理,最终生成了国产异构平台可以识别的向量指令所对应的机器码。
从上述步骤可以发现,其中步骤1-2通过头文件的形式与编译器控制的宏定义,屏蔽了架构的向量区别,有利于不同代国产异构平台和国产异构平台中主从核代码的移植。步骤3-5通过函数接口重载,实现了不同数据类型的同一种向量操作的接口名相同,屏蔽了数据类型对向量编程接口的干扰。步骤6-7通过复用op模式处理流程,减少编译器代码修改且易于扩展。步骤8-9通过一层语言无关且架构无关的中间表示代码,屏蔽语言和架构的差异,使得编译器后端可以最大程度的复用。
采用上述一种基于国产异构平台的C++向量编程方法时,其通过编译器及C++头文件,实现软硬件结合,在国产异构平台上实现了C++向量编程,填补了生态链的空白,为国产异构众核架构的应用开发提供了一种新型的编程方式,有利于最大限度的发挥架构优势,提升应用性能。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
异构众核芯片:将少量承担管理、通信和运算功能的通用主核核心和大量承担运算功能的精简从核核心集成在一颗完整芯片上的高性能异构中央处理器;通用主核核心运行通用的操作系统,主要承担整个芯片的管理和控制功能,也承担一定的运算功能和芯片与外部的通信功能;从核核心起到加速计算的功能,主核和从核的架构不同,使用不同的指令集。
国产异构平台:由国产异构众核芯片为基础,搭建的计算平台。
标量:在计算机领域内,标量用来表示单个的数据单元,如一个浮点数、一个整型数等。
向量:在计算机领域内,向量用来表示由若干个标量组合而成的数据表示方法。
向量宽度:指一个向量能够表示的数据比特位多少。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种基于国产异构平台的C++向量编程方法,其特征在于,基于以下配置:
在C++程序基础上增加C++向量头文件构建源程序,所述C++向量头文件用于实现对向量数据类型和向量编程接口的定义;
所述C++向量头文件为simd.h,该C++向量头文件通过宏定义区分不同架构的向量数据类型与向量编程接口,宏定义由编译器根据架构选项自动生成,;
在C++向量头文件simd-N.h中,N由支持的架构代号决定,每一个simd-N.h文件中,包含统一的向量编程接口,向量编程接口根据不同向量宽度调用编译器内建函数,编译器通过代码降级,将内建函数翻译为国产异构平台的向量汇编代码;
对于不同向量数据类型,提供同名的向量编程接口,根据向量数据类型处理向量编程接口;
所述向量编程接口底层实现包括op语法模式和内建函数模式,所述op语法模式使用数学符号操作符表示操作类型,所述内建函数模式通过调用编译器内建函数的方式表示操作类型;
所述编程方法包括以下步骤:
S1、通过引入头文件simd.h的形式获得向量数据类型和向量编程接口的支持;
S2、编译器对C++向量程序进行前端处理,具体包括:
S21、编译器驱动根据编译命令中架构选项,打开对应的架构控制宏定义,用来生效simd.h中对应架构的代码;
S22、编译器前端将向量编程接口进行换名操作,将向量编程接口的接口符号、参数和接口类型进行编码,形成新的符号;
S23、编译器前端判断是否为从核代码,如果是,再次进行换名操作,将S22中形成的新的符号添加slave_前缀;
S24、编译器前端对向量编程接口的实现进行识别,区别为内建函数模式和OP语法模式;
S25、编译器前端通过词法、语法、语义识别处理,生成抽象语法树,在抽象语法树的基础上生成中间表示代码,将S24中识别出的内建函数模式生成内建函数接口中间表示,OP语法模式生成操作符中间表示;
S3、编译器中端对S25中生成的中间表示代码进行优化,生成新的中间表示;
S4、编译器中端对步骤S3中优化后的中间代码进行指令生成,将S25或S3中生成的操作符中间表示通过模式匹配生成对应的向量汇编代码,内建函数接口中间表示通过内建函数降级模块,区分不同的内建函数进行对应的指令降级,形成向量汇编代码;
S5、汇编器将向量汇编代码进行汇编,生成机器码;
S6、链接器将上述生成的所有主核和从核机器码混合链接成一个可执行码;
S7、将可执行码运行在异构众核平台上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110452548.XA CN114217771A (zh) | 2021-04-26 | 2021-04-26 | 一种基于国产异构平台的c++向量编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110452548.XA CN114217771A (zh) | 2021-04-26 | 2021-04-26 | 一种基于国产异构平台的c++向量编程方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114217771A true CN114217771A (zh) | 2022-03-22 |
Family
ID=80695828
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110452548.XA Pending CN114217771A (zh) | 2021-04-26 | 2021-04-26 | 一种基于国产异构平台的c++向量编程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114217771A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251205A (zh) * | 2023-11-16 | 2023-12-19 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
-
2021
- 2021-04-26 CN CN202110452548.XA patent/CN114217771A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117251205A (zh) * | 2023-11-16 | 2023-12-19 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
CN117251205B (zh) * | 2023-11-16 | 2024-02-06 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10732943B2 (en) | Programming model of neural network-oriented heterogeneous computing platform | |
CN110187885B (zh) | 一种量子程序编译的中间代码生成方法及装置 | |
CN101667134B (zh) | 一种构建编译系统的方法及编译系统构建装置 | |
US6110226A (en) | Java development environment using optimizing ahead-of-time compiler | |
CN113031966B (zh) | 一种智能选择编译加速库的深度学习编译优化方法 | |
CN110825384A (zh) | 一种基于llvm的st语言编译方法及编译系统和编译器 | |
WO2017097160A1 (en) | System and method for caching and parameterizing ir | |
US6446259B2 (en) | System and method for generating an object structure at run time in an object-oriented programming language | |
CN111309292B (zh) | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 | |
CN108415719A (zh) | 代码热更新方法和装置、存储介质、处理器及终端 | |
CN114217771A (zh) | 一种基于国产异构平台的c++向量编程方法 | |
CN102866890B (zh) | 基于对象关联的Android嵌入式界面及程序框架的生成系统及生成方法 | |
CN109799971A (zh) | 一种文件生成装置和方法 | |
Franz | Adaptive compression of syntax trees and iterative dynamic code optimization: Two basic technologies for mobile object systems | |
WO2012051844A1 (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
CN112540750B (zh) | 自适应内建函数与指令操作选择翻译方法 | |
CN107203406B (zh) | 一种面向分布式存储结构的处理方法 | |
CN111190585A (zh) | 基于字节码增强技术实现java模式匹配特性的方法 | |
CN102799462B (zh) | 基于Eclipse平台的脚本引擎装置及Eclipse平台的配置方法 | |
CN114489582A (zh) | 一种可控定制化的后端开发系统及方法 | |
CN112445485B (zh) | 基于编译实现的可扩展向量掩码功能的方法和装置 | |
Joisha et al. | The Design and Implementation of a Parser and Scanner for the MATLAB Language in the MATCH Compiler | |
CN117472438A (zh) | 一种基于提前编译的解释器指令优化方法和装置 | |
CN111880796B (zh) | 一种多核模型架构实现方法及系统 | |
CN112558976B (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 |