CN113553061A - 一种提升源程序执行性能的方法、装置及计算机存储介质 - Google Patents
一种提升源程序执行性能的方法、装置及计算机存储介质 Download PDFInfo
- Publication number
- CN113553061A CN113553061A CN202111108743.7A CN202111108743A CN113553061A CN 113553061 A CN113553061 A CN 113553061A CN 202111108743 A CN202111108743 A CN 202111108743A CN 113553061 A CN113553061 A CN 113553061A
- Authority
- CN
- China
- Prior art keywords
- code
- compiling
- code segment
- gpu
- rtl
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 230000006870 function Effects 0.000 claims abstract description 56
- 238000005457 optimization Methods 0.000 claims abstract description 30
- 230000001133 acceleration Effects 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims abstract description 14
- 238000011161 development Methods 0.000 claims description 10
- 230000015572 biosynthetic process Effects 0.000 claims description 8
- 238000003786 synthesis reaction Methods 0.000 claims description 8
- 239000000126 substance Substances 0.000 claims description 7
- 230000003068 static effect Effects 0.000 claims description 4
- 238000012546 transfer Methods 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 claims description 2
- 238000004364 calculation method Methods 0.000 claims description 2
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 230000002708 enhancing effect Effects 0.000 claims 3
- 238000005516 engineering process Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013209 evaluation strategy Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
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
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
本发明实施例公开了一种提升源程序执行性能的方法、装置及计算机存储介质;该方法可以包括:从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;将待执行的源程序中除第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在第一次编译过程中基于预设的判定条件从剩余代码片段中获得第二代码片段和第三代码片段;对第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码,并针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;对第三代码片段进行第二次编译获得适用于CPU的可执行程序。
Description
技术领域
本发明实施例涉及计算机编译系统领域,尤其涉及一种提升源程序执行性能的方法、装置及计算机存储介质。
背景技术
源代码有时也称为源程序,是指未编译的按照一定的程序设计语言规范书写的程序指令序列,也就是说,源程序是一系列人类可读的计算机语言指令。由于源程序无法被计算机直接执行,因此在计算机执行源程序的过程中,需要将人类可读的程序指令序列“翻译”成为计算机或相关硬件可以执行的指令,比如二进制指令,上述这种“翻译”的过程叫做编译。
为了提升源程序的执行效率,目前通常会采用两种方案,第一种就是通过编译优化技术来提升源程序的执行效率,第二种就是直接采用硬件解决方案,比如专门设计专用集成芯片(ASIC,Application Specific Integrated Circuit)以针对特定类型的源程序进行执行,进而提升执行效率。
对于以上两个方案来说,一方面,编译优化技术需要针对特殊结构的源程序才能产生效果,比如,循环展开技术对执行无数据相关性的循环体结构的源程序具有明显的性能提升,但如果源程序中不同迭代之间的代码存在依赖关系,则无法使用循环展开技术对其进行编译优化,也就是说,编译优化技术很难针对代码中不具备相关特征的程序片段或函数的源程序提升执行性能。另一方面,采用硬件解决方案,尽管执行速度将大大优于软件实现,但采用采用硬件解决方案提升执行性能的方式缺乏灵活性,比如ASIC一经生产出来就无法修改并且仅针对所面向的特定类型有效,无法适应其他类型的问题,而且硬件解决方案的开发周期和成本相比软件实现会高很多。
发明内容
有鉴于此,本发明实施例期望提供一种提升源程序执行性能的方法、装置及计算机存储介质;能够提高源程序的执行性能和效率,并且降低开发周期和成本。
本发明实施例的技术方案是这样实现的:
第一方面,本发明实施例提供了一种提升源程序执行性能的方法,所述方法包括:
从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
根据所述第二代码片段生成功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码,并针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
第二方面,本发明实施例提供了一种提升源程序执行性能的装置,所述装置包括:GPU编译部分、主机编译器、性能统计部分、RTL编译部分以及开发部分;其中,
所述GPU编译部分,经配置为从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
所述主机编译器,经配置为将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译;
所述性能统计部分,经配置为在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
所述RTL编译部分,经配置为对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码;
所述开发部分,经配置为针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
所述主机编译器,还经配置为对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
第三方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有提升源程序执行性能的程序,所述提升源程序执行性能的程序被至少一个处理器执行时实现第一方面所述提升源程序执行性能的方法步骤。
本发明实施例提供了一种提升源程序执行性能的方法、装置及计算机存储介质;按照GPU、CPU以及FPGA这些执行对象的适用情况将源程序划分为三个代码片段,并分别针对三个代码片段生成执行对象各自能够执行的指令或程序,从而相比于目前采用单一方式提升源程序执行性能的方案,充分利用了各源程序执行对象提升执行性能的优势,提高源程序的执行性能和效率,并且降低开发周期和成本。
附图说明
图1为能够实现本发明实施例的计算装置组成示意图。
图2为本发明实施例提供的一种提升源程序执行性能的方法流程示意图。
图3为本发明实施例提供的匹配获得第一代码片段的示意图。
图4为本发明实施例提供的各种类程序及指令的运行示意图。
图5为本发明实施例提供的一种提升源程序执行性能的装置组成示意图。
图6为本发明实施例提供的另一种提升源程序执行性能的装置组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
参见图1,其示出了能够实现本发明实施例的计算装置100,该计算装置100可以包含但不限于以下各项:无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器,等。在图1的实例中,计算装置100可以包括中央处理单元(CPU)102 和经由可以包括存储器桥105 的互连路径通信的系统存储器104。存储器桥105,其可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/ 输出)桥107。I/O 桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标、轨迹球、能够作为组成部分并入显示设备110的触摸屏或其他类型的输入装置)接收用户输入并且经由路径106 和存储器桥105 将所述输入转发到CPU 102。图形处理器(GPU)112 经由总线或其他通信路径113(例如PCI Express、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,GPU 112可以是将像素传递到显示设备110(例如传统的基于CRT或LCD 的监视器)的图形子系统。系统盘114 也连接到I/O 桥107。IO扩展桥116 提供I/O 桥107 与诸如网络适配器118 以及各种外插卡120 和121 的其他组件之间的连接。其他组件(未明确示出),包括USB 或其他端口连接、CD 驱动器、DVD 驱动器、胶片录制设备及类似组件,也可以连接到I/O 桥107。使图1 中各种组件互连的通信路径可以使用任何适合的协议实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且不同设备间的连接可使用本领域已知的不同协议。
在一个实施例中,GPU 112 包含经优化用于图形和视频处理的电路,包括例如视频输出电路。在另一个实施例中,GPU 112 包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构。在又一个实施例中,可以将GPU 112 与一个或多个其他系统元件集成起来,诸如存储器桥105、CPU 102 以及I/O 桥107,以形成片上系统(SoC)。
在一些示例中,为了能够提高源程序的执行效率,计算装置100还可以包括:现场可编程门阵列(FPGA,Field Programmable Gate Array)115这类由可编程逻辑器件组成的执行硬件。FPGA 115同样经由存储器桥105与CPU 102相连接。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数量和布置、CPU 102 的数量以及GPU 112 的数量,可根据需要修改。例如,在一些实施例中,系统存储器104 直接连接到CPU 102 而不是通过桥,并且其他设备经由存储器桥105 和CPU 102 与系统存储器104 通信。在其他替代性拓扑中,GPU 112 连接到I/O 桥107 或直接连接到CPU 102,而不是连接到存储器桥105。而在其他实施例中,I/O 桥107 和存储器桥105 可能被集成到单个芯片上。大量实施例可以包括两个或两个以上的CPU 102以及两个或两个以上的GPU 112。本文所示的特定组件是可选的;例如,任意数量的外插卡或外围设备都可能得到支持。在一些实施例中,IO扩展桥116被去掉,网络适配器118 和外插卡120、121 直接连接到I/O 桥107。
以图1所示的计算装置100为例进行说明,为了提高源程序的执行性能和效率,并且降低开发周期和成本,参见图2,其示出了本发明实施例提供了一种提升源程序执行性能的方法流程,该方法可以包括:
S201:从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
S202:将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
S203:对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的寄存器传输级(RTL,Register-Transfer Level)代码,并针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
S204:对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
需要说明的是,S203与S204的执行顺序并没有固定的先后顺序。对于图2所示的技术方案来说,按照GPU、CPU以及FPGA这些执行对象的适用情况将源程序划分为三个代码片段,并分别针对三个代码片段生成执行对象各自能够执行的指令或程序,从而相比于目前采用单一方式提升源程序执行性能的方案,充分利用了各源程序执行对象提升执行性能的优势,提高源程序的执行性能和效率,并且降低开发周期和成本。
对于图1所示的技术方案,在一些可能的实现方式中,所述从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令,包括:
将所述待执行的源程序按照设定的代码特征模板进行匹配,获取第一代码片段以及所述第一代码片段对应的编译优化策略;
将所述第一代码片段按照所述对应的编译优化策略进行编译,获得所述能够运行于GPU的指令。
对于上述实现方式,详细来说,如图3所示,可以将所有代码特征模板形成一个代码特征描述集合,对于每一个代码特征模板来说,都是一类可被指定为GPU进行编译优化的代码结构的抽象描述,这些代码特征模板可以从大量的源代码中匹配出符合对应特征的代码片段。此外,还可以形成与编译优化策略对应的指示信息对相应的代码片段进行标记,从而可以使得该指示信息能够告知GPU编译器对应的第一代码片段将使用的编译优化算法。
在一些示例中,结合图3所示,上述实现方式的具体实施流程可以包括:扫描待执行的源程序,使用代码特征描述集合中代码特征模板进行匹配通过扫描而读入的源程序;对于匹配的第一代码片段,使用指定的指示信息集合中的指示信息来标记对应的第一代码片段;对于标记有所述指示信息的第一代码片段,可以通过目标为GPU的编译器使用所述指示信息所对应的编译优化算法对该第一代码片段进行编译优化,从而生成能够运行于GPU的高性能指令。
对于图1所示的技术方案,在一些可能的实现方式中,所述将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段,包括:
在所述待执行的源程序的剩余代码片段中添加统计函数;
将添加有统计函数的剩余代码片段通过CPU的目标编译器进行第一次编译,生成能够运行于CPU执行的指令;
在所述第一次编译过程中,基于所述统计函数统计所述剩余代码片段中的函数数量以及函数运行耗时;
根据所述函数数量和所述函数运行耗时以及设定的阈值,从所述剩余代码片段中确定所述第二代码片段和所述第三代码片段。
基于上述实现方式,详细来说,对于除第一代码片段以外的剩余代码片段来说,可以通过CPU的目标编译器进行第一次编译以生成能够在CPU上在能够执行的指令;并且在第一次编译之前,在源程序的剩余代码片段中添加用于统计程序执行时长的系统函数。在第一次编译完成后,以函数为单位统计执行时长,通过指定的评价策略获取最长耗时函数列表。在一些示例中,评价策略可以包括两个阈值,即函数数量限制阈值和函数列表总耗时占主机程序总耗时的占比阈值。设定函数数量限制阈值为5,函数列表中函数总耗时占主机程序总耗时的占比阈值为10%,那么根据上述阈值统计出的函数执行耗时降序排列,并且自上而下进行累加,当两个维度的阈值的某一个先到达即停止,最终就能够得到最长耗时函数列表。该列表中的函数的代码即为无法使用编译器优化技术提升执行性能的第二代码片段,该第二代码片段可以采用硬件加速设备执行以提高执行效率;在剩余代码片段中,除第二代码片段以外的为第三代码片段可以通过CPU编译执行。
对于图1所示的技术方案,在一些可能的实现方式中,所述对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码,包括:
将所述第二代码片段中的函数按照运行耗时降序排列;
对于排列后的每一个函数,获取对应的控制流图CFG;
从所述控制流图中获取逻辑结构;
针对所述逻辑结构对应构建初始状态机模型;
通过合并不具备依赖关系的状态以将所述初始状态机模型进行简化后,利用寄存器传输级RLT指令选择器生成RTL代码;
利用RTL代码综合工具对所述RTL代码综合之后进行布局布线,并计算所述RTL代码对应的硬件资源需求。
对于上述实现方式,在一些示例中,在所述计算所述RTL代码对应的硬件资源需求之后,所述方法还包括:
每计算获得一个函数对应的RTL代码所需的硬件资源后,累加到已得出硬件资源需求;
将累加后的硬件资源需求与所述FPGA所能提供的硬件资源总量进行比较:
若所述FPGA所能提供的硬件资源总量满足所述累加后的硬件资源需求,则继续生成并计算下一个函数的硬件资源需求;
若所述累加后的硬件资源需求超出所述FPGA所能提供的硬件资源总量,则丢弃当前函数,并将已完成RTL代码转换的函数以及经过综合和布局布线后产生的FPGA配置文件配置到所述FPGA中,获得对应的硬件加速设备。
基于上述示例,所述针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序,包括:
按照源程序中调用函数的接口为所述硬件加速设备开发所述FPGA的驱动程序。
基于以上技术方案,在获得上述三种代码片段类型对应的指令或程序之后,如图4所示,所述方法还包括:
通过CPU执行所述适用于CPU的可执行程序;
通过GPU的可编程计算核并行执行所述能够运行于GPU的指令;
在调用所述硬件加速设备的接口时,发起中断请求,调用驱动程序以启动所述硬件加速设备执行所述RTL代码的逻辑,并将执行完成后的结果返回到主程序中,继续向下执行。
基于前述技术方案相同的发明构思,参见图5,其示出了本发明实施例提供的一种提升源程序执行性能的装置50,所述装置50包括:GPU编译部分501、主机编译器502、性能统计部分503、RTL编译部分504和开发部分505;其中,
所述GPU编译部分501,经配置为从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
所述主机编译器502,经配置为将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译;
所述性能统计部分503,经配置为在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
所述RTL编译部分504,经配置为对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码;
所述开发部分,经配置为针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
所述主机编译器502,还经配置为对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
在一些示例中,GPU编译部分501以及主机编译器502通常也可被称之为异构架构编译器。
在上述方案中,如图6所示,所述GPU编译部分501,包括静态代码分析器5011和GPU编译器5012;其中,
所述静态代码分析器5011,经配置为将所述待执行的源程序按照设定的代码特征模板进行匹配,获取第一代码片段以及所述第一代码片段对应的编译优化策略;
所述GPU编译器5012,经配置为将所述第一代码片段按照所述对应的编译优化策略进行编译,获得所述能够运行于GPU的指令。
在上述方案中,所述性能统计部分503,经配置为:
在所述待执行的源程序的剩余代码片段中添加统计函数;
将添加有统计函数的剩余代码片段通过CPU的目标编译器进行第一次编译,生成能够运行于CPU执行的指令;
在所述第一次编译过程中,基于所述统计函数统计所述剩余代码片段中的函数数量以及函数运行耗时;
根据所述函数数量和所述函数运行耗时以及设定的阈值,从所述剩余代码片段中确定所述第二代码片段和所述第三代码片段。
在上述方案中,如图6所示,所述RTL编译部分504,包括:CFG生成器5041、逻辑结构匹配器5042、状态机构建器5043、RLT指令选择器5044以及RTL代码综合工具5045;其中,
所述CFG生成器5041,经配置为将所述第二代码片段中的函数按照运行耗时降序排列后,对于排列后的每一个函数,获取对应的控制流图CFG;
所述逻辑结构匹配器5042,经配置为从所述控制流图中获取逻辑结构;
所述状态机构建器5043,经配置为针对所述逻辑结构对应构建初始状态机模型;
所述RLT指令选择器5044,经配置为通过合并不具备依赖关系的状态以将所述初始状态机模型进行简化后,利用寄存器传输级RLT指令选择器5044生成RTL代码;
所述RTL代码综合工具5045,经配置为对所述RTL代码综合之后进行布局布线,并计算所述RTL代码对应的硬件资源需求。
在上述方案中,所述开发部分505,经配置为按照源程序中调用函数的接口为所述硬件加速设备开发所述FPGA的驱动程序。
可以理解地,在本实施例中,“部分”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是单元,还可以是模块也可以是非模块化的。
另外,在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有提升源程序执行性能的程序,所述提升源程序执行性能的程序被至少一个处理器执行时实现上述技术方案中所述提升源程序执行性能的方法步骤。
可以理解地,上述提升源程序执行性能的装置50的示例性技术方案,与前述提升源程序执行性能的方法的技术方案属于同一构思,因此,上述对于提升源程序执行性能的装置50的技术方案未详细描述的细节内容,均可以参见前述提升源程序执行性能的方法的相关部分的技术方案描述。本发明实施例对此不做赘述。
需要说明的是:本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种提升源程序执行性能的方法,其特征在于,所述方法包括:
从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码,并针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
2.根据权利要求1所述的方法,其特征在于,所述从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令,包括:
将所述待执行的源程序按照设定的代码特征模板进行匹配,获取第一代码片段以及所述第一代码片段对应的编译优化策略;
将所述第一代码片段按照所述对应的编译优化策略进行编译,获得所述能够运行于GPU的指令。
3.根据权利要求1所述的方法,其特征在于,所述将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译,在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段,包括:
在所述待执行的源程序的剩余代码片段中添加统计函数;
将添加有统计函数的剩余代码片段通过CPU的目标编译器进行第一次编译,生成能够运行于CPU执行的指令;
在所述第一次编译过程中,基于所述统计函数统计所述剩余代码片段中的函数数量以及函数运行耗时;
根据所述函数数量和所述函数运行耗时以及设定的阈值,从所述剩余代码片段中确定所述第二代码片段和所述第三代码片段。
4.根据权利要求1所述的方法,其特征在于,所述对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码,包括:
将所述第二代码片段中的函数按照运行耗时降序排列;
对于排列后的每一个函数,获取对应的控制流图CFG;
从所述控制流图中获取逻辑结构;
针对所述逻辑结构对应构建初始状态机模型;
通过合并不具备依赖关系的状态以将所述初始状态机模型进行简化后,利用寄存器传输级RLT指令选择器生成RTL代码;
利用RTL代码综合工具对所述RTL代码综合之后进行布局布线,并计算所述RTL代码对应的硬件资源需求。
5.根据权利要求4所述的方法,其特征在于,所述计算所述RTL代码对应的硬件资源需求之后,所述方法还包括:
每计算获得一个函数对应的RTL代码所需的硬件资源后,累加到已得出硬件资源需求;
将累加后的硬件资源需求与所述FPGA所能提供的硬件资源总量进行比较:
若所述FPGA所能提供的硬件资源总量满足所述累加后的硬件资源需求,则继续生成并计算下一个函数的硬件资源需求;
若所述累加后的硬件资源需求超出所述FPGA所能提供的硬件资源总量,则丢弃当前函数,并将已完成RTL代码转换的函数以及经过综合和布局布线后产生的FPGA配置文件配置到所述FPGA中,获得对应的硬件加速设备。
6.根据权利要求5所述的方法,其特征在于,所述针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序,包括:
按照源程序中调用函数的接口为所述硬件加速设备开发所述FPGA的驱动程序。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过CPU执行所述适用于CPU的可执行程序;
通过GPU的可编程计算核并行执行所述能够运行于GPU的指令;
在调用所述硬件加速设备的接口时,发起中断请求,调用驱动程序以启动所述硬件加速设备执行所述RTL代码的逻辑,并将执行完成后的结果返回到主程序中,继续向下执行。
8.一种提升源程序执行性能的装置,其特征在于,所述装置包括:GPU编译部分、主机编译器、性能统计部分、RTL编译部分以及开发部分;其中,
所述GPU编译部分,经配置为从待执行的源程序中将能够进行GPU编译优化的第一代码片段进行面向GPU的优化编译,获得能够运行于GPU的指令;
所述主机编译器,经配置为将所述待执行的源程序中除所述第一代码片段以外的剩余代码片段进行面向CPU的第一次编译;
所述性能统计部分,经配置为在所述第一次编译过程中基于预设的判定条件从所述剩余代码片段中获得用于配置FPGA的第二代码片段和适用于CPU执行的第三代码片段;
所述RTL编译部分,经配置为对所述第二代码片段进行第二次编译获得功能等效的且用于配置FPGA以产生对应的硬件加速设备的RTL代码;
所述开发部分,经配置为针对已利用RTL代码配置完成的FPGA硬件加速设备开发对应的驱动程序;
所述主机编译器,还经配置为对所述第三代码片段进行第二次编译获得适用于CPU的可执行程序。
9.根据权利要求8所述的装置,其特征在于,所述GPU编译部分,包括静态代码分析器和GPU编译器;其中,
所述静态代码分析器,经配置为将所述待执行的源程序按照设定的代码特征模板进行匹配,获取第一代码片段以及所述第一代码片段对应的编译优化策略;
所述GPU编译器,经配置为将所述第一代码片段按照所述对应的编译优化策略进行编译,获得所述能够运行于GPU的指令。
10.根据权利要求8所述的装置,其特征在于,所述RTL编译部分,包括:CFG生成器、逻辑结构匹配器、状态机构建器、RLT指令选择器以及RTL代码综合工具;其中,
所述CFG生成器,经配置为将所述第二代码片段中的函数按照运行耗时降序排列后,对于排列后的每一个函数,获取对应的控制流图CFG;
所述逻辑结构匹配器,经配置为从所述控制流图中获取逻辑结构;
所述状态机构建器,经配置为针对所述逻辑结构对应构建初始状态机模型;
所述RLT指令选择器,经配置为通过合并不具备依赖关系的状态以将所述初始状态机模型进行简化后,利用寄存器传输级RLT指令选择器生成RTL代码;
所述RTL代码综合工具,经配置为对所述RTL代码综合之后进行布局布线,并计算所述RTL代码对应的硬件资源需求。
11.一种计算机存储介质,其特征在于,所述计算机存储介质存储有提升源程序执行性能的程序,所述提升源程序执行性能的程序被至少一个处理器执行时实现权利要求1至7任一项所述提升源程序执行性能的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111108743.7A CN113553061B (zh) | 2021-09-22 | 2021-09-22 | 一种提升源程序执行性能的方法、装置及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111108743.7A CN113553061B (zh) | 2021-09-22 | 2021-09-22 | 一种提升源程序执行性能的方法、装置及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113553061A true CN113553061A (zh) | 2021-10-26 |
CN113553061B CN113553061B (zh) | 2021-12-17 |
Family
ID=78134572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111108743.7A Active CN113553061B (zh) | 2021-09-22 | 2021-09-22 | 一种提升源程序执行性能的方法、装置及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113553061B (zh) |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5555419A (en) * | 1993-01-06 | 1996-09-10 | Digital Equipment Corporation | Correlation system |
CN101441569A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于异构可重构体系结构面向任务流的新型编译方法 |
CN101694627A (zh) * | 2009-10-23 | 2010-04-14 | 天津大学 | 基于TCore可配置处理器的编译器系统 |
CN102096390A (zh) * | 2011-01-30 | 2011-06-15 | 深圳市合信自动化技术有限公司 | 可编程逻辑控制器、程序编译器、编译系统及方法 |
US20110225572A1 (en) * | 2008-12-17 | 2011-09-15 | Freescale Semiconductor Inc. | Compiler optimisation like idiom recognition through pattern matching using value numbering |
CN103744682A (zh) * | 2014-01-24 | 2014-04-23 | 中国科学院自动化研究所 | 一种分开编译异构混编程序的方法和系统 |
CN103858099A (zh) * | 2011-08-02 | 2014-06-11 | 国际商业机器公司 | 用于在异构计算机上编译和运行高级程序的技术 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
CN109918081A (zh) * | 2019-03-01 | 2019-06-21 | 中安智联未来有限公司 | 一种编译方法及编译器 |
US20190232164A1 (en) * | 2018-01-26 | 2019-08-01 | Valve Corporation | Distributing shaders between client machines for precaching |
US20200104106A1 (en) * | 2018-09-30 | 2020-04-02 | Shanghai Denglin Technologies Co., Ltd | Joint compilation method and system for heterogeneous hardware architecture |
CN111459499A (zh) * | 2020-04-20 | 2020-07-28 | 网易(杭州)网络有限公司 | 程序编译方法及装置、计算机存储介质、电子设备 |
CN111831287A (zh) * | 2019-04-22 | 2020-10-27 | 伊姆西Ip控股有限责任公司 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
CN112035116A (zh) * | 2020-08-26 | 2020-12-04 | 大连理工大学 | 多目标编译优化序列选择的代理建模方法 |
WO2021035553A1 (zh) * | 2019-08-27 | 2021-03-04 | 西门子股份公司 | 应用程序开发部署方法、装置和计算机可读介质 |
CN112527300A (zh) * | 2019-09-18 | 2021-03-19 | 无锡江南计算技术研究所 | 面向多目标的细粒度编译自调优方法 |
-
2021
- 2021-09-22 CN CN202111108743.7A patent/CN113553061B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5555419A (en) * | 1993-01-06 | 1996-09-10 | Digital Equipment Corporation | Correlation system |
CN101441569A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于异构可重构体系结构面向任务流的新型编译方法 |
US20110225572A1 (en) * | 2008-12-17 | 2011-09-15 | Freescale Semiconductor Inc. | Compiler optimisation like idiom recognition through pattern matching using value numbering |
CN101694627A (zh) * | 2009-10-23 | 2010-04-14 | 天津大学 | 基于TCore可配置处理器的编译器系统 |
CN102096390A (zh) * | 2011-01-30 | 2011-06-15 | 深圳市合信自动化技术有限公司 | 可编程逻辑控制器、程序编译器、编译系统及方法 |
CN103858099A (zh) * | 2011-08-02 | 2014-06-11 | 国际商业机器公司 | 用于在异构计算机上编译和运行高级程序的技术 |
CN103744682A (zh) * | 2014-01-24 | 2014-04-23 | 中国科学院自动化研究所 | 一种分开编译异构混编程序的方法和系统 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
US20190232164A1 (en) * | 2018-01-26 | 2019-08-01 | Valve Corporation | Distributing shaders between client machines for precaching |
US20200104106A1 (en) * | 2018-09-30 | 2020-04-02 | Shanghai Denglin Technologies Co., Ltd | Joint compilation method and system for heterogeneous hardware architecture |
CN109918081A (zh) * | 2019-03-01 | 2019-06-21 | 中安智联未来有限公司 | 一种编译方法及编译器 |
CN111831287A (zh) * | 2019-04-22 | 2020-10-27 | 伊姆西Ip控股有限责任公司 | 用于确定执行代码段所需的资源的方法、设备和程序产品 |
WO2021035553A1 (zh) * | 2019-08-27 | 2021-03-04 | 西门子股份公司 | 应用程序开发部署方法、装置和计算机可读介质 |
CN112527300A (zh) * | 2019-09-18 | 2021-03-19 | 无锡江南计算技术研究所 | 面向多目标的细粒度编译自调优方法 |
CN111459499A (zh) * | 2020-04-20 | 2020-07-28 | 网易(杭州)网络有限公司 | 程序编译方法及装置、计算机存储介质、电子设备 |
CN112035116A (zh) * | 2020-08-26 | 2020-12-04 | 大连理工大学 | 多目标编译优化序列选择的代理建模方法 |
Non-Patent Citations (1)
Title |
---|
朱正东等: "面向CPU-GPU架构的源到源自动映射方法", 《计算机工程与应用》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113553061B (zh) | 2021-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20190087164A1 (en) | Technique for inter-procedural memory address space optimization in gpu computing compiler | |
Venkatesh et al. | QsCores: Trading dark silicon for scalable energy efficiency with quasi-specific cores | |
CN107436762B (zh) | 一种寄存器代码文件生成方法、装置和电子设备 | |
US9665346B2 (en) | Performing arithmetic operations using both large and small floating point values | |
CN108595184B (zh) | 代码转换方法、装置、计算机存储介质和代码转换终端 | |
CN105408859A (zh) | 用于指令调度的方法和系统 | |
CN103870242A (zh) | 优化线程栈存储器的管理的系统、方法和计算机程序产品 | |
WO2013112282A1 (en) | Method and apparatus for register spill minimization | |
US20170371761A1 (en) | Real-time performance tracking using dynamic compilation | |
CN104156234A (zh) | 启动多核处理器、bootloader大小端模式自适应的方法及装置 | |
CN116028013B (zh) | 一种fpga除法运算的优化方法、装置、除法器和介质 | |
CN110673851B (zh) | 一种智能合约运行方法、装置及电子设备 | |
US8949777B2 (en) | Methods and systems for mapping a function pointer to the device code | |
CN113553061B (zh) | 一种提升源程序执行性能的方法、装置及计算机存储介质 | |
CN114707444A (zh) | 编译验证系统的方法、电子设备及存储介质 | |
CN113918233A (zh) | 一种ai芯片控制方法、电子设备及ai芯片 | |
CN111488153A (zh) | 由电子装置的处理器实施的方法和操作电子装置的处理器 | |
CN112445688A (zh) | 生成图形处理器代码的不同踪迹 | |
CN115629795A (zh) | 一种可执行文件的配置方法、装置及电子设备 | |
US10445077B2 (en) | Techniques to remove idle cycles for clock-sensitive threads in hardware simulators | |
CN108958837A (zh) | 一种动态配置me固件的方法、系统及介质 | |
CN112564924B (zh) | 计算机扩展卡及区块链终端设备 | |
US11106438B2 (en) | Integration of automated complier dataflow optimizations | |
CN106648751B (zh) | 一种嵌入式软件快速升级的方法及嵌入式设备 | |
EP3053026A1 (en) | Techniques for heterogeneous core assignment |
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 | ||
CP03 | Change of name, title or address |
Address after: Room 301, Building D, Yeda Science and Technology Park, No. 300 Changjiang Road, Yantai Area, China (Shandong) Pilot Free Trade Zone, Yantai City, Shandong Province Patentee after: Xi'an Xintong Semiconductor Technology Co.,Ltd. Address before: Room 21101, 11 / F, unit 2, building 1, Wangdu, No. 3, zhangbayi Road, Zhangba Street office, hi tech Zone, Xi'an City, Shaanxi Province Patentee before: Xi'an Xintong Semiconductor Technology Co.,Ltd. |
|
CP03 | Change of name, title or address |