一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于应用中的向量计算的多阶段自动编译的制作方法

2022-06-01 18:45:17 来源:中国专利 TAG:


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


背景技术:

2.以静态类型语言(例如,c 、rust)编写的软件应用通常是在部署在最终用户计算系统上之前由应用开发者进行编译的。编译可以使用代码优化技术,以将应用从高级别编程语言转换为最终用户计算系统可执行的低级别语言(例如,汇编语言、目标代码、机器代码)。如果在最终用户计算系统中进行了后续升级(例如,指令集体系结构/isa的增强,新硬件的添加),则除非开发者重编译和重部署应用,否则应用可能无法利用系统升级。因此,可能会经历部署的应用的次优操作。此外,重编译和重部署过程可能导致应用开发者方面更慢地启用新软件特征,和/或最终用户方面更慢地接受系统升级。
附图说明
3.通过阅读以下说明书和所附权利要求,并且通过参考以下附图,实施例的各种优点对于本领域技术人员而言将变得清楚,附图中:
4.图1是根据一实施例的应用开发和部署的示例的过程流程图;
5.图2是根据一实施例的开发阶段编译的示例的框图;
6.图3是根据一实施例的一个或多个部署阶段编译的示例的框图;
7.图4是根据一实施例的进行源代码的初始编译的方法的示例的流程图;
8.图5是根据一实施例的进行源代码的一个或多个后续编译的方法的示例的流程图;
9.图6a是根据一实施例的在部署阶段中生成第一编译输出的方法的示例的流程图;
10.图6b是根据一实施例的在部署阶段中生成第二编译输出的方法的示例的流程图;
11.图7是根据一实施例的性能增强的计算系统的示例的框图;
12.图8是根据一实施例的半导体装置的示例的图示;
13.图9是根据一实施例的处理器的示例的框图;并且
14.图10是根据一实施例的基于多处理器的计算系统的示例的框图。
具体实施方式
15.现在转到图1,示出了一种应用部署,其中在开发阶段24期间,源代码20被输入到第一编译器22(例如,包括链接编辑器或链接器)。第一编译器22一般可以使用代码优化技术来将源代码20转换为应用二进制文件26(26a,26b,例如,编译输出),该文件可由一组硬件设备在执行环境中执行。在一个示例中,代码优化技术在编译时考虑到关于硬件设备的信息(例如,isa,设备类型)。在一实施例中,源代码20是用静态类型的语言编写的,例如,c 、rust。因此,源代码20用于取回数据、执行操作、输出数据等等的变量的类型在编译时可
能是已知的。从而,图示的第一编译器22使用的代码优化技术在生成应用二进制文件26时也可以考虑到变量类型信息。
16.源代码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张量相关框架中的张量和相应的算子)。
17.在图示的示例中,应用二进制文件26在部署阶段32期间被输入到操作系统(operating system,os)加载器30。在一实施例中,第二编译器34(34a-34c)基于应用二进制文件26生成编译输出36(36a-36c)。编译输出36可包括与源代码20中的向量函数和非向量函数相对应的二进制代码36a,与源代码20中的向量函数相对应的ir数据36b,以及到统一0级接口38的向量函数映射36c。
18.在一实施例中,统一0级接口38的操作符合统一编程模型,例如,oneapi,它可用于为广泛的处理器类型(包括cpu(中央处理单元)、gpu(图形处理单元)、fpga(现场可编程门阵列)和专用加速器(例如,movidius vpu))编程一组异构的定制(例如,专门)函数28(28a-28c)。从而,统一0级接口38可能在执行时为第一向量函数(例如,内核函数)定义一定制cpu函数28a,为第二向量函数(例如,simd函数)定义一定制gpu函数28b,为第三向量函数(例如,循环函数)定义一定制加速器函数28c,等等。图示的解决方案因此使得能够在一组异构的硬件设备上更高效地执行编译输出36。
19.正如将更详细论述的,第二编译器34可以响应于能力变化而在部署之后重生成编译输出36,所述能力变化例如是在最终用户计算系统中进行的后续升级(例如,isa的增强,新硬件的添加)。这种方法通过使得编译输出36能够利用后续升级而进一步增强了性能。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受/采用系统升级。
20.图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中生成第二向量函数条目。
21.在一实施例中,还可以在向量函数信息表50中做出相应的条目,该表使用ir位置字段(例如,指示出起始位置和大小)来映射到嵌入在应用二进制文件48中的向量ir的区段
52。向量函数信息表50和区段52可以由编译器42生成,由链接器合并,并且作为数据区段被嵌入应用二进制文件48中,以促进兼容性(例如,windows的pe/可移植可执行文件,linux的elf/可执行且可链接格式,或者其他适当的格式)。此外,编译工具链可以生成默认实现,以确保应用二进制文件48正常执行,即使后续编译不被执行。
22.向量函数信息表50也可包括二进制(“bin”)位置字段(例如,指示出起始位置和大小),它在开发阶段对于条目包含空数据。在图示的示例中,一般编译组件42c基于其他传统一般函数40c在符号表44中生成一个或多个一般函数条目。此外,二进制函数的区段54可被嵌入在应用二进制文件48中(例如,作为纯cpu实现的回退代码)。
23.现在转到图3,示出了部署阶段编译,其中编译器60(60a-60c)使用增强的os加载器61来确定应用二进制文件62是否在文件62的头部66中包含向量函数信息表70。如果是,则状态分析器60a确定是否要进行后续(例如,第2次、第3次等等)编译。状态分析器60a因此可以确定是否以前从未为应用二进制文件62触发过后续编译,和/或执行环境的向量计算能力自从上次编译以来是否已变化。
24.为了确定向量计算能力是否已变化,状态分析器60a可以在每次执行后续编译时对与向量计算有关的所有硬件和软件运行时细节进行记录(例如,“快照”)。在一实施例中,快照包含关于cpu avx(高级向量扩展)宽度和/或版本、加速器(gpu、视频处理单元/vpu等等)细节、oneapi栈版本等等的信息。快照可被存储在应用二进制文件62中的包含向量能力列表72的区段中。在一个示例中,os加载器61捕捉与向量能力列表72中的信息相同的当前执行环境的信息,以确定是否有足够的变化来触发新的编译。为了加速对执行环境信息的捕捉,可能还有其他优化,这些优化缓存快照并且按照一定的节奏或者响应于某些事件来更新快照。
25.如果不进行后续编译,则在文件62的当前状态中执行图示的应用二进制文件62。否则,对于向量函数信息表70中的每个条目,编译器60b将在向量ir数据的区段64中找到相应的ir。基于ir的类型,编译器60b中的相应解析器74被调用。此外,编译器60b中的代码生成(“codegen”)组件76将解析的结果映射到oneapi 0级接口60c。根据部署的系统的实际硬件组件和软件运行时,oneapi 0级接口可以为向量函数生成专门的二进制文件。
26.编译器60b中的修补器78通过将生成的二进制文件组织到二进制向量函数的区段68中(例如,每一者调用oneapi)来将专门的函数集成回到应用二进制文件62中,用二进制位置修补向量函数信息表70,并且修补pe/elf数据结构的相关表,以确保这些函数与一般代码的其余部分集成并且可被其调用(例如,创建相关存根(stub),修补重定位表,等等)。如果该过程成功,则图示的修补器78用捕捉的当前执行环境的向量计算能力来更新向量能力列表72。否则,修补器78改为使用回退二进制代码的区段80。然后,操作控制可以被返回到os加载器61,它加载并执行更新的应用二进制文件62。
27.因此,应用开发者只编译应用二进制文件一次,其余的编译是在部署之后自动进行的。在统一编程模型(例如,oneapi 0级接口)的协助下,自动后续阶段编译会自动适应最新的硬件和软件能力。
28.图4示出了进行源代码的初始编译的方法90。方法90一般可被实现在编译器中,例如,已经论述过的编译器22(图1)和/或编译器42(图2)。更具体而言,方法90可作为一个或多个模块被实现在存储在诸如随机访问存储器(random access memory,ram)、只读存储器
(read only memory,rom)、可编程rom(programmable rom,prom)、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,被实现在诸如可编程逻辑阵列(programmable logic array,pla)、fpga、复杂可编程逻辑器件(complex programmable logic device,cpld)之类的可配置逻辑中,被利用诸如专用集成电路(application specific integrated circuit,asic)、互补金属氧化物半导体(complementary metal oxide semiconductor,cmos)或晶体管-晶体管逻辑(transistor-transistor logic,ttl)技术之类的电路技术的固定功能硬件逻辑中,或者用固定功能硬件逻辑、可配置逻辑和逻辑指令集合的任意组合来实现。
29.例如,可以以一种或多种编程语言的任何组合来编写用于执行方法90中所示出的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如java、smalltalk、c 之类的,还包括传统的过程式编程语言,比如“c”编程语言或类似的编程语言。此外,逻辑指令可包括汇编指令、isa指令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路的配置数据、个性化电子电路和/或硬件本机的其他结构组件(例如,主机处理器、中央处理单元/cpu、微控制器,等等)的状态信息。
30.图示的处理块92提供了将二进制代码嵌入到应用二进制文件中,其中二进制代码对应于静态类型源代码中的向量函数和非向量函数。块94生成ir数据,其中ir数据对应于静态类型代码中的向量函数。在一实施例中,向量函数包括内核函数、循环函数、simd函数、多处理器指令函数、多处理器编译指示函数,等等,或者这些的任何组合。此外,ir数据可包括编译器ir、神经网络张量数据,等等。
31.ir数据可以在块96处被嵌入到应用二进制文件中,其中块98生成向量函数信息表。在一个示例中,向量函数信息表包括类型字段,ir位置字段、以及二进制位置字段。此外,二进制位置字段对于向量函数信息表中的一个或多个条目可包括空数据。图示的块100将向量函数信息表嵌入到应用二进制文件中。虽然图示的方法90侧重于静态类型的源代码,但源代码也可以是动态类型的源代码,具有仅在运行时已知的变量类型数据。在另外一个示例中,源代码可以是与动态类型的源代码(例如,被管理的运行时应用的垃圾收集代码)相关联的静态类型的代码。
32.图示的方法90通过使得应用二进制文件能够利用对执行环境的后续升级来增强性能。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受系统升级。
33.图5示出了进行源代码的一个或多个后续编译的方法110。方法110一般可被实现在编译器中,例如,已经论述过的编译器34(图1)和/或编译器60(图3)。更具体而言,方法110可作为一个或多个模块被实现在存储在诸如ram、rom、prom、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,被实现在诸如pla、fpga、cpld之类的可配置逻辑中,被实现在利用诸如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或者被实现在这些的组合中。
34.图示的处理块112提供了基于应用二进制文件生成第一编译输出,其中应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码以及与向量函数(例如,内核函数、循环函数、simd函数、多处理器指令函数、多处理器编译指示函数,等等)相对应的ir数据。在块114可以自动确定在与第一编译输出相关联的执行环境中是否检测到能力变
化。在一实施例中,能力变化是硬件变化(例如,新加速器的添加)、软件变化(isa中的更宽指令,新的驱动程序),等等,或者这些的任何组合。如果检测到能力变化,则块116响应于该能力变化,基于第一编译输出生成第二编译输出。
35.图示的方法110通过使得编译输出能够利用对执行环境的后续升级来增强性能。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受系统升级。
36.图6a示出了在部署阶段中生成第一编译输出的方法120。方法120可以很容易地取代已经论述过的块112(图5)。更具体而言,方法120可作为一个或多个模块被实现在存储在诸如ram、rom、prom、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,被实现在诸如pla、fpga、cpld之类的可配置逻辑中,被实现在利用诸如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或者被实现在这些的组合中。
37.图示的处理块122提供了将应用二进制文件中的ir数据映射到统一接口调用,例如,oneapi0级接口。在一个示例中,块124经由统一接口调用,基于ir数据和执行环境生成第二二进制代码。此外,在块126,第二二进制代码可以被嵌入到第一编译输出中。在一实施例中,块128基于执行环境生成向量能力列表,其中向量能力列表在块130被嵌入到第一编译输出中。此外,图示的块132提供了更新第一编译输出的向量函数信息表中的一个或多个二进制位置字段条目。
38.图6b示出了在部署阶段中生成第一编译输出的方法140。该方法140可以很容易地取代已经论述过的块116(图5)。更具体而言,方法140可作为一个或多个模块被实现在存储在诸如ram、rom、prom、固件、闪存等等之类的机器或计算机可读存储介质中的逻辑指令集合中,被实现在诸如pla、fpga、cpld之类的可配置逻辑中,被实现在利用诸如asic、cmos或ttl技术之类的电路技术的固定功能硬件逻辑中,或者被实现在这些的组合中。
39.图示的处理块142提供了将应用二进制文件中的ir数据映射到统一接口调用,例如,oneapi0级接口。在一个示例中,块144经由统一接口调用,基于ir数据和检测到的能力变化来生成第二二进制代码。此外,在块146,第二二进制代码可以被嵌入到第二编译输出中。在一实施例中,块148基于执行环境更新向量能力列表,其中向量能力列表在块149被嵌入到第二编译输出中。此外,图示的块151提供了更新第二编译输出的向量函数信息表中的一个或多个二进制位置字段条目。
40.现在转到图7,示出了性能增强的计算系统150。系统150一般可以是电子设备/平台的一部分,具有计算功能(例如,个人数字助理/pda、笔记本计算机、平板计算机、可转换平板设备、服务器)、通信功能(例如,智能电话)、成像功能(例如,相机、摄像机)、媒体播放功能(例如,智能电视/tv)、可穿戴功能(例如,手表、眼镜、头饰、鞋类、珠宝)、车辆功能(例如,汽车、卡车、摩托车)、机器人功能(例如,自主机器人),等等,或者这些的任何组合。在图示的示例中,系统150包括主机处理器152(例如,cpu),其具有与系统存储器156相耦合的集成存储器控制器(integrated memory controller,imc)154。
41.图示的系统150还包括输入输出(io)模块158,其与主机处理器152和图形处理器160(例如,gpu)一起作为片上系统(system on chip,soc)实现在半导体管芯162上。图示的io模块158与例如显示器164(例如,触摸屏、液晶显示器/lcd、发光二极管/led显示器)、网络控制器166(例如,有线和/或无线)以及大容量存储装置168(例如,硬盘驱动器/hdd、光
盘、固态驱动器/ssd、闪存)进行通信。
42.主机处理器152、图形处理器160和/或io模块158可以执行从系统存储器156和/或大容量存储装置168取回的指令170。在一实施例中,计算系统150在应用开发阶段中被操作,并且指令170包括可执行程序指令,以执行已经论述过的方法90(图4)的一个或多个方面。从而,图示的指令170的执行可以使得计算系统150将二进制代码嵌入到应用二进制文件中,其中二进制代码对应于静态类型源代码中的向量函数和非向量函数。指令170的执行还可以使得计算系统150生成ir数据,其中ir数据对应于静态类型源代码中的向量函数。在一实施例中,指令170的执行进一步使得计算系统150将ir数据嵌入到应用二进制文件中。在一个示例中,经由网络控制器166部署应用二进制文件。
43.在另一实施例中,计算系统150作为最终用户(例如,客户端)计算系统在部署阶段中被操作。在这种情况下,网络控制器166可以获得(例如,经由推送和/或拉取通信等等取回、请求和/或接收)应用二进制文件,其中应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码以及与向量函数相对应的中间表示数据。此外,指令170可包括可执行程序指令,以执行已经论述过的方法110(图5)、方法120(图6a)和/或方法140(图6b)的一个或多个方面。从而,当被执行时,指令170可以使得计算系统150基于应用二进制文件生成第一编译输出,并且检测与第一编译输出相关联的执行环境中的能力变化。该能力变化可能是相对于半导体管芯162的硬件和/或软件变化。指令170的执行还可以使得计算系统150响应于检测到的能力变化而基于第一编译输出生成第二编译输出。
44.系统存储器156和/或大容量存储装置168因此可包括第一存储器区段,其中包括与静态类型源代码中的向量函数和非向量函数相对应的二进制代码,以及第二存储器区段,其中包括与静态类型源代码中的向量函数相对应的ir数据。在一实施例中,系统存储器156和/或大容量存储装置168还可包括第三存储器区段,其中包括向量函数信息表。在这种情况下,向量函数信息表可包括类型字段、ir位置字段、以及二进制位置字段。在一实施例中,二进制字段在部署应用二进制文件时对于向量函数信息表中的一个或多个条目可包括空数据。如前所述,ir数据可对应于内核函数、循环函数、simd函数、多处理器指令函数、多处理器编译指示函数,等等,或者这些的任何组合。在一个示例中,ir数据包括编译器ir和/或神经网络张量数据。
45.虽然上面的论述侧重于静态类型的源代码,但源代码也可以是动态类型的源代码,具有仅在运行时已知的变量类型数据。在这种情况下,如果代码的即时(just-in-time,jit)编译器崩溃了、被破坏了或者以其他方式不可用了,则可以使用本文描述的技术来将源代码转换成可执行二进制代码。
46.图示的计算系统150因此被认为是性能增强的,至少在它使得(一个或多个)编译输出能够利用对执行环境的后续升级的程度上是如此。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受系统升级,如前所述。
47.图8示出了半导体装置172(例如,芯片、管芯、封装)。图示的装置172包括一个或多个衬底174(例如,硅、蓝宝石、砷化镓)和与(一个或多个)衬底174相耦合的逻辑176(例如,晶体管阵列和其他集成电路/ic组件)。在一实施例中,装置172在应用开发阶段中被操作,并且逻辑176执行已经论述过的方法90(图4)的一个或多个方面。从而,逻辑176可以将二进
制代码嵌入到应用二进制文件中,其中二进制代码对应于静态类型源代码中的向量函数和非向量函数。逻辑176还可生成ir数据,其中ir数据对应于静态类型源代码中的向量函数。在一实施例中,逻辑176还将ir数据嵌入到应用二进制文件中。
48.在另一实施例中,装置172在部署阶段中被操作,并且该逻辑执行已经论述过的方法110(图5)、方法120(图6a)和/或方法140(图6b)的一个或多个方面。在这种情况下,逻辑176可以基于应用二进制文件生成第一编译输出,其中应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码以及与向量函数相对应的中间表示数据。此外,逻辑176可以检测与第一编译输出相关联的执行环境中的能力变化。该能力变化可能是硬件和/或软件变化。在一实施例中,逻辑176响应于检测到的能力变化,基于第一编译输出生成第二编译输出。
49.图示的装置172因此被认为是性能增强的,至少在它使得(一个或多个)编译输出能够自动利用对执行环境的后续升级的程度上是如此。事实上,消除应用开发者方面的重编译和重部署过程可能导致应用开发者更快地启用新的软件特征和/或最终用户方面更快地接受系统升级,如前所述。
50.逻辑176可至少部分被实现在可配置逻辑或固定功能硬件逻辑中。在一个示例中,逻辑176包括被定位(例如,嵌入)在(一个或多个)衬底174内的晶体管沟道区域。从而,逻辑176和(一个或多个)衬底174之间的界面可能不是突变结。逻辑176也可被认为包括在(一个或多个)衬底174的初始晶圆上生长的外延层。
51.图9根据一个实施例图示了处理器核心200。处理器核心200可以是用于任何类型的处理器的核心,例如微处理器、嵌入式处理器、数字信号处理器(digital signal processor,dsp)、网络处理器、或者其他执行代码的设备。虽然在图9中只图示了一个处理器核心200,但处理元件或者可包括多于一个图9中所示的处理器核心200。处理器核心200可以是单线程核心,或者对于至少一个实施例,处理器核心200可以是多线程的,因为其对于每个核心可包括多于一个硬件线程情境(或者说“逻辑处理器”)。
52.图9还图示了与处理器核心200相耦合的存储器270。存储器270可以是本领域技术人员已知的或者以其他方式可获得的各种存储器(包括存储器层次体系的各种层)中的任何一者。存储器270可包括要被处理器核心200执行的一个或多个代码213指令,其中代码213可实现已经论述过的方法90(图4)、方法110(图5)、方法120(图6a)和/或方法140(图6b)。处理器核心200遵循由代码213指示的指令的程序序列。每个指令可进入前端部分210并且被一个或多个解码器220处理。解码器220可生成诸如预定格式的固定宽度微操作之类的微操作作为其输出,或者可生成其他指令、微指令或者反映原始代码指令的控制信号。图示的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,它们一般分配资源并且对与转换指令相对应的操作进行排队以便执行。
53.处理器核心200被示为包括具有一组执行单元255-1至255-n的执行逻辑250。一些实施例可包括专用于特定功能或功能集合的若干个执行单元。其他实施例可只包括一个执行单元或者可执行特定功能的一个执行单元。图示的执行逻辑250执行由代码指令指定的操作。
54.在代码指令所指定的操作的执行完成之后,后端逻辑260使代码213的指令引退。在一个实施例中,处理器核心200允许指令的无序执行,但要求指令的有序引退。引退逻辑
265可采取本领域技术人员已知的各种形式(例如,重排序缓冲器之类的)。这样,处理器核心200在代码213的执行期间被变换,至少就由解码器生成的输出、被寄存器重命名逻辑225利用的硬件寄存器和表格以及被执行逻辑250修改的任何寄存器(未示出)而言。
55.虽然在图9中没有图示,但处理元件可包括与处理器核心200一起在芯片上的其他元件。例如,处理元件可包括与处理器核心200一起的存储器控制逻辑。处理元件可包括i/o控制逻辑和/或可包括与存储器控制逻辑相集成的i/o控制逻辑。处理元件也可包括一个或多个缓存。
56.现在参考图10,示出了根据一实施例的计算系统1000实施例的框图。图10中所示出的是多处理器系统1000,其包括第一处理元件1070和第二处理元件1080。虽然示出了两个处理元件1070和1080,但要理解,系统1000的实施例也可包括仅一个这种处理元件。
57.系统1000被图示为点到点互连系统,其中第一处理元件1070和第二处理元件1080经由点到点互连1050耦合。应当理解,图10中所示的任何或所有互连可被实现为多点分支总线,而不是点到点互连。
58.如图10所示,处理元件1070和1080的每一者可以是多核处理器,包括第一和第二处理器核心(即,处理器核心1074a和1074b和处理器核心1084a和1084b)。这种核心1074a、1074b、1084a、1084b可被配置为以与上文联系图9所论述类似的方式来执行指令代码。
59.每个处理元件1070、1080可包括至少一个共享缓存1896a、1896b。共享缓存1896a、1896b可存储被处理器的一个或多个组件利用的数据(例如,指令),所述组件例如分别是核心1074a、1074b和1084a、1084b。例如,共享缓存1896a、1896b可在本地缓存存储器1032、1034中存储的数据,供处理器的组件更快速访问。在一个或多个实施例中,共享缓存1896a、1896b可包括一个或多个中间级别缓存,例如第2级(l2)、第3级(l3)、第4级(4)或者其他级别的缓存,最后一级缓存(last level cache,llc),和/或这些的组合。
60.虽然被示为只具有两个处理元件1070、1080,但要理解,实施例的范围不限于此。在其他实施例中,一个或多个额外的处理元件可存在于给定的处理器中。或者,处理元件1070、1080中的一个或多个可以是除了处理器以外的元件,例如加速器或者现场可编程门阵列。例如,(一个或多个)额外的处理元件可包括与第一处理器1070相同的(一个或多个)额外处理器,与第一处理器1070异构或非对称的(一个或多个)额外处理器,加速器(例如,图形加速器或者数字信号处理(dsp)单元),现场可编程门阵列,或者任何其他处理元件。在处理元件1070、1080之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言,可以有各种差异。这些差异可实际上将其自身展现为处理元件1070、1080之间的非对称性和异构性。对于至少一个实施例,各种处理元件1070、1080可存在于相同的管芯封装中。
61.第一处理元件1070还可包括存储器控制器逻辑(mc)1072和点到点(p-p)接口1076和1078。类似地,第二处理元件1080可包括mc 1082和p-p接口1086和1088。如图10所示,mc 1072和1082将处理器耦合到各自的存储器,即存储器1032和存储器1034,存储器1032和存储器1034可以是在本地附接到各个处理器的主存储器的一部分。虽然mc 1072和1082被图示为集成到处理元件1070、1080中,但对于替换实施例,mc逻辑可以是在处理元件1070、1080之外的分立逻辑,而不是集成在其中。
62.第一处理元件1070和第二处理元件1080可分别经由p-p互连1076、1086耦合到i/o
子系统1090。如图10所示,i/o子系统1090包括p-p接口1094和1098。此外,i/o子系统1090包括接口1092来将i/o子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线1049可用于将图形引擎1038耦合到i/o子系统1090。或者,点到点互连可耦合这些组件。
63.进而,i/o子系统1090可经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(peripheral component interconnect,pci)总线,或者诸如快速pci总线或另一种第三代i/o互连总线之类的总线,虽然实施例的范围不限于此。
64.如图10所示,各种i/o设备1014(例如,生物计量扫描仪、扬声器、相机、传感器)可耦合到第一总线1016,以及可将第一总线1016耦合到第二总线1020的总线桥1018。在一个实施例中,第二总线1020可以是低引脚数(low pin count,lpc)总线。各种设备可耦合到第二总线1020,例如包括键盘/鼠标1012、(一个或多个)通信设备1026、以及数据存储单元1019(例如,盘驱动器或者其他大容量存储设备),其中该数据存储单元在一个实施例中可包括代码1030。图示的代码1030可实现已经论述过的方法90(图4)、方法110(图5)、方法120(图6a)和/或方法140(图6b),并且可与已经论述过的代码213(图9)类似。另外,音频i/o1024可耦合到第二总线1020并且电池1010可向计算系统1000供应电力。
65.注意,设想了其他实施例。例如,取代图10的点到点体系结构,系统可实现多点分支总线或者另外的这种通信拓扑。另外,可改为利用比图10所示更多或更少的集成芯片来划分图10的元件。
66.附加注释和示例:
67.示例1包括一种性能增强的计算系统,包括网络控制器,来获得应用二进制文件,其中所述应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码和与所述向量函数相对应的中间表示数据,与所述网络控制器相耦合的处理器,以及包括一组可执行程序指令的存储器,所述指令当被所述处理器执行时,使得所述计算系统:基于所述应用二进制文件来生成第一编译输出,检测与所述第一编译输出相关联的执行环境中的能力变化,并且响应于检测到的能力变化,基于所述第一编译输出来生成第二编译输出。
68.示例2包括如示例1所述的计算系统,其中,为了生成所述第二编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述检测到的能力变化来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。
69.示例3包括如示例1所述的计算系统,其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述执行环境来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第一编译输出中。
70.示例4包括如示例1所述的计算系统,其中所述指令当被执行时,还使得所述计算系统:基于所述执行环境来生成向量能力列表;将所述向量能力嵌入到所述第一编译输出中,其中所述能力变化是基于所述向量能力列表而被检测到的;基于所述执行环境来更新所述向量能力列表;并且将更新后的向量能力列表嵌入到所述第二编译输出中。
71.示例5包括如示例1所述的计算系统,其中,所述应用二进制文件还包括向量函数信息表,并且其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统更新所述向量函数信息表中的一个或多个二进制位置字段条目。
72.示例6包括如示例1至5中的任一项所述的计算系统,其中,所述能力变化是硬件变化或软件变化中的一个或多个。
73.示例7包括至少一个计算机可读存储介质,包括一组可执行程序指令,所述指令当被计算系统执行时,使得所述计算系统:基于应用二进制文件来生成第一编译输出,其中所述应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码和与所述向量函数相对应的中间表示数据;检测与所述第一编译输出相关联的执行环境中的能力变化;并且响应于检测到的能力变化,基于所述第一编译输出来生成第二编译输出。
74.示例8包括如示例7所述的至少一个计算机可读存储介质,其中,为了生成所述第二编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述检测到的能力变化来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。
75.示例9包括如示例7所述的至少一个计算机可读存储介质,其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述执行环境来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第一编译输出中。
76.示例10包括如示例7所述的至少一个计算机可读存储介质,其中所述指令当被执行时,还使得所述计算系统:基于所述执行环境来生成向量能力列表;将所述向量能力嵌入到所述第一编译输出中,其中所述能力变化是基于所述向量能力列表而被检测到的;基于所述执行环境来更新所述向量能力列表;并且将更新后的向量能力列表嵌入到所述第二编译输出中。
77.示例11包括如示例7所述的至少一个计算机可读存储介质,其中,所述应用二进制文件还包括向量函数信息表,并且其中,为了生成所述第一编译输出,所述指令当被执行时,还使得所述计算系统更新所述向量函数信息表中的一个或多个二进制位置字段条目。
78.示例12包括如示例7至11中的任一项所述的至少一个计算机可读存储介质,其中,所述能力变化是硬件变化或软件变化中的一个或多个。
79.示例13包括一种操作性能增强的计算系统的方法,该方法包括:基于应用二进制文件来生成第一编译输出,其中所述应用二进制文件包括与向量函数和非向量函数相对应的第一二进制代码和与所述向量函数相对应的中间表示数据;检测与所述第一编译输出相关联的执行环境中的能力变化;并且响应于检测到的能力变化,基于所述第一编译输出来生成第二编译输出。
80.示例14包括如示例13所述的方法,其中,为了生成所述第二编译输出,所述指令当被执行时,还使得所述计算系统:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述检测到的能力变化来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。
81.示例15包括如示例13所述的方法,其中,生成所述第一编译输出包括:将所述中间表示数据映射到统一接口调用;经由所述统一接口调用,基于所述中间表示数据和所述执行环境来生成第二二进制代码;并且将所述第二二进制代码嵌入到所述第二编译输出中。
82.示例16包括如示例13所述的方法,还包括:基于所述执行环境来生成向量能力列表;将所述向量能力嵌入到所述第一编译输出中,其中所述能力变化是基于所述向量能力
列表而被检测到的;基于所述执行环境来更新所述向量能力列表;并且将更新后的向量能力列表嵌入到所述第二编译输出中。
83.示例17包括如示例13所述的方法,其中,所述应用二进制文件还包括向量函数信息表,并且其中,生成所述第一编译输出还包括更新所述向量函数信息表中的一个或多个二进制位置字段条目。
84.示例18包括如示例13至17中的任一项所述的方法,其中,所述能力变化是硬件变化或软件变化中的一个或多个。
85.示例19包括至少一个计算机可读存储介质,包括第一存储器区段,该第一存储器区段包括与静态类型源代码中的向量函数和非向量函数相对应的二进制代码;以及第二存储器区段,该第二存储器区段包括与所述静态类型源代码中的所述向量函数相对应的中间表示数据。
86.示例20包括如示例19所述的至少一个计算机可读存储介质,还包括第三存储器区段,该第三存储器区段包括向量函数信息表。
87.示例21包括如示例20所述的至少一个计算机可读存储介质,其中,所述向量函数信息表包括类型字段、中间表示位置字段、以及二进制位置字段。
88.示例22包括如示例21所述的至少一个计算机可读存储介质,其中,所述二进制位置字段对于所述向量函数信息表中的一个或多个条目包括空数据。
89.示例23包括如示例19所述的至少一个计算机可读存储介质,其中,所述中间表示数据对应于以下各项中的一个或多个:内核函数、循环函数、单指令多数据(simd)函数、多处理器指令函数或者多处理器编译指示函数。
90.示例24包括如示例19至23中的任一项所述的至少一个计算机可读存储介质,其中,所述中间表示数据包括编译器中间表示或神经网络张量数据中的一个或多个。
91.示例25包括至少一个计算机可读存储介质,包括一组可执行程序指令,所述指令当被计算系统执行时,使得所述计算系统:将二进制代码嵌入到应用二进制文件中,其中所述二进制代码对应于静态类型源代码中的向量函数和非向量函数;生成中间表示数据,其中所述中间表示数据对应于所述静态类型源代码中的所述向量函数;并且将所述中间表示数据嵌入到所述应用二进制文件中。
92.示例26包括如示例25所述的至少一个计算机可读存储介质,其中所述指令当被执行时,还使得所述计算系统生成向量函数信息表,并且将所述向量函数信息表嵌入到所述应用二进制文件中。
93.示例27包括如示例26所述的至少一个计算机可读存储介质,其中,所述向量函数信息表包括类型字段、中间表示位置字段、以及二进制位置字段。
94.示例28包括如示例27所述的至少一个计算机可读存储介质,其中,所述二进制位置字段对于所述向量函数信息表中的一个或多个条目包括空数据。
95.示例29包括如示例25所述的至少一个计算机可读存储介质,其中,所述向量函数包括以下各项中的一个或多个:内核函数、循环函数、单指令多数据(simd)函数、多处理器指令函数或者多处理器编译指示函数。
96.示例30包括如示例25至29中的任一项所述的至少一个计算机可读存储介质,其中,所述中间表示数据包括编译器中间表示或神经网络张量数据中的一个或多个。
97.示例31包括一种操作性能增强的计算系统的方法,该方法包括:将二进制代码嵌入到应用二进制文件中,其中所述二进制代码对应于静态类型源代码中的向量函数和非向量函数;生成中间表示数据,其中所述中间表示数据对应于所述静态类型源代码中的所述向量函数;并且将所述中间表示数据嵌入到所述应用二进制文件中。
98.示例32包括如示例31所述的方法,还包括生成向量函数信息表,并且将所述向量函数信息表嵌入到所述应用二进制文件中。
99.示例33包括如示例32所述的方法,其中,所述向量函数信息表包括类型字段、中间表示位置字段、以及二进制位置字段。
100.示例34包括如示例33所述的方法,其中,所述二进制位置字段对于所述向量函数信息表中的一个或多个条目包括空数据。
101.示例35包括如示例31所述的方法,其中,所述向量函数包括以下各项中的一个或多个:内核函数、循环函数、单指令多数据(simd)函数、多处理器指令函数或者多处理器编译指示函数。
102.示例36包括如示例31至35中的任一项所述的方法,其中,所述中间表示数据包括编译器中间表示或神经网络张量数据中的一个或多个。
103.示例37包括一种性能增强的计算系统,包括网络控制器,与所述网络控制器相耦合的处理器,以及与所述处理器相耦合的存储器,所述存储器包括一组可执行程序指令,所述指令当被所述处理器执行时,使得所述计算系统执行如示例31至36中的任一项所述的方法。
104.示例38包括用于执行如示例31至36中的任一项所述的方法的装置。
105.示例39包括用于执行如示例13至18中的任一项所述的方法的装置。
106.从而,本文描述的技术可提供一种统一且共享的方式来将所有软件中的独立的向量相关计算作为一个单一批次来启用和调适。此外,该技术可以为诸如c、c 和/或rust之类的静态语言提供一种多阶段解决方案,其中应用被作为最终二进制文件连同向量函数的中间表示的混合来分发。通过与诸如oneapi x0接口之类的接口交互,针对各种硬件对后续阶段编译进行自动调适和专门化。此外,第二阶段编译可在加载阶段被触发并且可根据需要被触发多次。对于在任何硬件或软件运行时变化发生时自动启用和自动调适每一个受影响的应用而言,这种方案可能是有用的。
107.实施例适用于与所有类型的半导体集成电路(“ic”)芯片一起使用。这些ic芯片的示例包括但不限于处理器、控制器、芯片组组件、可编程逻辑阵列(programmable logic array,pla)、存储器芯片、网络芯片,片上系统(systems on chip,soc)、ssd/nand控制器asic,等等。此外,在一些附图中,用线条来表示信号导线。某些可能是不同的,以表明更多的构成信号路径,具有数字标注,以表明构成信号路径的数目,和/或在一端或多端具有箭头,以表明主要信息流方向。然而,这不应当被以限制方式来解释。更确切地说,可以联系一个或多个示范性实施例使用这种添加的细节来促进对电路的更容易理解。任何表示的信号线,无论是否具有附加信息,都可实际上包括一个或多个信号,这一个或多个信号可在多个方向上行进并且可利用任何适当类型的信号方案来实现,例如用差分对实现的数字或模拟线路、光纤线路、和/或单端线路。
108.可能给出了示例大小/型号/值/范围,但实施例不限于此。随着制造技术(例如,光
刻术)随着时间流逝而成熟,预期能够制造具有更小尺寸的器件。此外,为了图示和论述的简单,并且为了不模糊实施例的某些方面,在附图内可能示出或不示出到ic芯片和其他组件的公知电源/接地连接。另外,可能以框图形式示出布置以避免模糊实施例,并且同时也考虑到了如下事实:关于这种框图布置的实现的具体细节是高度依赖于在其内实现实施例的平台的,即,这种具体细节应当完全在本领域技术人员的视野内。在阐述具体细节(例如,电路)以便描述示例实施例的情况下,本领域技术人员应当清楚,没有这些具体细节,或者利用这些具体细节的变体,也可实现实施例。说明书从而应当被认为是说明性的,而不是限制性的。
109.术语“耦合”在本文中可被用于指所涉组件之间的任何类型的关系,无论是直接的还是间接的,并且可应用到电的、机械的、液体的、光的、电磁的、机电的或者其他连接。此外,除非另外指出,否则术语“第一”、“第二”等等在本文中可能仅仅是为了便于讨论,而不带有特定的时间或先后意义。
110.就在本技术中和权利要求中使用的而言,由术语
“……
中的一个或多个”联接的项目的列表可意指所列出的术语的任何组合。例如,短语“a、b或c中的一个或多个”可意指a、b、c;a和b;a和c;b和c;或者a、b和c。
111.本领域技术人员将从前面的描述中理解:可以以多种形式实现实施例的宽泛技术。因此,尽管已经结合其特定示例描述了实施例,但实施例的真实范围不应限制于此,因为在本领域技术人员研究了附图、说明书和所附权利要求之后,其他修改将变得显而易见。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献