当前位置: 首页 > 专利查询>英特尔公司专利>正文

用于应用中的向量计算的多阶段自动编译制造技术

技术编号:33617084 阅读:9 留言:0更新日期:2022-06-02 00:33
系统、装置和方法可提供将二进制代码嵌入到应用二进制文件中的开发者阶段技术,其中二进制代码对应于静态类型源代码中的向量函数和非向量函数,并且生成中间表示(IR)数据,其中中间表示数据对应于静态类型源代码中的向量函数。此外,开发者阶段技术将IR数据嵌入在应用二进制文件中。此外,部署阶段技术可基于应用二进制文件生成第一编译输出,并且检测与第一编译输出相关联的执行环境中的能力变化。部署阶段技术还可响应于检测到的能力变化,基于第一编译输出来生成第二编译输出。于第一编译输出来生成第二编译输出。于第一编译输出来生成第二编译输出。

【技术实现步骤摘要】
【国外来华专利技术】用于应用中的向量计算的多阶段自动编译


[0001]实施例概括而言涉及软件部署。更具体而言,实施例涉及用于部署的应用中的向量计算的多阶段自动编译。

技术介绍

[0002]以静态类型语言(例如,C++、Rust)编写的软件应用通常是在部署在最终用户计算系统上之前由应用开发者进行编译的。编译可以使用代码优化技术,以将应用从高级别编程语言转换为最终用户计算系统可执行的低级别语言(例如,汇编语言、目标代码、机器代码)。如果在最终用户计算系统中进行了后续升级(例如,指令集体系结构/ISA的增强,新硬件的添加),则除非开发者重编译和重部署应用,否则应用可能无法利用系统升级。因此,可能会经历部署的应用的次优操作。此外,重编译和重部署过程可能导致应用开发者方面更慢地启用新软件特征,和/或最终用户方面更慢地接受系统升级。
附图说明
[0003]通过阅读以下说明书和所附权利要求,并且通过参考以下附图,实施例的各种优点对于本领域技术人员而言将变得清楚,附图中:
[0004]图1是根据一实施例的应用开发和部署的示例的过程流程图;
[0005]图2是根据一实施例的开发阶段编译的示例的框图;
[0006]图3是根据一实施例的一个或多个部署阶段编译的示例的框图;
[0007]图4是根据一实施例的进行源代码的初始编译的方法的示例的流程图;
[0008]图5是根据一实施例的进行源代码的一个或多个后续编译的方法的示例的流程图;
[0009]图6A是根据一实施例的在部署阶段中生成第一编译输出的方法的示例的流程图;
[0010]图6B是根据一实施例的在部署阶段中生成第二编译输出的方法的示例的流程图;
[0011]图7是根据一实施例的性能增强的计算系统的示例的框图;
[0012]图8是根据一实施例的半导体装置的示例的图示;
[0013]图9是根据一实施例的处理器的示例的框图;并且
[0014]图10是根据一实施例的基于多处理器的计算系统的示例的框图。
具体实施方式
[0015]现在转到图1,示出了一种应用部署,其中在开发阶段24期间,源代码20被输入到第一编译器22(例如,包括链接编辑器或链接器)。第一编译器22一般可以使用代码优化技术来将源代码20转换为应用二进制文件26(26a,26b,例如,编译输出),该文件可由一组硬件设备在执行环境中执行。在一个示例中,代码优化技术在编译时考虑到关于硬件设备的信息(例如,ISA,设备类型)。在一实施例中,源代码20是用静态类型的语言编写的,例如,C++、Rust。因此,源代码20用于取回数据、执行操作、输出数据等等的变量的类型在编译时可
能是已知的。从而,图示的第一编译器22使用的代码优化技术在生成应用二进制文件26时也可以考虑到变量类型信息。
[0016]源代码20的一些部分可以执行相对独立的向量计算,并且对源代码的其他部分几乎没有依赖性。例如,内核函数、循环函数、单指令多数据(single instruction multiple data,SIMD)函数、多处理器(例如,OpenMP/开放多处理)指令函数(directive function)、多处理器编译指示(pragma)函数,等等,可以是由源代码20执行的向量函数和/或操作的示例。在执行矩阵操作、多租户操作和其他并行性质的操作(例如,图形颜色函数)时,这种函数可能尤其有用。在图示的示例中,应用二进制文件26包括第一区段,其中包含与源代码20中的向量函数和非向量函数相对应的二进制代码26a,以及第二区段,其中包含与源代码20中的向量函数相对应的中间表示(intermediate representation,IR)数据26b(例如,字节代码、可移植代码和/或p代码数据)。在一实施例中,IR数据26b包括独立的向量相关中间表示和/或由第一编译器22在将源代码20转换成应用二进制文件26期间生成的向量相关中间表示。IR数据26b还可包括神经网络张量数据(例如,TENSORFLOW或PYTORCH张量相关框架中的张量和相应的算子)。
[0017]在图示的示例中,应用二进制文件26在部署阶段32期间被输入到操作系统(operating system,OS)加载器30。在一实施例中,第二编译器34(34a

34c)基于应用二进制文件26生成编译输出36(36a

36c)。编译输出36可包括与源代码20中的向量函数和非向量函数相对应的二进制代码36a,与源代码20中的向量函数相对应的IR数据36b,以及到统一0级接口38的向量函数映射36c。
[0018]在一实施例中,统一0级接口38的操作符合统一编程模型,例如,ONEAPI,它可用于为广泛的处理器类型(包括CPU(中央处理单元)、GPU(图形处理单元)、FPGA(现场可编程门阵列)和专用加速器(例如,MOVIDIUS VPU))编程一组异构的定制(例如,专门)函数28(28a

28c)。从而,统一0级接口38可能在执行时为第一向量函数(例如,内核函数)定义一定制CPU函数28a,为第二向量函数(例如,SIMD函数)定义一定制GPU函数28b,为第三向量函数(例如,循环函数)定义一定制加速器函数28c,等等。图示的解决方案因此使得能够在一组异构的硬件设备上更高效地执行编译输出36。
[0019]正如将更详细论述的,第二编译器34可以响应于能力变化而在部署之后重生成编译输出36,所述能力变化例如是在最终用户计算系统中进行的后续升级(例如,ISA的增强,新硬件的添加)。这种方法通过使得编译输出36能够利用后续升级而进一步增强了性能。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受/采用系统升级。
[0020]图2示出了开发阶段编译,其中源代码40(40a

40c)包括内核函数40a(例如,经由ONEAPI栈以数据并行C++/DPC++定义)、由例如LLVM(例如,clang编译器)自动向量化的具有相对较大循环的传统函数40b,以及其他传统的一般函数40c(例如,非向量函数)。在图示的示例中,编译器42(42a

42c)使用DPC++编译组件42a来基于内核函数40a生成应用(“app”)二进制文件48中的头部46的符号表44中的第一向量函数条目。此外,自动向量化组件42b可以基于传统函数40b在符号表44中生成第二向量函数条目。
[0021]在一实施例中,还可以在向量函数信息表50中做出相应的条目,该表使用IR位置字段(例如,指示出起始位置和大小)来映射到嵌入在应用二进制文件48中的向量IR的区段
52。向量函数信息表50和区段52可以由编译器42生成,由链接器合并,并且作为数据区段被嵌入应用二进制文件48中,以促进兼容性(例如,WINDOWS的PE/可移植可执行文件,LINUX的ELF/可执行且可链接格式本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种性能增强的计算系统,包括:网络控制器,用于获得应用二进制文件,其中所述应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码和与所述向量函数相对应的中间表示数据;与所述网络控制器相耦合的处理器;以及存储器,包括一组可执行程序指令,所述指令当被所述处理器执行时,使得所述计算系统:基于所述应用二进制文件来生成第一编译输出;检测与所述第一编译输出相关联的执行环境中的能力变化;并且响应于检测到的能力变化,基于所述第一编译输出来生成第二编译输出。2.如权利要求1所述的计算系统,其中,为了生成所述第二编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述检测到的能力变化来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。3.如权利要求1所述的计算系统,其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述执行环境来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第一编译输出中。4.如权利要求1所述的计算系统,其中所述指令当被执行时,还使得所述计算系统:基于所述执行环境来生成向量能力列表;将所述向量能力嵌入到所述第一编译输出中,其中所述能力变化是基于所述向量能力列表而被检测到的;基于所述执行环境来更新所述向量能力列表;并且将更新后的向量能力列表嵌入到所述第二编译输出中。5.如权利要求1所述的计算系统,其中,所述应用二进制文件还包括向量函数信息表,并且其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统更新所述向量函数信息表中的一个或多个二进制位置字段条目。6.如权利要求1至5中的任一项所述的计算系统,其中,所述能力变化是硬件变化或软件变化中的一个或多个。7.至少一个计算机可读存储介质,包括一组可执行程序指令,所述指令当被计算系统执行时,使得所述计算系统:基于应用二进制文件来生成第一编译输出,其中所述应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码和与所述向量函数相对应的中间表示数据;检测与所述第一编译输出相关联的执行环境中的能力变化;并且响应于检测到的能力变化,基于所述第一编译输出来生成第二编译输出。8.如权利要求7所述的至少一个计算机可读存储介质,其中,为了生成所述第二编译输
出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述检测到的能力变化来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。9.如权利要求7所述的至少一个计算机可读存储介质,其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述执行环境来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第一编译输出中。10.如权利要求7所述的至少一个计算机可读存储介质,其中所述指令当被执行时,还使得所述计算系统:基于所述执行环境来生成向量能力列表,将所述向量能力嵌入到所述第一编译输出中,其中所述能力变化是基于所...

【专利技术属性】
技术研发人员:丁俊勇穆罕默德
申请(专利权)人:英特尔公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1