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

基于机器学习(ML)模型的编译器的制作方法

2023-08-05 15:06:40 来源:中国专利 TAG:

基于机器学习(ml)模型的编译器


背景技术:

1.计算机程序员创建源代码(例如,人类可读指令)以在计算设备上执行动作(例如,将两个数字矩阵相乘,以升序或降序对数据进行排序,在图像中标记人物,识别面部等)。源代码然后被编译成包含机器指令(例如,可执行代码)的二进制文件,该机器指令在本地硬件(例如,计算设备)上被执行或传输以在分布式硬件上运行。源代码也可以在硬件上执行时被调试。
2.实际上,被编译成可执行代码的源代码可以使用不同的编程语言(例如,c、fortran、python、c 、java、scala等)来实现,并且在不同种类的硬件(例如,cpu、gpu、fpga等)上执行。需要成千上万的工时和计算机编程、交叉编译、代码优化和代码移植的多层次专业知识来针对不同的计算环境和设备手动启用可执行代码,从而导致低效率和延迟。
3.编译器是将以特定编程语言编写的源代码转换成机器可执行文件的可执行程序。现代编译器是对编程语言的语法、源代码内的所有变量和依赖进行系统地分析并生成硬件指令以在特定的计算设备上执行源代码的那些动作的大量逻辑整理。编译器是复杂的机器可执行体,为了针对计算设备生成这些可执行文件,需要做大量的工作,并且通常被限于针对单一编程语言进行编译。
附图说明
4.参考以下附图详细地描述根据一个或多个各种实施例的本公开。提供附图只是出于说明的目的,并且仅仅描述典型或示例实施例。
5.图1图示了根据本公开的一些示例的用于实现基于ml模型的编译器的计算设备。
6.图2图示了标准编译器、本地编译器或本机编译器。
7.图3-图6图示了根据本公开的一些示例的用于实现基于ml模型的编译器的计算设备。
8.图7图示了根据本公开的一些示例的针对不同计算设备对源代码进行交叉编译。
9.图8图示了根据本公开的一些示例的针对不同计算设备对源代码进行交叉编译。
10.图9图示了根据本公开的一些示例的用于训练基于ml模型的编译器的过程。
11.图10图示了根据本公开的一些示例的用于使源语言令牌化并将其嵌入到目标语言的过程。
12.图11图示了根据本公开的一些示例的用于使源代码令牌化并嵌入以用于编译的过程。
13.图12是可以用于实现本公开中所描述的实施例的各种特征的示例计算组件。
14.图13是可以用于实现本公开中所描述的实施例的各种特征的示例计算组件。
15.图14描绘其中可以实现本文中所描述的各种实施例的示例计算机系统的框图。
16.附图不是详尽无遗的,并且不将本公开限制为所公开的精确形式。
具体实施方式
17.如本文中所描述的,在计算机设备上实现的标准编译器、本机编译器或本地编译器(在整个过程中可互换使用)是将以特定编程语言编写的源代码转换成机器可执行文件的可执行程序。本地编译器可以创建可执行代码,以便在相同的本地计算设备或另一远程计算设备上运行。好的编译器不仅会生成可以正确执行代码的可执行文件,而且还会针对运行代码的相应硬件,尝试以最短的时间高效地执行源代码。
18.本文中所描述的实施例实现基于机器学习(ml)模型的编译器来改进或取代本地编译器。例如,不是向本地编译器提供源代码以生成包含机器可执行代码的可执行文件,而是使用经训练的ml模型来执行本地编译器的操作并对其进行改进。基于ml模型的编译器可以被训练为作为本地编译器操作,也可以被配置为作为交叉编译器运行,该交叉编译器将源代码或经编译的可执行代码转换为以不同编程语言编写的源代码或被配置为在不同计算机上执行的可执行代码。
19.基于ml模型的编译器可以被训练为代替本地编译器运行。例如,基于ml模型的编译器可以将第一语言的源代码转换为第二语言的源代码,将源代码转换成经编译的可执行代码(反之亦然,将经编译的可执行代码转换回源代码),其中可执行代码在第一设备或第二设备上运行,将针对第一设备的经编译的可执行代码转换成针对第二设备的经编译的可执行代码,或者将经编译的可执行代码转换为在第一设备或第二设备上运行。
20.为了创建基于ml模型的编译器,可以使用不同的过程来训练基于ml模型的编译器以执行本地编译器的动作。例如,基于ml模型的编译器可以使用较大的样本源代码集合来训练,以便学习将源代码转换成对应的可执行文件(例如,而不是编译它)。基于ml模型的编译器可以使用第一种数字格式(例如,二进制、十六进制、八进制或其他数字格式)的可执行代码进行训练,该第一种数字格式可以转换成不同的数字格式。这将产生较大的文本对集合,包括作为源代码的输入文本和作为数字格式的对应的可执行文件的输出文本。有了较大的这些文本对集合,基于ml模型的编译器可以被训练来从给定的输入文本生成输出文本(例如,像从法语翻译为西班牙语)。
21.为了开始训练基于ml模型的编译器,可以提供简化的源代码来帮助在一些初始特征上训练ml模型,就像经典的“hello world”代码。随着ml模型变得“更聪明”(例如,通过学习与训练过程相对应的模式和权重),训练过程可以添加更多更长或更复杂的特征。例如,训练过程的第二阶段可以将文本串指派给变量,并且将该变量的内容打印到专用于产生输出的计算设备的显示器上,而不是将文本串直接打印到计算设备的终端上(例如,printf(“hello world\n”)vs.char var[12]=“hello world”;printf(“%s\n”,var))。
[0022]
训练过程的后期迭代可能会增加源代码中更多的复杂性,如开源代码中所发现的各种编程语言特征或其它示例。例如,编程语言特征可以包括注释行、换行符、赋值语句、声明、算法循环、case语句、if/then/else语句、以及其他多迭代指令。可以添加各种编程语言特征,直到标准编译器的所有特征(例如,计算设备的本机或本地编译器)在基于ml模型的编译器的训练代码样本中被表示。每个样本源代码指令可以具有表示可执行代码的对应的数字格式。
[0023]
一旦使用各种编程语言特征训练了基于ml模型的编译器,ml模型可以针对执行速度进行优化。例如,源代码文本可以提供给来自不同来源(例如,gnu
或)的其他预定的本机、本地编译器,以生成输入和输出的文本对。这些不同的编译器中的每个编译器可以生成不同的可执行文件,这些可执行文件源自与每个硬件设备相对应的不同指令集架构(isa)。较大的文本对集合可以提供给基于ml模型的编译器用于额外的训练。一旦完成,ml模型可以执行使用各种本机或本地编译器优化的编译器的功能,并且还可以找到当前在通过训练过程学习的任何本机或本地编译器中不存在的优化。
[0024]
存在各种技术优势,包括生成基于ml模型的编译器,以(1)充当源代码翻译器,其可将源代码从第一语言移植到第二语言,(2)提供性能即服务(例如,无需更改源代码),其中ml模型生成的可执行文件可以在任何计算设备类型上运行(例如,根据最优性能或可用性选择),(3)推荐性能优化的源代码和可执行代码,以及(4)提供将机器数字格式反编译回源代码的方法。
[0025]
图1图示了根据本公开的一些示例,用于实现基于ml模型的编译器的计算设备。在计算设备100中,提供了处理器102、存储器104和计算机可读介质110。
[0026]
处理器102可以是一个或多个中央处理单元(cpu)、基于半导体的微处理器和/或适用于检索和执行被存储在计算机可读介质110中的指令的其他硬件设备。处理器102可以获取、解码和执行指令,以控制用于创建和实现基于ml模型的编译器的过程或操作。作为检索和执行指令的备选或补充,处理器102可以包括一个或多个电子电路,其包括用于执行一个或多个指令的功能的电子组件,诸如图形处理器单元(gpu)、现场可编程门阵列(fpga)、专用集成电路(asic)或其他电子电路。
[0027]
存储器104可以包括随机存取存储器(ram)、高速缓存和/或其他动态存储设备,用于存储信息和要由处理器102执行的指令。存储器104还可以用于在执行要由处理器102执行的指令期间存储临时变量或其他中间信息。当这些指令存储在处理器102可访问的计算机可读介质110中时,使得计算设备100成为专用机器,该专用机器被定制为执行指令中所指定的操作。
[0028]
存储器104可以包括只读存储器(rom)或其他静态存储设备,用于存储针对处理器102的静态信息和指令。存储器104可以包括磁盘、光盘、固态盘(ssd)、快速非易失性存储器(nvme)或usb拇指驱动器(闪存驱动器)等,用于存储信息和指令。在一些示例中,信息和指令可以存储在多个数据存储中,包括源代码语言数据存储库130、令牌化代码数据存储库132和硬件设备数据存储库134。
[0029]
计算机可读介质110可以是包含或存储可执行指令的任何电子、磁性、光学或其他物理存储设备。计算机可读介质110可以是例如随机存取存储器(ram)、非易失性ram(nvram)、电可擦除可编程只读存储器(eeprom)、存储设备、光盘等。在一些实施例中,计算机可读介质110可以是非暂态存储介质,其中术语“非暂态”不涵盖暂态传播信号。如下面详细地描述的,计算机可读介质110可以编码有用多个模块、电路和引擎(包括可执行模块112、源代码语言引擎114、令牌化电路116、向量化电路118、机器学习训练引擎120、机器学习产生引擎122、硬件模块124和优化模块126)实现的可执行指令。
[0030]
可执行模块112可以包括第一编译器(例如,计算设备100的本地编译器),其接收由操作计算设备100的计算机程序员生成的源代码,对其进行编译,并且构建将在与计算设备100对应的硬件上运行的可执行文件。在该示例中,源代码和可执行代码可以是自包含的和/或在计算设备100处是本机的,而不涉及具有被调谐到特定编程语言或硬件的本地编译
器的本地计算机。
[0031]
可执行模块112还可以实现交叉编译器,针对本地设备或远程设备(如第二计算设备)生成可执行文件。例如,可执行模块112可以从本地计算机接收源代码。本地计算机可以包括编译器(例如,本地计算机的本地编译器)并针对第二计算机生成可执行文件。编译器可以接收由计算机程序员生成的源代码,并且在本地对其进行编译,以生成将在与本地计算机相对应的硬件上运行的第一可执行文件。第一可执行文件可以传输到计算设备100以用于分析和处理,使得可执行模块112接收与计算机程序员的本地计算机的硬件相对应的第一可执行文件。
[0032]
在一些示例中,可执行模块112可以接收环境变量(例如,程序运行时操作期间传输的动态字符串),该环境变量标识本地机器或远程机器以接收数字格式的文件。例如,可执行模块112可以使用交叉编译器特征来生成将在与远程计算机相对应的硬件上运行的可执行文件。在一些示例中,可执行模块112可以使用类似的过程,使用交叉编译器特征将将在与本地计算机相对应的硬件上运行的第一可执行文件转换回第二计算设备可读的源代码(而不是可执行文件)(例如,以原始编程语言或与用于编译可执行文件的本机语言不同的编程语言)。
[0033]
可执行模块112还可以实现交叉编译器,以接收第二计算设备可读的源代码。例如,可执行模块112可以从本地计算机接收第一编程语言的源代码。本地计算机可以包括第二编译器(例如,本地计算机的本地编译器),其也可以接收由计算机程序员生成的源代码,并且可以在本地将其编译成将在本地计算机上运行的可执行文件。源代码(代替可执行代码或除了可执行代码之外)可以传输到计算设备100用于分析和处理,使得可执行模块112从本地计算机接收与第一编程语言相对应的源代码,并且使用交叉编译器特征将源代码从第一编程语言转换成第二编程语言的源代码。第二编程语言的源代码可以提供给能够编译该编程语言的源代码的不同编译器(例如,生成第二可执行文件或检查和维护第二编程语言的源代码)。如此,本地计算设备被配置为将源代码编译成包括可执行代码的可执行文件,该可执行代码可以在本地计算设备本地地实现机器可读指令,而不必在其他计算设备实现。第二编译器可以针对本地计算机生成可执行文件。
[0034]
在一些示例中,可执行文件可以与可由本地计算设备读取的数字指令集相对应,并且指示本地计算设备执行特定操作。当被接收时,可执行模块112可以标识与该可执行文件相关联的信息。该信息可以包括本地计算设备的硬件类型,其可以作为输入与可执行文件一起提供,以训练基于ml模型的编译器。
[0035]
源代码语言引擎114可以接收与用于训练基于ml模型的编译器的一个或多个可执行文件相对应的源代码,并且可存储在源代码语言数据存储库130中。源代码可以包括一些初始特征的简化源代码,如经典的“hello world”代码。例如,c语言中的“hello world”代码可以包括:
[0036][0037]
该程序可以在本地计算设备终端上打印"hello world",包括新行字符(例如,与\n相对应)。
[0038]
"hello world"代码也可以以附加的计算机语言被接收,并且在本地计算设备终端上打印类似的文本字符串。例如,在python语言中,源代码可以包括:
[0039]
print("hello world")
[0040]
在另一示例中,在c 语言中,源代码可以包括:
[0041][0042]
在另一示例中,在fortran语言中,源代码可以包括:
[0043]
program hello
[0044]
print*,"hello world"
[0045]
end program hello
[0046]
其它源代码示例可以通过源代码语言引擎114接收并存储在源代码语言数据存储库130中。此处提供的编程语言和示例源代码仅用于说明目的,不应仅限于公开。
[0047]
源代码语言引擎114可以在计算设备100上本地生成源代码。例如,源代码语言引擎114可以生成脚本集,该脚本集可以随机添加或减去源代码语言特征以用于训练目的。作为说明性的示例,脚本可以创建样本代码集,这些代码仅改变到显示器或终端的打印输出。这可以帮助创建多个不同的源代码集,以进一步训练基于ml模型的编译器。可以通过编译源代码(例如,使用本地编译器)来生成输出的可执行代码。可执行代码可以被转换成数字格式,以生成对经训练的ml模型的输入集(例如,输入是源代码,输出是与可执行代码相对应的数字格式)。该过程可以帮助构建较大的训练数据集,而不依赖于不同的计算设备来发送用于训练的源代码示例。
[0048]
源代码语言引擎114还可以接收(或者,生成)比“hello world”代码更长或更复杂的附加源代码示例。例如,附加源代码可以包括将一个或多个字符赋给变量,并且将输出打印到专用于产生输出的计算设备显示器,而不是用本地设备终端直接打印一个或多个字符。在一些示例中,附加源代码示例可能会增加源代码的复杂性,如每种编程语言中更复杂
的特征。例如,这些特征可以包括注释行、换行符、赋值语句、声明、算法循环、case语句、if/then/else语句、回车、直接或通过字符变量打印字符串以及其他多迭代指令。
[0049]
可将编程语言特征添加到训练过程中(例如,由ml训练引擎120实现),直到标准编译器的所有特征在训练代码样本中表现出来。每个样本源代码指令可以具有表示可执行代码的对应的数字格式(例如,十六进制)。一旦第二阶段完成,基于ml模型的编译器应该能够编译多种源代码语言的各种“hello world”程序,并且针对多种类型的硬件生成可执行文件。
[0050]
在一些示例中,由源代码语言引擎114执行的源代码生成可从单个标准编译器开始(例如,使训练过程资源消耗更少且更快),但是可扩展至使用将一种语言的源代码转换成数字格式的可执行代码的所有可能的可用标准编译器。以这种方式,基于ml模型的编译器可以公开给生成可执行文件的多种方法。
[0051]
源代码语言引擎114还可以被配置为检测或标识源代码中的错误。例如,当指令语句中缺少字符时(如“;”或“}”),源代码语言引擎114可以标识该字符缺失,并且如同标准编译器一样,将无法在不生成错误的情况下生成可执行文件。基于ml模型的编译器可以被训练来标识源代码中的这些类型的错误,并且确定经编译的可执行代码不会被生成(例如,在ml训练引擎120处),而是会生成错误代码。
[0052]
令牌化电路116可以被配置为将源代码或可执行文件分解或解码成与单个指令或字符集相对应的令牌(例如,在训练过程中)。在一些示例中,令牌化电路116可以实现机器实现的过程、算法或设计流程。令牌化代码可以是文本串、向量数据阵列或以对应的语言表示计算机实现的指令的其他数据结构格式。每个令牌化代码、预期输出(例如,针对该特定源代码指令的可执行代码)及其对应的语言可以存储在令牌化代码数据存储库132中。在一些示例中,令牌化代码可以与各种数字格式相对应。
[0053]
令牌化代码可以与基于ml模型的编译器的各种转换格式相对应。例如,当基于ml模型的编译器可以被配置为将源代码从第一语言或格式转换成第二语言或格式时,令牌可以与第一语言的字符的串或字符的向量、第二语言的字符的等价串或串或字符的向量以及这两种语言的标识相对应。在另一示例中,当基于ml模型的编译器可以被配置为转换源代码以在第一设备或第二设备上运行时,令牌可以与源代码中的字符的串或字符的向量、作为将在第一设备上运行的指令的数字格式的经编译的可执行代码、以及作为将在第二设备上运行的指令的经编译的可执行代码相对应。在另一示例中,当基于ml模型的编译器可以被配置为将源代码转换成经编译的可执行代码时(反之亦然,其中基于ml模型的编译器将经编译的可执行代码转换回源代码),令牌可以与源代码中的字符的串或字符的向量、作为在第一设备上运行的指令的数字格式的经编译的可执行代码、以及源代码和执行对应的经编译的代码的设备的标识相对应。在另一示例中,当基于ml模型的编译器可以被配置为转换经编译的可执行代码以在第一设备或第二设备上运行时,令牌可以与作为在第一设备上运行的指令的数字格式的经编译的可执行代码中的字符的串或字符的向量、以及作为在第二设备上运行的指令的经编译的可执行代码中的字符的串或字符的向量相对应。
[0054]
令牌化电路116可以被配置为使用状态向量将第一语言的令牌转换成第二语言的令牌。例如,每个令牌可以与用于执行动作的指令集架构(例如,与标签、逻辑或输出相对应)相对应。令牌化电路116可以搜索不同语言中的对应的动作,并且可以标识可以在不同
语言中等同(例如,在执行相同动作时)的对应的令牌。
[0055]
令牌化电路116还可以被配置为将令牌化代码构建或编码为编码器。编码器的输出可以与令牌化代码的序列向量相对应,以执行动作(例如,运行程序、读取完整文件或由机器可读指令执行的其他基于计算机的动作所需的语言中的逻辑)。在一些示例中,作为编码器的一部分,令牌化电路116可以针对状态向量和解码器创建令牌。为了从第一语言转换到第二语言,令牌化电路116可以将第一语言编码为一个或多个令牌,将令牌传递给状态向量,然后解码第二语言的令牌。图10-图11提供了令牌化的说明性示例。
[0056]
向量化电路118可以被配置为生成令牌化代码的序列向量。在一些示例中,向量化电路118可以实现状态向量或思维向量,以确定源代码或执行代码的状况或状态(例如,表示每个项如何与其他项相关的数字列)。例如,每个序列向量可以描述将计算设备配置为执行对应的动作的特定逻辑。
[0057]
如本文中所描述的,机器学习(ml)训练引擎120可以在文本对(例如,源代码、可执行代码或文件、翻译的数字文件和其他格式的文本对)上训练基于ml模型的编译器。
[0058]
机器学习(ml)训练引擎120可继续并增加训练过程的复杂性(例如,除了“hello world”代码之外)。例如,ml训练引擎120可以系统地添加编译器特征。附加的编译器特征可以以随机的方式添加到样本输入代码中。可以定期训练和检查基于ml模型的编译器,以确保输入源代码和输出之间的准确性。在另一示例中,ml训练引擎120可以添加开源代码来标识新的源代码和训练示例。
[0059]
机器学习(ml)训练引擎120可确定与基于ml模型的编译器的输出相关的置信度值。例如,置信度值可以标识将源代码与期望源代码执行的动作相匹配的正确性。置信度值可以标识输入匹配输出的可能性(例如,基于ml模型的编译器得到正确答案)。
[0060]
一旦基于ml模型的编译器在生成可执行代码时具有非常高的置信度(例如,超过阈值的置信度值),可根据一个或多个优化参数优化ml模型。例如,优化参数可以包括提高执行速度。样本代码可以被编译和执行,并且执行时间可以被记录并用于优化。
[0061]
在另一示例中,ml训练引擎120可推荐性能优化的源代码和可执行代码。在该示例中,特定的计算设备可以被标识为经训练的ml模型的输出,其中该特定的计算设备与对于源代码或经编译的代码最高效的计算设备相对应。这样,可以优化经编译的代码的执行。
[0062]
机器学习(ml)产生引擎122可以被训练为将输入转换成与第一编程语言相对应的文本对(例如,源代码和对应的数字格式)以进行输出。ml产生引擎122可以将计算机源代码从第一编程语言编译成与第二编程语言相对应的计算机源代码(例如,将c代码转换成fortran代码或将tensorflow代码翻译成pytorch代码)或者将源代码转换成数字格式(如整个公开中所讨论的)。
[0063]
在一些示例中,ml产生引擎122可以接收文本对作为令牌化代码的序列向量。ml产生引擎122可以被训练来生成针对设备x或设备y创建第二可执行文件的输出。换句话说,ml产生引擎122可以创建与源代码相对应的可执行文件,该可执行文件一旦被转换成数字格式,就在设备x或设备y中执行相同的操作。
[0064]
ml产生引擎122还可转换可执行文件,以在不同的计算设备上运行(例如,cpu、cpu、gpu、gpu、tpu和其他处理器)。
[0065]
ml产生引擎122可以被配置为使用线性或非线性函数执行监督的ml模型。例如,经
训练的ml模型可以包括决策树,该决策树接受与源代码或可执行代码相关联的一个或多个输入特征,以提供将输入与输出(例如,不同语言的源代码、用于不同设备的可执行代码以及本文中所描述的其他转换过程)相关联的置信度得分。
[0066]
在一些示例中,当使用非线性ml模型时,与源代码或可执行代码的部分相对应的令牌的权重可以变化。在一些示例中,权重可以通过基于ml模型的编译器的迭代训练过程来决定。
[0067]
在一些示例中,基于ml模型的编译器可以包括神经网络,该神经网络通过使用多层处理元件来测量因变量(例如,由设备实现的逻辑或动作)和自变量(例如,令牌)之间的关系,该多层处理元件确定自变量和因变量之间的非线性关系和相互作用。
[0068]
在一些示例中,基于ml模型的编译器可以包括深度学习神经网络,其由输入层和输出层之间的一层以上的处理元件组成,或者卷积神经网络,其中处理元件的连续层包含与前一层连接的特定层级模式。
[0069]
硬件模块124可以确定一个或多个可以执行经编译的可执行代码的计算设备。所标识的计算设备可以基于计算设备的特性。计算设备的标识、设备的指令集架构(isa)以及其他信息可以存储在硬件设备数据存储库134中。
[0070]
在一些示例中,硬件模块124可以标识特定的计算设备,该特定的计算设备经过优化以沿网络路径将数据从第一计算设备传递到第二计算设备。硬件模块124可以基于特性标识该特定的计算设备,并且将经编译的可执行代码转换为在该特定的计算设备上运行。在另一示例中,硬件模块124可以自动地将工作负载分布在计算设备的最可用的高性能处理器或加速器组件上(例如,支持性能即服务的业务模型)。
[0071]
硬件模块124还可以确定一个或多个计算设备的临时特性,这些计算设备可以被候选地执行经编译的可执行代码。计算设备的临时特性还可以存储在硬件设备数据存储库134中,以随时间分析数据。例如,在第一时间段,第一计算设备可以以百分之五十的容量执行指令,而第二计算设备可以以百分之九十的容量执行指令。硬件模块124可以转换要由具有运行附加进程的计算容量的第一计算设备执行的源代码。第一计算设备可能未得到充分利用或等待指令执行,并且在被标识后,可以执行指令,使其不再未得到充分利用。
[0072]
在一些示例中,计算设备100可以被实现为作为服务运行,其中调用计算设备100的实体可以在生产环境中部署有数百个模型。模型的第一部分可以在第一计算设备上比在第二设备上更有效地运行(例如,20%的模型在第一计算架构上工作良好),并且模型的第二部分可以在第二计算设备上比第一设备更有效地运行(例如,20%的模型在第二计算架构上工作良好)。计算机程序员或软件开发者可以用第一语言编写初始源代码,并且计算设备100可以转换源代码或经编译的可执行代码,以在针对速度、效率、可用性等优化的任何计算设备上执行。
[0073]
优化模块126可以接收执行经编译的可执行代码的各种计算设备的性能数据。执行时间、处理速度或其他度量可以与经编译的代码相关联,并且跨各种设备进行比较。性能数据可用于训练基于ml模型的编译器来标识应该接收指令以执行特定进程的硬件计算设备,以便优化执行。
[0074]
在一些示例中,优化模块126可组合或聚合令牌,以生成简洁的源代码或可执行代码。例如,第一英语到法语翻译器可以将英语短语从10个单词转换成20个法语单词,而第二
英语到法语翻译器可以将英语短语从10个单词转换成8个法语单词。这两个法语短语可以传达相似的英语句子,然而第二翻译器可以更简洁地转换句子(例如,更少的单词、更少的字符、更简单的项或其他优化目标)。类似地,基于ml模型的编译器可以将执行可执行进程(例如,打开、处理和在数据存储库中存储小说)的令牌组合或聚集成比标准编译器更少的步骤(或者,其他优化参数),以便优化执行。
[0075]
图2图示了一组传统的编译器。在示例210中,可以使用第一编译器来编译和优化第一源代码语言(c或c ),然后将其构建成在具有一个或多个中央处理单元(cpu)的一个或多个计算设备上运行的可执行代码。在示例220中,可以使用第二编译器来编译和优化使用(opencl)框架的第一源代码语言,然后将其构建成在具有一个或多个加速器的一个或多个计算设备上运行的可执行代码。在示例230中,可以使用第三编译器来编译和优化使用(cuda或hip)工具包的第一源代码语言,然后将其构建成在具有一个或多个图形处理单元(gpu)的一个或多个计算设备上运行的可执行代码。在示例240中,可以使用第四编译器来合成/编译和优化第一源代码语言(vhdl),然后将其构建成在具有一个或多个现场可编程门阵列(fpga)的一个或多个计算设备上运行的可执行代码。
[0076]
每个所示示例包括不同的编译器或其他计算机程序,其经调谐以接收源代码编程语言,并且将其改变成在特定的设备上运行的另一种格式(例如,构建为在特定的计算设备上运行的可执行代码)。编译器可以将以一种编程语言(例如,源语言)编写的计算机代码翻译成另一种语言(例如,汇编语言、目标代码、机器代码或其他目标语言)来创建可执行程序。
[0077]
图3-图6图示了根据本发明的一些示例,用于实现基于ml模型的编译器的计算设备。在这些示例中,初始代码(例如,源代码、机器可执行代码或其他代码)可以通过生成嵌入令牌的编码过程。嵌入令牌可以传输到状态向量,状态向量将它们转换成其他架构或格式,并且将它们传输到解码过程。解码过程可以将数字代码的令牌或序列向量构建成各种定义的格式(例如,不同的源代码、机器可执行代码或其他代码)。
[0078]
图3图示了根据本公开的一些示例,实现基于ml模型的编译器的计算设备。图3的计算设备300可以实现图1中所示的计算设备100图示的几个组件,为了简化说明,这些组件已被移除。在该示例中,计算设备300可以接收任何源代码编程语言,并且使用基于ml模型的编译器将其从第一格式改变为被配置成在多个设备上运行的第二格式(例如,将源代码a改变为针对设备x或设备y的可执行文件)。
[0079]
图4图示了根据本公开的一些示例,实现基于ml模型的编译器的计算设备。图4的计算设备400可以实现图1中所示的计算设备100图示的几个组件,为了简化说明,这些组件已被移除。在该示例中,计算设备400可以接收任何源代码编程语言,并且使用基于ml模型的编译器将其从第一格式改变为与任何其他源代码编程语言相对应的第二格式(例如,将源代码a改变成源代码b或源代码c)。
[0080]
图5图示了根据本公开的一些示例,实现基于ml模型的编译器的计算设备。图5的计算设备500可以实现图1中所示的计算设备100图示的几个组件,为了简化说明,这些组件已被移除。在该示例中,计算设备500可以接收可执行代码,并且使用基于ml模型的编译器将其从第一格式改变为与任何源代码编程语言相对应的第二格式(例如,从针对设备x可执行改变成源代码a或源代码b)。
[0081]
图6图示了根据本公开的一些示例,实现基于ml模型的编译器的计算设备。图6的计算设备600可以实现图1中所示的计算设备100图示的几个组件,为了简化说明,这些组件已被移除。在该示例中,计算设备600可以接收被配置成在第一设备上运行的可执行代码,并且使用基于ml模型的编译器将其从第一格式改变成被配置成在不同设备上运行的第二格式(例如,针对设备x的可执行文件变成针对设备y的可执行文件)。
[0082]
图7图示了根据本公开的一些示例,针对不同计算设备对源代码进行交叉编译。如整个申请中所示,源代码和可执行代码可以在图1中所示的计算设备100处被本地或本机编译,或者可以在第一计算设备处被本地或本机编译并被传输到计算设备100以转换成另一种格式(例如,用于对该代码进行交叉编译)。
[0083]
在一些示例中,第一硬件设备700可以与图1中所示的计算设备100相对应。第一硬件设备700可以生成源代码并将该源代码转换成能够在第二设备上运行的可执行文件,如第二硬件设备730所示。如此,第一硬件设备700可以通过指示位于第一硬件设备700处的基于ml的编译器可执行文件将在第二硬件设备730上运行(例如,与特定指令集架构(isa)或其他计算组件相对应)来实现交叉编译。第一硬件设备700处的基于ml的编译器可以在第一硬件上完全生成数字格式的可执行文件,但是无法在第一硬件设备700上运行该可执行文件。
[0084]
一旦生成可执行文件,就可以传输该文件。例如,第一硬件设备700可以将数字格式的可执行文件直接传输到第二硬件设备730,如图5和图6中所示。在其他示例中,第一硬件设备700可以通过像计算设备720这样的中介设备来传输数字格式的可执行文件,以运行数字格式的可执行文件以在第二硬件设备730处运行。
[0085]
当实现中介设备时,第一硬件设备700可以实现本地编译器(用于从源代码生成标准可执行文件),并且中介设备实现基于ml的编译器(用于将第一硬件设备700产生的源代码或可执行文件转换成不同格式,如本文中所描述的)。例如,图1中所示的计算设备100可以与计算设备720相对应,并且本地计算设备(例如,由计算机程序员或软件开发者操作的)可以与第一硬件设备700和第二硬件设备730相对应。在该示例中,计算设备720不生成原始源代码文件或运行可执行文件,但是可以分析源代码文件(由第一硬件设备700生成)以生成用于不同设备(第二硬件设备730)的可执行文件。在一些示例中,第一硬件设备700和第二硬件设备730可以实现标准或本地编译器,而计算设备720可以实现经训练的基于ml模型的编译器。但是,各种实现是可能的,并且这图示了一个示例。
[0086]
在框704处,第一硬件设备700可以生成第一源代码语言的源代码。
[0087]
在框706处,第一硬件设备700可以使用第一编译器编译源代码,以生成用于第二硬件设备730的可执行文件。第一编译器可以与被配置成编译源代码的标准或本地编译器相对应。
[0088]
在框708处,第一硬件设备700可将第一可执行文件传输到计算设备720。
[0089]
在框722处,计算设备720可以使用第二编译器处理第一可执行文件,其中第二编译器与经训练的基于ml模型的编译器相对应。在一些示例中,可以使用经训练的基于ml模型的编译器来处理第一可执行文件,以便将第一可执行文件转换成第二可执行文件。第二可执行文件可以从经训练的基于ml模型的编译器输出。
[0090]
在框724处,计算设备720可将第二可执行文件传输到第二硬件设备730。
[0091]
当第一硬件设备700生成针对第二硬件设备730的可执行文件并将该可执行文件直接传输到第二硬件设备730时,框722和724可以是可选的。
[0092]
在框732处,第二硬件设备730可以执行第二可执行文件。
[0093]
图8图示了根据本发明的一些示例,针对不同计算设备对源代码进行交叉编译。例如,图1中所示的计算设备100可以与计算设备820相对应,并且本地计算设备(例如,由计算机程序员或软件开发者操作的)可以与第一计算设备810、第二计算设备830a和附加计算设备830b相对应。在一些示例中,这些本地计算设备可以实现标准编译器,而计算设备820实现经训练的基于ml模型的编译器。
[0094]
可以在图8中所实现与图7中所实现的过程类似的过程,然而计算设备820的输出可以生成可执行文件,该可执行文件被配置为在操作不同于第一计算设备810的指令集架构(isa)的计算设备上运行。
[0095]
图9图示了根据本公开的一些示例,用于训练基于ml模型的编译器的过程。例如,图1中所示的计算设备100可以接收源代码或经编译的可执行代码,以帮助训练基于ml模型的编译器。
[0096]
在框910处,该过程可以创建源代码和经编译的可执行代码的合成示例。例如,该过程可以运行脚本来生成合成示例,或者可以启动网络爬行器来从包括开源数据在内的各种源收集源代码示例。可以使用与源代码的编程语言相关联的标准编译器来编译源代码,以生成经编译的可执行代码。在其他示例中,该过程可以接收源代码示例和经编译的可执行文件。
[0097]
在框920处,作为训练过程的一部分,该过程可使源代码和经编译的代码令牌化为一个或多个令牌。令牌可以存储在如令牌化代码数据存储库132之类的令牌数据存储中。
[0098]
在框930处,该过程可以创建嵌入。例如,嵌入过程可以在低维空间中转换高维向量,以便简化机器学习过程。通过在嵌入空间中将语义相似的输入或预测的输出紧密地放置在一起,嵌入可以包括与输入(例如,源代码或可执行代码)相对应的语言的一些语义(例如,句子“你多大了?”以及“你的年龄是什么?”在语言转换示例中可以生成类似的输出,并且在编码示例中“x=a b c”可以与“x=b a c”相同)。在一些示例中,嵌入可以跨不同的ml模型被学习和重用(例如,第一语言的源代码到第二语言的源代码,第一设备上的源代码到第二设备上的可执行代码,等等)。
[0099]
在框940处,该过程可以创建数字(例如,二进制、十六进制或八进制)代码的序列向量。
[0100]
在框950处,该过程可以在编码器-解码器架构中训练ml模型。在一些示例中,模型可以与一个或多个机器学习模型相对应,包括生成性对抗网络(gan)模型。gan模型可以与特定类型的ml模型相对应,其中两个神经网络相互竞争以使它们的预测更加准确。其他类型的ml模型也是可用的,并且在此讨论,包括深度学习神经网络或卷积神经网络。
[0101]
在框960处,该过程可以训练用于代码翻译的神经机器翻译器架构网络。一旦ml模型被训练,基于ml模型的编译器就从训练过程中生成。
[0102]
图10图示了根据本发明的一些示例,使源语言令牌化并将其嵌入到目标语言的过程。在该说明性示例中,解码器1010可以接收被令牌化和嵌入的项的句子。嵌入的令牌可以传输到状态向量1020。状态向量1020可以将嵌入的令牌传输到编码器1030,以使用编码器
过程将它们转换成其他架构或格式,编码器过程可以将数字代码的令牌或序列向量构建成这些定义的格式(例如,英语到丹麦语)。
[0103]
图11图示了根据本发明的一些示例,用于使源代码令牌化并将其嵌入以用于编译的过程。在该说明性示例中,解码器1110可以接收一组被令牌化和嵌入的项。嵌入的令牌可以传输到状态向量1120。状态向量1120可以将嵌入的令牌传输到编码器1130,以使用编码器过程将它们转换成其他架构或格式,编码器过程可以将数字代码的令牌或序列向量构建成这些定义的格式(例如,源代码a到可执行代码x)。
[0104]
图12图示了根据各种实施例的可用于实现基于ml模型的编译器的示例计算组件。现在参考图12,计算组件1200可以是例如服务器计算机、控制器或能够处理数据的任何其他类似的计算组件。在图12的示例实现中,计算组件1200包括硬件处理器1202和机器可读存储介质1204。
[0105]
硬件处理器1202可以是一个或多个中央处理单元(cpu)、基于半导体的微处理器和/或适用于检索和执行被存储在机器可读存储介质1204中的指令的其他硬件设备。硬件处理器1202可以获取、解码和执行指令,诸如指令1206-1212,以控制用于实现基于ml模型的编译器的过程或操作。作为检索和执行指令的备选或补充,硬件处理器1202可以包括一个或多个电子电路,其包括用于执行一个或多个指令的功能的电子组件,诸如现场可编程门阵列(fpga)、专用集成电路(asic)或其他电子电路。
[0106]
机器可读存储介质,诸如机器可读存储介质1204,可以是包含或存储可执行指令的任何电子、磁性、光学或其他物理存储设备。因此,机器可读存储介质1204可以是例如随机存取存储器(ram)、非易失性ram(nvram)、电可擦除可编程只读存储器(eeprom)、存储设备、光盘等。在一些实施例中,机器可读存储介质1204可以是非暂态存储介质,其中术语“非暂态”不涵盖暂态传播信号。如下面详细地描述的,机器可读存储介质1204可以用可执行指令编码,例如指令1206-1212。
[0107]
硬件处理器1202可以执行指令1206,以接收从第一编程语言编译的第一可执行文件。
[0108]
硬件处理器1202可以执行指令1208,以使第一可执行文件令牌化。
[0109]
硬件处理器1202可以执行指令1210,以生成令牌化代码的序列向量。
[0110]
硬件处理器1202可以执行指令1212,以将令牌化代码的序列向量作为输入提供给经训练的ml模型编译器。
[0111]
硬件处理器1202可以执行指令1214,以向被配置为运行第二编程语言的程序的硬件设备提供第二可执行文件。
[0112]
图13图示了根据各个实施例的可用于实现基于ml模型的编译器的训练的示例计算组件。现在参考图13,计算组件1300可以是例如服务器计算机,控制器或能够处理数据的任何其它类似的计算组件。在图13的示例实现中,计算组件1300包括硬件处理器1302和机器可读存储介质1304。
[0113]
硬件处理器1302可以是一个或多个中央处理单元(cpu)、基于半导体的微处理器和/或适于检索和执行被存储在机器可读存储介质1304中的指令的其它硬件设备。硬件处理器1302可以提取、解码和执行诸如指令1306-1312的指令,以控制用于实现基于ml模型的编译器的过程或操作。作为检索和执行指令的备选或补充,硬件处理器1302可以包括一个
或多个电子电路,其包括用于执行一个或多个指令的功能的电子组件,诸如现场可编程门阵列(fpga)、专用集成电路(asic)或其它电子电路。
[0114]
诸如机器可读存储介质1304的机器可读存储介质可以是包含或存储可执行指令的任何电子、磁性、光学或其它物理存储设备。因此,机器可读存储介质1304可以是例如随机存取存储器(ram)、非易失性ram(nvram)、电可擦除可编程只读存储器(eeprom)、存储设备、光盘等。在一些实施例中,机器可读存储介质1304可以是非暂态存储介质,其中术语“非暂态”不涵盖暂态传播信号。如下面详细地描述的,机器可读存储介质1304可以用可执行指令编码,例如指令1306-1312。
[0115]
硬件处理器1302可以执行指令1306,以接收发布的开源数据。
[0116]
硬件处理器1302可执行指令1308,以使用标准编译器来编译发布的开源数据以生成可执行代码。
[0117]
硬件处理器1302可以执行指令1310,以向用于训练的ml模型提供源代码和可执行代码对,包括源代码和可执行代码。
[0118]
硬件处理器1302可以执行指令1312以确定经训练的ml模型。
[0119]
应当注意,这里使用的术语“优化”,“最优”等可用于表示使得或实现尽可能有效或完美的性能。然而,如阅读本文档的本领域普通技术人员将认识到的,无法总是实现完美。因此,这些术语还可以涵盖在给定情况下使得或实现尽可能好或有效或实用的性能,或者使得或实现比用其他设置或参数可以实现的性能更好的性能。
[0120]
图14图示其中可以实现本文中所描述的各种实施例的示例计算机系统1400的框图。计算机系统1400包括总线1402或用于传送信息的其它通信机制,与总线1402耦接的用于处理信息的一个或多个硬件处理器1404。(多个)硬件处理器1404可以是例如一个或多个通用微处理器。
[0121]
计算机系统1400还包括耦接到总线1402的主存储器1406,诸如随机存取存储器(ram)、高速缓存和/或其它动态存储设备,用于存储信息和将由处理器1404执行的指令。主存储器1406还可以用于在执行将由处理器1404执行的指令期间存储临时变量或其它中间信息。这样的指令,当存储在处理器1404可访问的存储介质中时,使计算机系统1400成为专用机器,该专用机器被定制以执行在指令中所指定的操作。
[0122]
计算机系统1400还包括耦接到总线1402的只读存储器(rom)1408或其它静态存储设备,用于存储针对处理器1404的静态信息和指令。诸如磁盘,光盘或usb拇指驱动器(闪存驱动器)等的存储设备1410被提供并耦接到总线1402,用于存储信息和指令。
[0123]
计算机系统1400可以经由总线1402耦接到显示器1412,诸如液晶显示器(lcd)(或者,触摸屏),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备1414耦接到总线1402,用于向处理器1404传送信息和命令选择。另一种类型的用户输入设备是光标控制装置1416,诸如鼠标,跟踪球或光标方向键,用于向处理器1404传送方向信息和命令选择,以及用于在控制显示器1412上的光标移动。在一些实施例中,与光标控制装置相同的方向信息和命令选择可以经由在没有光标的情况下接收触摸屏上的触摸来实现。
[0124]
计算系统1400可以包括实现图形用户界面(gui)的用户界面模块,gui可以作为由(多个)计算设备执行的可执行软件代码存储在大容量存储设备中。举例来说,这个和其它模块可以包括诸如软件组件、面向对象的软件组件、类组件和任务组件之类的组件、进程、
函数、属性、过程、子程序、程序代码段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、数组和变量。
[0125]
通常,本文中所使用的词语“组件”,“引擎”,“系统”,“数据库”,“数据存储库”等可以指硬件或固件中实现的逻辑,或者指软件指令的集合,可能具有入口和出口点,用编程语言编写,例如python,java,c或c 。软件组件可以被编译并链接到安装在动态链接库中的可执行程序中,或者可以用诸如basic,perl或python的解释编程语言编写。应当理解,软件组件可以从其它组件或从它们自身被调用,和/或可以响应于检测到的事件或中断而被调用。被配置用于在计算设备上执行的软件组件可以提供在计算机可读介质上,诸如光盘,数字视频盘,闪存驱动器,磁盘或任何其它有形介质,或者作为数字下载(并且可以最初以在执行之前需要安装、解压缩或解密的压缩或可安装格式来存储)。这种软件代码可以部分地或全部地存储在执行计算设备的存储器设备上,以供计算设备执行。软件指令可以嵌入固件中,诸如eprom。还应当理解,硬件组件可以包括连接的逻辑单元,诸如门和触发器,和/或可以包括可编程单元,诸如可编程门阵列或处理器。
[0126]
计算机系统1400可以使用定制的硬连线逻辑、一个或多个asic或fpga、固件和/或程序逻辑来实现本文中所描述的技术,该定制的硬连线逻辑、一个或多个asic或fpga、固件和/或程序逻辑与计算机系统相结合使得计算机系统1400成为专用机器或将计算机系统1400编程为专用机器。根据一个实施例,本文中的技术由计算机系统1400响应于(多个)处理器1404执行包含在主存储器1406中的一个或多个指令的一个或多个序列而执行。这些指令可以从诸如存储设备1410的另一存储介质读入主存储器1406。包含在主存储器1406中的指令序列的执行使得(多个)处理器1404执行本文中所描述的处理步骤。在备选实施例中,可以使用硬连线电路来代替软件指令或与软件指令相结合。
[0127]
本文中所使用的术语“非暂态介质”和类似术语是指存储使得机器以特定方式操作的数据和/或指令的任何介质。这种非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备1410。易失性介质包括动态存储器,诸如主存储器1406。非暂态介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、nvme驱动器、磁带或任何其他磁性数据存储介质、cd

rom、任何其他光学数据存储介质,具有孔图案的任何物理介质、ram、prom和eprom、flash-eprom,nvram,任何其他存储器芯片或盒,以及它们的联网版本。
[0128]
非暂态介质不同于传输介质,但是可以与传输介质结合使用。传输介质参与在非暂态介质之间传输信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线1402的导线。传输介质还可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的声波或光波。
[0129]
计算机系统1400还包括耦接到总线1402的通信接口1418。通信接口1418提供耦接到连接到一个或多个本地网络的一个或多个网络链路的双向数据通信。例如,通信接口1418可以是综合业务数字网(isdn)卡、电缆调制解调器、卫星调制解调器、或提供到对应的类型电话线的数据通信连接的调制解调器。作为另一示例,通信接口1418可以是局域网(lan)卡,以提供到兼容lan(或者,与wan通信的广域网(wan)组件)的数据通信连接。也可以实现无线链路。在任何这样的实现中,通信接口1418发送和接收携带表示各种类型的信息的数字数据流的电,电磁或光信号。
[0130]
网络链路通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路可以通过本地网络提供到主机计算机或到由因特网服务提供商(isp)操作的数据装备的连接。isp又通过现在通常称为“因特网”的全球分组数据通信网络提供数据通信服务。本地网络和因特网使用承载数字数据流的电,电磁或光信号。通过各种网络的信号和在网络链路上并通过通信接口1418的信号是传输介质的示例形式,所述信号携带去往和来自计算机系统1400的数字数据。
[0131]
计算机系统1400可以通过(多个)网络,(多个)网络链路和(多个)通信接口1418发送消息和接收数据,包括程序代码。在因特网示例中,服务器可以通过因特网、isp、本地网络和通信接口1418传输对应用程序的请求代码。
[0132]
接收到的代码可以在接收时由处理器1404执行,和/或存储在存储设备1410或其它非易失性存储中以供以后执行。
[0133]
前述各节中所述的各过程、方法和算法可以体现在由一个或多个计算机系统或包括计算机硬件的计算机处理器执行的代码组件中,并由其完全或部分自动化。该一个或多个计算机系统或计算机处理器还可以操作来支持在“云计算”环境中的相关操作的性能或作为“软件即服务”(saas)。这些过程和算法可以部分或全部在专用电路中实现。上述各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。不同的组合和子组合旨在落入本公开的范围内,并且在一些实现中可以省略某些方法或过程框。本文描述的方法和过程也不限于任何特定的顺序,并且与其相关的框或状态可以以其他适当的顺序执行,或者可以并行执行,或者以某种其他方式执行。可以向所公开的示例实施例中添加或从中删除框或状态。某些操作或过程的性能可以分布在计算机系统或计算机处理器中,不仅驻留在单个机器中,而是部署在多个机器上。
[0134]
如本文中所使用的,电路可以利用任何形式的硬件、软件或其组合来实现。例如,可以实现一个或多个处理器、控制器、asic、pla、pal、cpld、fpga、逻辑组件、软件例程或其他机制来组成电路。在实现中,本文中所描述的各种电路可以实现为分立电路,或者所描述的功能和特征可以在一个或多个电路之间部分或全部共享。即使各种特征或功能元素可以单独描述或声明为单独的电路,但是这些特征和功能可以在一个或多个公共电路之间共享,并且此类描述不应要求或暗示需要单独的电路来实现这些特征或功能。当电路全部或部分使用软件实现时,这种软件可以被实现为与能够执行关于其描述的功能的计算或处理系统(诸如计算机系统1400)一起操作。
[0135]
如本文中所使用的,术语“或”可以被解释为包含或排除的含义。此外,单数形式的资源、操作或结构的描述不应被理解为排除复数形式。除非另有具体说明,或者在所使用的上下文中另有理解,否则条件语言,诸如“可以”、“可能”、“能够”或“可”,通常旨在传达某些实施例包括某些特征、元件和/或步骤,而其他实施例不包括。
[0136]
本文档中所使用的术语和短语及其变体,除非另有明确说明,否则应理解为开放式,而非限制性。诸如“常规的”、“传统的”、“正常的”、“标准的”、“已知的”等形容词以及类似含义的术语不应该被解释为将所描述的项目限制到给定的时间段或限制到在给定的时间可用的项目,而是应该被理解为涵盖现在或在将来的任何时间可用或已知的常规的、传统的、正常的或标准的技术。在一些情况下,诸如“一个或多个”、“至少”、“但不限于”或其他类似短语的扩较大的词语和短语的存在不应被理解为意味着在可能不存在这种扩较大的
短语的情况下,想要或需要较窄的情况。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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