CN113391813A - 程序编译方法和装置、存储介质及电子设备 - Google Patents

程序编译方法和装置、存储介质及电子设备 Download PDF

Info

Publication number
CN113391813A
CN113391813A CN202011403693.0A CN202011403693A CN113391813A CN 113391813 A CN113391813 A CN 113391813A CN 202011403693 A CN202011403693 A CN 202011403693A CN 113391813 A CN113391813 A CN 113391813A
Authority
CN
China
Prior art keywords
compiling
vector
instructions
length
instruction
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
Application number
CN202011403693.0A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202011403693.0A priority Critical patent/CN113391813A/zh
Publication of CN113391813A publication Critical patent/CN113391813A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

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

程序编译方法和装置、存储介质及电子设备
技术领域
本发明涉及计算机计算领域,具体而言,涉及一种程序编译方法和装置、存储介质及电子设备。
背景技术
现有技术中,在对程序进行编译的过程中,需要确定用于对程序进行编译的向量长度。而现有的确定向量长度的手段通常为人工确定向量长度,或者直接确定系统支持的最大向量长度。
然而,该方法确定出的向量长度并不一定为该程序最适合的向量长度,造成编译后执行的总的指令数目较多,程序执行效率低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种程序编译方法和装置、存储介质及电子设备,以至少解决程序执行效率低的技术问题。
根据本发明实施例的一个方面,提供了一种程序编译方法,包括:获取目标虚拟机中的多个向量长度;确定按照上述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,上述编译指令数量根据第一指令数量与第二指令数量确定,上述第一指令数量为按照与上述向量长度匹配的编译数据类型指示的编译长度,对上述目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,上述第二指令数量为按照单位长度对上述目标程序代码中除上述部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;根据上述编译指令数量确定目标向量长度;按照上述目标向量长度对上述目标程序代码进行编译,得到目标向量指令。
作为一种可选的示例,上述确定按照上述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量包括:将上述多个向量长度中的每一个向量长度确定为当前向量长度,执行以下操作:获取当前向量长度,确定按照上述当前向量长度对上述目标程序代码中的部分程序代码进行编译时得到的上述第一指令的数量,以及对上述目标程序代码中的剩余程序代码进行编译时得到的上述第二指令的数量,将上述第一指令的数量及上述第二指令的数量的和,确定为上述当前向量长度的当前编译指令数量。
作为一种可选的示例,上述确定按照上述当前向量长度对上述目标程序代码中的部分程序代码进行编译时得到的上述第一指令的数量,以及对上述目标程序代码中的剩余程序代码进行编译时得到的上述第二指令的数量包括:确定上述当前向量长度匹配的编译数据类型指示的当前编译长度;获取上述目标程序代码的循环迭代操作次数比上上述当前编译长度得到的商的整数部分,并将上述整数部分确定为上述第一指令的数量;获取上述目标程序代码的循环迭代操作次数对上述当前编译长度的取余结果,并将上述取余结果确定为上述第二指令的数量。
作为一种可选的示例,在确定按照上述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量之前,还包括:通过编译器静态分析确定上述目标程序代码的循环迭代操作次数。
作为一种可选的示例,上述根据上述编译指令数量确定目标向量长度包括:获取上述多个向量长度各自对应的编译指令数量;将最小的编译指令数量对应的向量长度确定为上述目标向量长度。
作为一种可选的示例,上述按照上述目标向量长度对上述目标程序代码进行编译,得到目标向量指令包括:将上述目标程序代码的代码数据中,每上述目标向量长度的数据编译为一条上述第一指令;将上述代码数据中,不足以编译为上述第一指令的代码数据中,每单位长度的代码数据编译为一条上述第二指令;将上述第一指令与上述第二指令确定为上述目标向量指令。
根据本发明实施例的另一方面,还提供了一种程序编译装置,包括:获取单元,用于获取目标虚拟机中的多个向量长度;第一确定单元,用于确定按照上述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,上述编译指令数量根据第一指令数量与第二指令数量确定,上述第一指令数量为按照与上述向量长度匹配的编译数据类型指示的编译长度,对上述目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,上述第二指令数量为按照单位长度对上述目标程序代码中除上述部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;第二确定单元,用于根据上述编译指令数量确定目标向量长度;编译单元,用于按照上述目标向量长度对上述目标程序代码进行编译,得到目标向量指令。
作为一种可选的示例,上述第一确定单元包括:处理模块,用于将上述多个向量长度中的每一个向量长度确定为当前向量长度,执行以下操作:获取当前向量长度,确定按照上述当前向量长度对上述目标程序代码中的部分程序代码进行编译时得到的上述第一指令的数量,以及对上述目标程序代码中的剩余程序代码进行编译时得到的上述第二指令的数量,将上述第一指令的数量及上述第二指令的数量的和,确定为上述当前向量长度的当前编译指令数量。
作为一种可选的示例,上述处理模块还用于:确定上述当前向量长度匹配的编译数据类型指示的当前编译长度;获取上述目标程序代码的循环迭代操作次数比上上述当前编译长度得到的商的整数部分,并将上述整数部分确定为上述第一指令的数量;获取上述目标程序代码的循环迭代操作次数对上述当前编译长度的取余结果,并将上述取余结果确定为上述第二指令的数量。
作为一种可选的示例,上述装置还包括:第三确定单元,用于在确定按照上述多个向量长度中的每一个向量长度分别对上述目标程序代码进行编译时得到的编译指令数量之前,通过编译器静态分析确定上述目标程序代码的循环迭代操作次数。
作为一种可选的示例,上述第二确定单元包括:获取模块,用于获取上述多个向量长度各自对应的编译指令数量;第一确定模块,用于将最小的编译指令数量对应的向量长度确定为上述目标向量长度。
作为一种可选的示例,上述编译单元包括:第一编译模块,用于将上述目标程序代码的代码数据中,每上述目标向量长度的数据编译为一条上述第一指令;第二编译模块,用于将上述代码数据中,不足以编译为上述第一指令的代码数据中,每单位长度的代码数据编译为一条上述第二指令;第二确定模块,用于将上述第一指令与上述第二指令确定为上述目标向量指令。
根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述程序编译方法。
根据本发明实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过上述计算机程序执行上述的程序编译方法。
根据本发明实施例的又一方面,还提供了一种计算机程序,上述计算机程序包括计算机指令,上述计算机指令为存储在存储器上可被处理器执行的指令,其特征在于,上述计算机指令被上述处理器执行时,实现上述的程序编译方法。
在本发明实施例中,采用了获取目标虚拟机中的多个向量长度;确定按照上述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,上述编译指令数量根据第一指令数量与第二指令数量确定,上述第一指令数量为按照与上述向量长度匹配的编译数据类型指示的编译长度,对上述目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,上述第二指令数量为按照单位长度对上述目标程序代码中除上述部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;根据上述编译指令数量确定目标向量长度;按照上述目标向量长度对上述目标程序代码进行编译,得到目标向量指令的方法,由于在上述方法中,在确定用于对目标程序代码进行编译的目标向量长度的过程中,是按照使用的向量长度预估对目标程序代码进行编译所得到的编译指令数量来确定目标向量长度的,从而实现了确定对目标程序代码进行编译得到的向量指令最少的目标向量长度,进而解决了程序执行效率低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的程序编译方法的应用环境的示意图;
图2是根据本发明实施例的另一种可选的程序编译方法的应用环境的示意图;
图3是根据本发明实施例的一种可选的程序编译方法的流程的示意图;
图4是根据本发明实施例的另一种可选的程序编译方法的流程的示意图;
图5是根据本发明实施例的又一种可选的程序编译方法的流程的示意图;
图6是根据本发明实施例的一种可选的程序编译方法的编译目标程序代码的示意图;
图7是根据本发明实施例的一种可选的程序编译方法的编译目标程序代码的文件的示意图;
图8是根据本发明实施例的一种可选的程序编译装置的结构示意图;
图9是根据本发明实施例的另一种可选的程序编译装置的结构示意图;
图10是根据本发明实施例的一种可选的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例中提到的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
根据本发明实施例的一个方面,提供了一种程序编译方法,可选地,作为一种可选的实施方式,上述程序编译方法可以但不限于应用于如图1所示的环境中。
如图1所示,终端设备102包括了存储器104,用于存储终端设备102运行过程中产生的各项数据、处理器106,用于处理运算上述各项数据、显示器108,用于显示编译过程或者编译结果。终端设备102可以通过网络110与服务器112之间进行数据交互。服务器112包括编译器114和虚拟机116,编译器114用于对虚拟机中的待编译的目标程序代码进行编译,虚拟机116用于接收目标程序代码并保存目标程序代码,以及将编译结果下发给终端设备102。如步骤S102到步骤S106,终端设备102可以向服务器112发送待编译的目标程序代码,由服务器112进行编译,最后返回编译结果。
作为一种可选的实施方式,上述程序编译方法可以但不限于应用于如图2所示的环境中。
如图2所示,终端设备202包括了虚拟机204,用于存储运行过程中产生的各项数据如目标程序代码、编译器206,用于对目标程序代码进行编译、显示器208,用于显示编译结果。终端设备202可以执行步骤S202到步骤S208,终端设备202完成目标程序代码的编译,显示编译结果。
可选地,在本实施例中,上述终端设备可以是配置有目标客户端的终端设备,可以包括但不限于以下至少之一:手机(如Android手机、iOS手机等)、笔记本电脑、平板电脑、掌上电脑、MID(Mobile Internet Devices,移动互联网设备)、PAD、台式电脑、智能电视等。目标客户端可以是视频客户端、即时通信客户端、浏览器客户端、教育客户端等。上述网络可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、WIFI及其他实现无线通信的网络。上述服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,或者是云服务器。上述仅是一种示例,本实施例中对此不作任何限定。
可选地,作为一种可选的实施方式,如图3所示,上述程序编译方法包括:
S302,获取目标虚拟机中的多个向量长度;
S304,确定按照多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,编译指令数量根据第一指令数量与第二指令数量确定,第一指令数量为按照与向量长度匹配的编译数据类型指示的编译长度,对目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,第二指令数量为按照单位长度对目标程序代码中除部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
S306,根据编译指令数量确定目标向量长度;
S308,按照目标向量长度对目标程序代码进行编译,得到目标向量指令。
可选地,上述程序编译方法可以但不限于应用于对目标程序代码进行编译的过程中。在工程师完成程序代码的时候,如果要执行程序代码,则需要对程序代码进行编译。而编译的过程,就是将程序代码转换为向量指令的过程。通过执行向量指令来运行程序代码。
可选地,上述部分代码可以为代码所对应的循环迭代操作中的部分循环迭代操作。例如,代码对应的内容为循环执行100次加法,则部分代码可以为循环执行的100次加法中的80次加法,如编译为4条向量指令,每一条向量指令执行20次加法。
本申请实施例中,在将目标程序代码编译为目标向量指令的过程中,首先需要确定目标向量长度,然后使用目标向量长度对目标程序代码进行编译。而目标向量长度是从多个向量长度中选择出来的。多个向量长度中每一个向量长度都对应一个编译指令数量。编译指令数量是预估的对目标程序代码进行编译时,得到的向量指令的数量。通过编译指令数量确定出目标向量长度,使用目标向量长度对目标程序进行编译,编译后的目标程序执行效率高。
可选地,本申请实施例中,目标程序代码可以为开发人员开发的应用程序的程序代码,应用程序的运行环境本申请实施例并不限定。例如,开发的应用程序可以运行在计算机终端、移动终端、平板电脑、智能手环等各种终端设备上。而在开发人员开发过程中,可以要通过布置虚拟机来模拟应用程序的运行环境。
可选地,在应用程序开发完成,得到目标程序代码之后,需要对目标程序代码进行编译得到目标向量指令。编译过程中,需要使用向量长度。本申请实施例中,可以先获取系统支持的向量长度,如128位、256位、512位等等。
可选地,本申请实施例可以先估算使用每一个向量长度编译目标程序代码的情况下,会得到多少向量指令。然后,根据向量指令,从多个向量长度中选择出目标向量长度,并使用目标向量长度来编译目标程序代码。
可选地,本申请实施例可以将多个向量长度中的每一个向量长度确定为当前向量长度,在获取当前向量长度后,确定按照当前向量长度对目标程序代码中的部分程序代码进行编译时得到的第一指令的数量,以及对目标程序代码中的剩余程序代码进行编译时得到的第二指令的数量,将第一指令的数量及第二指令的数量的和,确定为当前向量长度的当前编译指令数量。
可选地,上述部分程序代码可以为目标程序代码中,足够被编译为第一指令的代码。例如,当前向量长度对应的当前编译长度为128,则使用128编译目标程序代码,将目标程序代码中,每128位的元素编译为一条第一指令,而目标程序代码中剩余不足以编译为一条向量指令的程序由单位长度进行编译,得到第二指令。
可选地,可以通过编译器静态分析确定出目标程序代码的循环迭代操作次数。
在确定当前向量长度对应的编译指令数量的情况下,可以模拟使用当前向量长度对目标程序代码进行编译。可以理解为,将目标程序代码的循环迭代操作次数与当前向量长度对应的编译长度作比,得到的商的整数部分为第一指令的数量,即可以将目标程序代码的循环迭代操作次数编译为上述商的整数部分个第一指令,第一指令中包括编译长度个循环迭代操作,而作比后,得到的余数确定为第二指令的数量,即循环迭代操作次数不足以编译为一个第一指令的循环迭代操作,会使用单位长度对应的编译长度进行编译,得到余数个第二指令。将第一指令和第二指令的和确定为当前向量长度的编译指令数量,也可以使用加权求和的方式确定出编译指令数量。单位长度可以为循环迭代操作的数据的长度。
在确定出每一个向量长度的编译指令数量的情况下,将编译指令数量最小的向量长度确定为目标向量长度。使用目标向量长度对目标程序代码进行编译,得到目标向量指令,执行目标向量指令。
以下结合一个具体示例解释上述程序编译方法。
本申请实施例可以在云服务器上配置虚拟机。虚拟机(Virtual Machine,简称为VM)主要通过软件(或者辅以少量硬件支持)的方法来虚拟出一台计算机,并且这台虚拟的计算机通常还支持一套自己的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列(目标程序)在本地机器上模拟执行。虚拟机的执行引擎可以由解释器来实现。由于解释器具有可移植性高、实现代价低和内存占用少等特点,大多数虚拟机的执行引擎都包含解释器。解释器以一条虚拟机指令为单位进行取指令、指令分派、取操作数和执行。但单纯的解释执行性能低下,因此虚拟机中引入动态编译系统来提高其性能。编译器是动态编译系统的核心。编译器以一组连续的虚拟机指令序列(基本块、函数或方法)为单位整体编译成本地CPU指令序列,称为本地方法,然后由硬件直接执行编译后的本地方法。编译器由于消除了重复的取指令和指令分派等过程,同时又在翻译时进行大量卓有成效的优化,因此其性能可高出解释器10倍以上。由于编译器是在程序运行过程中进行动态编译的,故又将其称为动态编译器。现代处理器普遍支持向量指令。程序,尤其是大数据和智能机器学习等计算密集型应用,的向量化是提升系统性能的关键。动态编译发生在程序运行期间,可以获取底层平台和程序运行时信息,因此动态编译器非常适合用于向量化。向量化的对象主要为程序中的循环结构处理流程可以如图4所示。
将程序中的循环结构向量化的过程主要分为三个步骤。
S402,选择向量长度。向量长度是用于对程序进行向量化时,使用的向量长度。
S404,生成向量主循环。对待向量化的循环结构进行循环展开等变换操作,生成包含向量指令的向量主循环。
S406,生成向量尾循环。上述向量主循环可能无法将程序的所有代码内容进行向量化,剩余的程序代码由尾循环进行处理。
例如,请参见下述代码1:
Figure BDA0002817904090000111
上述代码1中记录了一个for循环语句,需要执行加法N次。
在向量化的过程中:
1、选择向量长度。向量长度可以选择系统支持的向量长度。如128位,256位,512位等等。例如以256位的向量长度为例。
2、使用代码2生成向量主循环:
Figure BDA0002817904090000121
上述向量主循环,c[i..i+31]=a[i..i+31]+b[i..i+31]语句表示一次性对a数组和b数组中的32个byte元素进行向量求和,所得结果存入c数组中。该语句可用一条256位的向量加法指令实现,程序执行效率很高。
而剩余的数据无法通过一条256位的向量加法指令实现,则需要再布置一个尾循环,使用尾循环将剩余的数据进行编译。如代码3,在主循环的基础上添加一个尾循环:
Figure BDA0002817904090000122
向量主循环中处理剩下的元素由尾循环继续处理。
向量长度对向量化的性能影响很大,故选择恰当的向量长度对于提高向量化的性能具有十分重要的意义。本申请实施例中,通过分析循环结构的数据信息,估算向量化以后的循环次数,并选择使得向量化后总的循环次数最少的向量长度,从而减少循环次数,提高向量化的性能。流程如图5所示。
S502:获取硬件支持的向量长度集合。
虚拟机很容易在运行时获取底层硬件处理器支持的向量长度集合,记该向量长度集合为V={v1,v2,v3,…,vk},其中v1,v2,v3,…,vk表示处理器所支持的向量长度。例如,在x86机器上,一种可能的向量集合为V={128,256,512},此时v1=128,v2=256,v3=512。
S504:对硬件支持的所有向量长度,估算向量化后总循环次数。
对集合V中的每个向量长度v,计算向量化后总的循环次数,其步骤为:
S504-1:分析获取循环结构的数据信息,包括:
1)原始循环的总次数,记为NN值可以通过编译器静态分析获取,或从虚拟机记录的运行时信息中获取
2)循环操作的数据类型,记为T,及其长度,记为size(T)T可由编译器通过静态分析获取。T值确定后,编译器很容易计算出size(T)的值。
S504-2:计算向量主循环次数为n1,计算方法为:
Figure BDA0002817904090000131
即,将N以向下取整的方式除以lane(v,size(T))。其中,lane(v,size(T))表示长度为v的单个向量中可以容纳的类型为T的数据个数,其计算方法为:
lane(v,size(T))=v/size(T)
S504-3:计算尾循环次数为n2,其计算方法为:
n2=N%lane(v,size(T))
即,将N对lane(v,size(T))进行求余操作。其中,lane(v,size(T))的定义和计算方法同第2.2步。
S504-4:计算向量化后总循环次数为n1+n2
S506:选择使得总循环次数最少的向量长度。
对每种向量长度,在第2步中均计算了向量化后总的循环次数。选择使得总循环次数最小的向量长度。
以下为一个具体的实施例:如代码4:
Figure BDA0002817904090000141
第1步:获取硬件支持的向量长度集合。
假定在一款最大支持512位向量长度的x86机器上,则硬件所支持的向量长度集合为
V={128,256,512}
第2步:对硬件支持的所有向量长度,估算向量化后总循环次数。
对集合V中的每个向量长度v,计算向量化后总的循环次数,其步骤为:
第2.1步:分析获取循环结构的数据信息,包括:
通过编译器静态分析可知N=127
由编译器静态分析可知T为byte。由于1个byte包含8个比特位,则size(T)=8
第2.2步:计算向量主循环次数为n1,计算方法为:
当v=128时,lane(v,size(T))=128/8=16,
Figure BDA0002817904090000151
当v=256时,lane(v,size(T))=256/8=32,
Figure BDA0002817904090000152
当v=512时,lane(v,size(T))=512/8=64,
Figure BDA0002817904090000153
第2.3步:计算尾循环次数为n2,其计算方法为:
当v=128时,lane(v,size(T))=128/8=16,n2=127%16=15
当v=256时,lane(v,size(T))=256/8=32,n2=127%32=31
当v=512时,lane(v,size(T))=512/8=64,n2=127%64=63
第2.4步:计算向量化后总循环次数为n1+n2
当v=128时,n1+n2=7+15=22
当v=256时,n1+n2=3+31=34
当v=512时,n1+n2=1+63=64
第3步:选择使得总循环次数最少的向量长度。
第2步计算的向量化后总循环次数最少为22次,其对应的向量长度为128。故应优选长度为128位的向量进行向量化。
本申请实施例中,可以为在编程目标程序代码的过程中,随时进行编译过程。例如,如图6所示,通过编译按钮对代码内容602进行编译。
或者,可以将目标程序代码导出,得到代码文件,对代码文件进行编译,例如,如图7所示,可以选择代码文件702,对代码文件进行编译。编译过程可以为对批量代码文件进行编译。可以通过文件名查找文件,批量编译。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
根据本发明实施例的另一个方面,还提供了一种用于实施上述程序编译方法的程序编译装置。如图8所示,该装置包括:
获取单元802,用于获取目标虚拟机中的多个向量长度;
第一确定单元804,用于确定按照多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,编译指令数量根据第一指令数量与第二指令数量确定,第一指令数量为按照与向量长度匹配的编译数据类型指示的编译长度,对目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,第二指令数量为按照单位长度对目标程序代码中除部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
第二确定单元806,用于根据编译指令数量确定目标向量长度;
编译单元808,用于按照目标向量长度对目标程序代码进行编译,得到目标向量指令。
可选地,上述程序编译装置可以但不限于应用于对目标程序代码进行编译的过程中。在工程师完成程序代码的时候,如果要执行程序代码,则需要对程序代码进行编译。而编译的过程,就是将程序代码转换为向量指令的过程。通过执行向量指令来运行程序代码。
本申请实施例中,在将目标程序代码编译为目标向量指令的过程中,首先需要确定目标向量长度,然后使用目标向量长度对目标程序代码进行编译。而目标向量长度是从多个向量长度中选择出来的。多个向量长度中每一个向量长度都对应一个编译指令数量。编译指令数量是预估的对目标程序代码进行编译时,得到的向量指令的数量。通过编译指令数量确定出目标向量长度,使用目标向量长度对目标程序进行编译,编译后的目标程序的执行效率高。
可选地,本申请实施例中,目标程序代码可以为开发人员开发的应用程序的程序代码,应用程序的运行环境本申请实施例并不限定。例如,开发的应用程序可以运行在计算机终端、移动终端、平板电脑、智能手环等各种终端设备上。而在开发人员开发过程中,可以要通过布置虚拟机来模拟应用程序的运行环境。
可选地,在应用程序开发完成,得到目标程序代码之后,需要对目标程序代码进行编译得到目标向量指令。编译过程中,需要使用向量长度。本申请实施例中,可以先获取系统支持的向量长度,如128位、256位、512位等等。
可选地,本申请实施例可以先估算使用每一个向量长度编译目标程序代码的情况下,会得到多少向量指令。然后,根据向量指令,从多个向量长度中选择出目标向量长度,并使用目标向量长度来编译目标程序代码。
可选地,本申请实施例可以将多个向量长度中的每一个向量长度确定为当前向量长度,在获取当前向量长度后,确定按照当前向量长度对目标程序代码中的部分程序代码进行编译时得到的第一指令的数量,以及对目标程序代码中的剩余程序代码进行编译时得到的第二指令的数量,将第一指令的数量及第二指令的数量的和,确定为当前向量长度的当前编译指令数量。
可选地,上述部分程序代码可以为目标程序代码中,足够被编译为第一指令的代码。例如,当前向量长度对应的当前编译长度为128,则使用128编译目标程序代码,将目标程序代码中,每128位的元素编译为一条第一指令,而目标程序代码中剩余不足以编译为一条向量指令的程序由单位长度进行编译,得到第二指令。
可选地,可以通过编译器静态分析确定出目标程序代码的循环迭代操作次数。
在确定当前向量长度对应的编译指令数量的情况下,可以模拟使用当前向量长度对目标程序代码进行编译。可以理解为,将目标程序代码的循环迭代操作次数与当前向量长度的编译长度作比,得到的商为第一指令的数量,即可以将目标程序代码的循环迭代操作次数编译为上述商个第一指令,第一指令中包括编译长度个循环迭代操作,而作比后,得到的余数确定为第二指令的数量,即循环迭代操作次数不足以编译为一个第一指令的代码,会使用单位长度进行编译,得到余数个第二指令。将第一指令和第二指令的和确定为当前向量长度的编译指令数量,也可以使用加权求和的方式确定出编译指令数量。
在确定出每一个向量长度的编译指令数量的情况下,经编译指令数量最小的向量长度确定为目标向量长度。使用目标向量长度对目标程序代码进行编译,得到目标向量指令,执行目标向量指令。
作为一种可选的示例,如图9所示,上述程序编译装置还包括:
第三确定单元902,用于在确定按照多个向量长度中的每一个向量长度分别对目标程序代码进行编译时得到的编译指令数量之前,通过编译器静态分析确定目标程序代码的循环迭代操作次数。
本实施例的其他示例请参见上述示例,在此不再赘述。
根据本发明实施例的又一个方面,还提供了一种用于实施上述程序编译方法的电子设备,该电子设备可以是图10所示的终端设备或服务器。本实施例以该电子设备为终端为例来说明。如图10所示,该电子设备包括存储器1002和处理器1004,该存储器1002中存储有计算机程序,该处理器1004被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
获取目标虚拟机中的多个向量长度;
确定按照多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,编译指令数量根据第一指令数量与第二指令数量确定,第一指令数量为按照与向量长度匹配的编译数据类型指示的编译长度,对目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,第二指令数量为按照单位长度对目标程序代码中除部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
根据编译指令数量确定目标向量长度;
按照目标向量长度对目标程序代码进行编译,得到目标向量指令。
可选地,本领域普通技术人员可以理解,图10所示的结构仅为示意,电子装置电子设备也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置电子设备的结构造成限定。例如,电子装置电子设备还可包括比图10中所示更多或者更少的组件(如网络接口等),或者具有与图10所示不同的配置。
其中,存储器1002可用于存储软件程序以及模块,如本发明实施例中的程序编译方法和装置对应的程序指令/模块,处理器1004通过运行存储在存储器1002内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的程序编译方法。存储器1002可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1002可进一步包括相对于处理器1004远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器1002具体可以但不限于用于存储目标程序代码等信息。作为一种示例,如图10所示,上述存储器1002中可以但不限于包括上述程序编译装置中的获取单元802、第一确定单元804、第二确定单元806及编译单元808。此外,还可以包括但不限于上述程序编译装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置1006用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1006包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1006为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子设备还包括:显示器1008,用于显示编译结果;和连接总线1010,用于连接上述电子设备中的各个模块部件。
在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
根据本申请实施例的又一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质或存储器中。计算机设备的处理器从计算机可读存储介质或存储器中读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一项方法实施例中的步骤。
可选地,本申请实施例中的上述处理器通过执行上述计算机指令执行以下步骤:
获取目标虚拟机中的多个向量长度;
确定按照多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,编译指令数量根据第一指令数量与第二指令数量确定,第一指令数量为按照与向量长度匹配的编译数据类型指示的编译长度,对目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,第二指令数量为按照单位长度对目标程序代码中除部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
根据编译指令数量确定目标向量长度;
按照目标向量长度对目标程序代码进行编译,得到目标向量指令。
根据本发明的实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述计算机可读的存储介质可以被设置为存储用于执行以下步骤的计算机程序:
获取目标虚拟机中的多个向量长度;
确定按照多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,编译指令数量根据第一指令数量与第二指令数量确定,第一指令数量为按照与向量长度匹配的编译数据类型指示的编译长度,对目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,第二指令数量为按照单位长度对目标程序代码中除部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
根据编译指令数量确定目标向量长度;
按照目标向量长度对目标程序代码进行编译,得到目标向量指令。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (15)

1.一种程序编译方法,其特征在于,包括:
获取目标虚拟机中的多个向量长度;
确定按照所述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,所述编译指令数量根据第一指令数量与第二指令数量确定,所述第一指令数量为按照与所述向量长度匹配的编译数据类型指示的编译长度,对所述目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,所述第二指令数量为按照单位长度对所述目标程序代码中除所述部分程序代码之外的剩余程序代码进行编译所生成的第二指令的数量;
根据所述编译指令数量确定目标向量长度;
按照所述目标向量长度对所述目标程序代码进行编译,得到目标向量指令。
2.根据权利要求1所述的方法,其特征在于,所述确定按照所述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量包括:
将所述多个向量长度中的每一个向量长度确定为当前向量长度,执行以下操作:
获取当前向量长度,确定按照所述当前向量长度对所述目标程序代码中的部分程序代码进行编译时得到的所述第一指令的数量,以及对所述目标程序代码中的剩余程序代码进行编译时得到的所述第二指令的数量,将所述第一指令的数量及所述第二指令的数量的和,确定为所述当前向量长度的当前编译指令数量。
3.根据权利要求2所述的方法,其特征在于,所述确定按照所述当前向量长度对所述目标程序代码中的部分程序代码进行编译时得到的所述第一指令的数量,以及对所述目标程序代码中的剩余程序代码进行编译时得到的所述第二指令的数量包括:
确定所述当前向量长度匹配的编译数据类型指示的当前编译长度;
获取所述目标程序代码的循环迭代操作次数比上所述当前编译长度得到的商的整数部分,并将所述整数部分确定为所述第一指令的数量;
获取所述目标程序代码的循环迭代操作次数对所述当前编译长度的取余结果,并将所述取余结果确定为所述第二指令的数量。
4.根据权利要求1所述的方法,其特征在于,在确定按照所述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量之前,还包括:
通过编译器静态分析确定所述目标程序代码的循环迭代操作次数。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述根据所述编译指令数量确定目标向量长度包括:
获取所述多个向量长度各自对应的编译指令数量;
将最小的编译指令数量对应的向量长度确定为所述目标向量长度。
6.根据权利要求5所述的方法,其特征在于,所述按照所述目标向量长度对所述目标程序代码进行编译,得到目标向量指令包括:
将所述目标程序代码的代码数据中,每所述目标向量长度的数据编译为一条所述第一指令;
将所述代码数据中,不足以编译为所述第一指令的代码数据中,每单位长度的代码数据编译为一条所述第二指令;
将所述第一指令与所述第二指令确定为所述目标向量指令。
7.一种程序编译装置,其特征在于,包括:
获取单元,用于获取目标虚拟机中的多个向量长度;
第一确定单元,用于确定按照所述多个向量长度中的每一个向量长度分别对待编译的目标程序代码进行编译时得到的编译指令数量,其中,所述编译指令数量根据第一指令数量与第二指令数量确定,所述第一指令数量为按照与所述向量长度匹配的编译数据类型指示的编译长度,对所述目标程序代码中的部分程序代码进行编译所生成的第一指令的数量,所述第二指令数量为按照单位长度对所述目标程序代码中除所述部分程序代码之外的剩余程序代码进行编译所生成的的第二指令的数量;
第二确定单元,用于根据所述编译指令数量确定目标向量长度;
编译单元,用于按照所述目标向量长度对所述目标程序代码进行编译,得到目标向量指令。
8.根据权利要求7所述的装置,其特征在于,所述第一确定单元包括:
处理模块,用于将所述多个向量长度中的每一个向量长度确定为当前向量长度,执行以下操作:
获取当前向量长度,确定按照所述当前向量长度对所述目标程序代码中的部分程序代码进行编译时得到的所述第一指令的数量,以及对所述目标程序代码中的剩余程序代码进行编译时得到的所述第二指令的数量,将所述第一指令的数量及所述第二指令的数量的和,确定为所述当前向量长度的当前编译指令数量。
9.根据权利要求8所述的装置,其特征在于,所述处理模块还用于:
确定所述当前向量长度匹配的编译数据类型指示的当前编译长度;
获取所述目标程序代码的循环迭代操作次数比上所述当前编译长度得到的商的整数部分,并将所述整数部分确定为所述第一指令的数量;
获取所述目标程序代码的循环迭代操作次数对所述当前编译长度的取余结果,并将所述取余结果确定为所述第二指令的数量。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第三确定单元,用于在确定按照所述多个向量长度中的每一个向量长度分别对所述目标程序代码进行编译时得到的编译指令数量之前,通过编译器静态分析确定所述目标程序代码的循环迭代操作次数。
11.根据权利要求7至10中任一项所述的装置,其特征在于,所述第二确定单元包括:
获取模块,用于获取所述多个向量长度各自对应的编译指令数量;
第一确定模块,用于将最小的编译指令数量对应的向量长度确定为所述目标向量长度。
12.根据权利要求7所述的装置,其特征在于,所述编译单元包括:
第一编译模块,用于将所述目标程序代码的代码数据中,每所述目标向量长度的数据编译为一条所述第一指令;
第二编译模块,用于将所述代码数据中,不足以编译为所述第一指令的代码数据中,每单位长度的代码数据编译为一条所述第二指令;
第二确定模块,用于将所述第一指令与所述第二指令确定为所述目标向量指令。
13.一种计算机可读的存储介质,所述计算机可读的存储介质存储有计算机程序,其特征在于,所述计算机程序运行时执行所述权利要求1至6任一项中所述的方法。
14.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至6任一项中所述的方法。
15.一种计算机程序,所述计算机程序包括计算机指令,所述计算机指令为存储在存储器上可被处理器执行的指令,其特征在于,所述计算机指令被所述处理器执行时,实现所述权利要求1至6任一项中所述的方法。
CN202011403693.0A 2020-12-04 2020-12-04 程序编译方法和装置、存储介质及电子设备 Pending CN113391813A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011403693.0A CN113391813A (zh) 2020-12-04 2020-12-04 程序编译方法和装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011403693.0A CN113391813A (zh) 2020-12-04 2020-12-04 程序编译方法和装置、存储介质及电子设备

Publications (1)

Publication Number Publication Date
CN113391813A true CN113391813A (zh) 2021-09-14

Family

ID=77616560

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011403693.0A Pending CN113391813A (zh) 2020-12-04 2020-12-04 程序编译方法和装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN113391813A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115951936A (zh) * 2023-01-17 2023-04-11 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115951936A (zh) * 2023-01-17 2023-04-11 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN111124656B (zh) 用于向专用计算资源分配任务的方法、设备和计算机可读存储介质
CN109614162B (zh) 基于组件开发模式下的前端加载优化方法、存储介质
CN110391938B (zh) 用于部署服务的方法和装置
US9383978B2 (en) Apparatus and method for on-demand optimization of applications
CN111722885B (zh) 程序运行方法、装置以及电子设备
CN109766099A (zh) 前端源码编译方法、装置、存储介质及计算机设备
CN111274512A (zh) 一种页面加载方法、装置及介质
CN111158756A (zh) 用于处理信息的方法和装置
CN113391813A (zh) 程序编译方法和装置、存储介质及电子设备
CN112328301B (zh) 维护运行环境一致性的方法、装置、存储介质及电子设备
CN108845864A (zh) 一种基于spring框架的JVM垃圾回收方法和装置
WO2014165464A2 (en) Cryptographic mechanisms to provide information privacy and integrity
CN111880801A (zh) 应用程序动态化方法、装置、电子设备
CN110830427A (zh) 一种netty环境下的消息编码、消息解码的方法和装置
CN114897664A (zh) 图模型部署方法及装置、gpu和存储介质
US11144290B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN109308299B (zh) 用于搜索信息的方法和装置
CN113157274A (zh) 基于微前端的软件开发方法、装置、电子设备及存储介质
CN113778564B (zh) 一种高效执行evm智能合约的方法、设备及储存介质
CN111581578A (zh) 接口请求处理方法和装置
CN111913712A (zh) 用于在Web端部署神经网络模型的方法和装置
CN114615521B (zh) 视频处理方法和装置、计算机可读存储介质、电子设备
CN110825438B (zh) 用于模拟人工智能芯片的数据处理的方法和装置
US11762677B1 (en) High-level vectorization and scalarization of Java vector API library methods
CN112463214B (zh) 数据处理方法及装置、计算机可读存储介质以及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40053164

Country of ref document: HK

SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination