CN115408004A - 一种Web应用系统存算一体化适配优化方法及装置 - Google Patents

一种Web应用系统存算一体化适配优化方法及装置 Download PDF

Info

Publication number
CN115408004A
CN115408004A CN202210912083.6A CN202210912083A CN115408004A CN 115408004 A CN115408004 A CN 115408004A CN 202210912083 A CN202210912083 A CN 202210912083A CN 115408004 A CN115408004 A CN 115408004A
Authority
CN
China
Prior art keywords
web application
application system
webassembly
code
module
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
CN202210912083.6A
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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN202210912083.6A priority Critical patent/CN115408004A/zh
Publication of CN115408004A publication Critical patent/CN115408004A/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
    • G06F8/44Encoding
    • G06F8/443Optimisation

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

本发明提供一种Web应用系统存算一体化适配优化方法及装置。该方法包括:确定Web应用系统中待优化的代码模块,对代码模块进行相应的改写及编译操作,获得代码模块对应的WebAssembly字节码,并封装为WebAssembly模块,然后集成到Web应用系统中;基于同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。本发明提供的方法,能够有效提升应用系统存算适配优化效果,从而提高Web应用系统存算能力及Web服务的性能。

Description

一种Web应用系统存算一体化适配优化方法及装置
技术领域
本发明涉及计算机应用技术领域,具体涉及一种Web应用系统存算一体化适配优化方法及装置。另外,还涉及一种电子设备及处理器可读存储介质。
背景技术
Web也称为www,是World Wide Web的简称,是全球性的、动态交互的、跨平台的用于发布、浏览和传播信息的分布式信息系统,也是建立在Internet上的一种网络服务。由于Web浏览器的使用不受平台和操作系统限制,极具便捷性和普适性,使其成为互联网最重要的基础设施之一。但是随着Web使用者的增多、Web应用系统(Web应用程序)的不断发展,其应用的复杂度也在不断的增加,特别是运行时内存和计算的复杂度,因此带来了一系列存算上的挑战。本质上,Web应用系统性能低(即高内存使用和计算开销)的原因主要来源于低效的动态解释型语言JavaScript与对存算要求越来越高的Web应用系统之间的矛盾。目前,为了提高Web应用系统的性能,现有技术中提出了Web编程语言(即WebAssembly)的概念,来进一步更底层、更本质地提高Web应用的性能。WebAssembly作为一项新兴的Web革新技术,是一种运行在Web端的二进制的字节码格式,具有以下优点:(1)是一种底层Web编程语言,能够在所有当前桌面浏览器和很多移动浏览器上以接近本地的速度运行;(2)文件设计的很紧凑,能够被快速传输和下载,因此可以快速解析和初始化;(3)用C++、Rust、Go等语言编写的代码可以经过Emscripten等编译器工具链编译成WebAssembly字节码,可以直接在Web上运行。尽管WebAssembly作为一项革新的Web技术,具有极强的应用潜力,但是由于刚提出不久且技术难度极高,直接利用WebAssembly来适配和优化原有的Web服务仍然存在存算上的挑战,特别是对于一些存算困难型的Web应用系统而言。这里的存算困难型Web应用系统指的是运行时在浏览器客户端高内存使用和高计算开销的应用,并且很难被一体化优化,也就是说优化内存使用的同时会带来计算开销的副作用,反之亦然。现有技术的相关优化,通常都是简单利用WebAssembly来直接提高Web应用系统性能,尽管可以取到一定程度的性能优化,但是并没有充分发挥WebAssembly的优势来本质优化相关存算困难Web服务的性能。因此如何提供一种更为有效的Web应用系统存算一体化适配优化方案以提高存算困难Web服务的性能成为亟待解决的难题。
发明内容
为此,本发明提供一种Web应用系统存算一体化适配优化方法及装置,以解决现有技术中存在的Web应用系统存算困难且局限性较高,从而导致Web服务性能较差的缺陷。
第一方面,本发明提供一种Web应用系统存算一体化适配优化方法,包括:确定Web应用系统中待优化的代码模块;
对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;
将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;
基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
进一步的,所述确定Web应用系统中待优化的代码模块,具体包括:对原始的基于JavaScript编写的Web应用系统进行强计算相关性分析,以所述Web应用系统中的代码模块是否为强计算相关为准则,识别出相应的计算指令,并标记所述计算指令所属的相关代码模块;将所述相关代码模块标记为所述Web应用系统中待优化的代码模块;其中,所述代码模块是能够通过预设的编程语言进行改写,并被WebAssembly支持的计算密集型的JavaScript模块。
进一步的,对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码,具体包括:
在确定所述代码模块的功能不变的基础上,优化所述代码模块的代码逻辑,以删除所述代码模块中满足预设条件的非必要的函数语句;并基于预设的编程语言对删除非必要函数语句后的所述代码模块进行改写,以重实现所述代码模块的相应功能,得到改写后的代码模块;
基于预设的Emscripten编译工具链将所述改写后的代码模块编译为WebAssembly字节码。
进一步的,将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中,具体包括:基于Emscripten SDK生成相应的JavaScript胶水代码,基于所述JavaScript胶水代码对所述WebAssembly字节码进行模块化封装处理,得到WebAssembly模块;
基于相应的JavaScript脚本语言调用封装处理得到的所述WebAssembly模块,将所述WebAssembly模块集成到所述Web应用系统中,以替换所述Web应用系统中原始的JavaScript模块;所述原始的JavaScript模块为所述待优化的代码模块。
进一步的,基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化,具体包括:
基于所述同步异步代码解耦机制将集成后的所述Web应用系统中的WebAssembly异步代码和非WebAssembly同步代码解耦;并将所述集成后的所述Web应用系统中目标函数调用改写为尾调用的架构,以触发LLVM编译器的尾调用优化;将原始的虚拟指令集中CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,将所述CPU指令的32位立即数改写为WAVM指令的静态操作数,并根据所述CPU指令的不同类别对操作码进行定制化改写,得到对应所述WAVM指令的操作码,完成虚拟指令集的归约改写;将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换;并根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换;基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。
进一步的,利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统,具体包括:
利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统;所述基于拓扑排序的就地内存填充分配机制包括基于内存空间存放变量的新旧状态差异,将内存切块标记,并根据内存块前后内容之间的对应关系,基于深度优先搜索模型进行拓扑排序,得到相应的内存内容块依赖关系树模型,以使得在旧内存上直接存放新内容。
第二方面,本发明还提供一种Web应用系统存算一体化适配优化装置,包括:
待优化模块检测单元,用于确定Web应用系统中待优化的代码模块;
功能模块改写及编译单元,用于对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;
功能模块集成单元,用于将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;
存算一体化适配优化单元,用于基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
进一步的,所述存算一体化适配优化单元,具体用于:
基于所述同步异步代码解耦机制将集成后的所述Web应用系统中的WebAssembly异步代码和非WebAssembly同步代码解耦;并将所述集成后的所述Web应用系统中目标函数调用改写为尾调用的架构,以触发LLVM编译器的尾调用优化;将原始的虚拟指令集中CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,将所述CPU指令的32位立即数改写为WAVM指令的静态操作数,并根据所述CPU指令的不同类别对操作码进行定制化改写,得到对应所述WAVM指令的操作码,完成虚拟指令集的归约改写;将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换;并根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换;基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。
进一步的,所述待优化模块检测单元,具体用于:对原始的基于JavaScript编写的Web应用系统进行强计算相关性分析,以所述Web应用系统中的代码模块是否为强计算相关为准则,识别出相应的计算指令,并标记所述计算指令所属的相关代码模块;将所述相关代码模块标记为所述Web应用系统中待优化的代码模块;其中,所述代码模块是能够通过预设的编程语言进行改写,并被WebAssembly支持的计算密集型的JavaScript模块。
进一步的,所述功能模块改写及编译单元,具体用于:
在确定所述代码模块的功能不变的基础上,优化所述代码模块的代码逻辑,以删除所述代码模块中满足预设条件的非必要的函数语句;并基于预设的编程语言对删除非必要函数语句后的所述代码模块进行改写,以重实现所述代码模块的相应功能,得到改写后的代码模块;
基于预设的Emscripten编译工具链将所述改写后的代码模块编译为WebAssembly字节码。
进一步的,所述功能模块集成单元,具体用于:基于Emscripten SDK生成相应的JavaScript胶水代码,基于所述JavaScript胶水代码对所述WebAssembly字节码进行模块化封装处理,得到WebAssembly模块;基于相应的JavaScript脚本语言调用封装处理得到的所述WebAssembly模块,将所述WebAssembly模块集成到所述Web应用系统中,以替换所述Web应用系统中原始的JavaScript模块;所述原始的JavaScript模块为所述待优化的代码模块。
进一步的,所述存算一体化适配优化单元,具体还用于:利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统;所述基于拓扑排序的就地内存填充分配机制包括基于内存空间存放变量的新旧状态差异,将内存切块标记,并根据内存块前后内容之间的对应关系,基于深度优先搜索模型进行拓扑排序,得到相应的内存内容块依赖关系树模型,以使得在旧内存上直接存放新内容。
第三方面,本发明还提供一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述计算机程序时实现如上述任意一项所述的Web应用系统存算一体化适配优化方法的步骤。
第四方面,本发明还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如上述任意一项所述的Web应用系统存算一体化适配优化方法的步骤。
本发明提供的Web应用系统存算一体化适配优化方法,通过确定Web应用系统中待优化的代码模块,并对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;然后,将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;最后,基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。能够有效提升应用系统存算适配优化效果,从而提高Web应用系统存算能力及Web服务的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附图。
图1是本发明实施例提供的Web应用系统存算一体化适配优化方法的流程示意图;
图2是本发明实施例提供的Web应用系统存算一体化适配优化方法的具体应用流程示意图;
图3是本发明实施例提供的利用Emscripten工具链对C++源代码编译为WebAssembly字节码的编译流程图;
图4是本发明实施例提供的将C代码编译为WebAssembly二进制字节码和wat文本表示的示意图;
图5是本发明实施例提供的在函数A的内部调用函数B过程的示意图;
图6是本发明实施例提供的尾调用改写前后的代码示例;
图7是本发明实施例提供的CPU指令集的编码结构的示意图;
图8是本发明实施例提供的单指令多数据流和单指令单数据流的比较说明示意图;
图9是本发明实施例提供的基于拓扑排序的就地内存填充分配机制的内存内容块依赖说明的示意图;
图10是本发明实施例提供的基于拓扑排序的就地内存填充分配机制的内存内容块依赖关系树模型的示意图;
图11是本发明实施例提供的Web应用系统存算一体化适配优化装置的结构示意图;
图12是本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保护的范围。
下面基于本发明所述的Web应用系统存算一体化适配优化方法,对其实施例进行详细描述。如图1所示,其为本发明实施例提供的Web应用系统存算一体化适配优化方法的流程示意图,具体过程包括以下步骤:
步骤101:确定Web应用系统中待优化的代码模块。
在本发明实施例中,可根据现有的强计算相关性分析规则对原始的基于JavaScript编写的Web应用系统进行强计算相关性分析,以所述Web应用系统中的代码模块是否为强计算相关(即计算密集型)为准则,识别出相应的计算指令,并标记所述计算指令所属的相关代码模块;将所述相关代码模块标记为所述Web应用系统中待优化的代码模块;其中,所述代码模块是能够通过预设的编程语言(比如C、C++、Rust和Go等高级编程语言)进行改写,并被WebAssembly支持的计算密集型的JavaScript模块。
具体的,如图2所示,通过对原基于JavaScript编写的Web应用系统进行强计算相关的优化识别,选取出原始的基于JavaScript实现的Web应用系统的代码模块(即计算密集型代码模块),即识别可以用C++/C编程语言改写并被WebAssembly支持的代码模块(即JavaScript模块或者关键待优化的系统模块),并将可以用C++/C编程语言改写的代码模块标注出来。需要说明的是,并不是Web应用系统中的所有JavaScript模块都能被用C++/C编程语言改写并编译成WebAssembly字节码(即WebAssembly二进制字节码)。因此利用WebAssembly是用于优化计算效率这一特性,以代码模块是否是强计算相关为准则,可识别出相应的计算指令,并标记出所述计算指令所属的相关代码模块用于后续优化。Web应用系统中有些模块的计算指令比较复杂或者计算指令需要做很多计算,比如加密模块中加密计算指令需要进行较多计算,也就是计算密集型的代码模块或JavaScript模块。所述代码模块即为计算指令(逻辑指令)比较多的模块,比如加密模块。
步骤102:对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码。
本发明实施例中,在确定所述代码模块的功能不变的基础上,优化所述代码模块的代码逻辑,以删除所述代码模块中满足预设条件的非必要的函数语句;并基于预设的编程语言(比如C++/C编程语言)对删除非必要函数语句后的所述代码模块进行改写,以重实现所述代码模块的相应功能,得到改写后的代码模块(即C代码模块);基于预设的Emscripten编译工具链将所述改写后的代码模块编译为WebAssembly字节码。
具体的,如图2所示,在保证Web应用系统的代码模块功能不变(即输入输出不变)的基础上,优化代码模块内代码逻辑,删除非必要的函数语句,并使用C++/C编程语言重新改写实现上述标记的待优化的计算密集型的代码模块(原本是基于JavaScript实现),即编写原有功能模块或关键待优化模块,从JavaScript改写为C++/C,得到C++/C源代码模块。由于动态解释型语言JavaScript的语法特性和静态编译型语言C++/C编程语言相差较大,因此在改写过程中,在不改变函数模块功能的基础上(即保证函数模块的输入和输出一致),需要尽可能减少不必要的代码逻辑以减少计算时间,同时在不影响功能的基础上移除了JavaScript特有的代码语义。
进一步的,如图3所示,将改写的C++/C源代码模块用Emscripten编译工具链中的Clang编译为LLVM(Low Level Virtual Machine)的中间表示(LLVM IR);其次在LLVM编译器中对LLVM IR进行一系列编译优化,转化为WebAssembly二进制字节码。如图4所示是一段C++/C代码被编译为WebAssembly字节码和wat文本表示的示意图。具体的,基于一段阶乘函数的C++/C代码,对其用Emscripten编译工具进行编译可得到其对应的二进制字节码.wasm文件,同时借助wasm2wat工具将.wasm文件反编译为更易理解的.wat文本表示。
步骤103:将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中。
在本发明实施例中,基于Emscripten SDK生成相应的JavaScript胶水代码,基于所述JavaScript胶水代码对所述WebAssembly字节码进行模块化封装处理,得到WebAssembly模块;进一步的,基于相应的JavaScript脚本语言调用封装处理得到的所述WebAssembly模块,将所述WebAssembly模块集成到Web应用系统中,以替换所述Web应用系统中原始的JavaScript模块;所述原始的JavaScript模块为所述待优化的代码模块。比如,可使用Emscripten编译工具链将上述实现的C++/C源代码模块编译为WebAssembly字节码,并封装为WebAssembly模块用于JavaScript调用和集成到原Web应用系统中。
在实际实施过程中,如图2所示,可同时开启相关编译选项,使用Emscripten SDK生成JavaScript胶水代码,用于WebAssembly模块化、实例化等相关使用操作的封装;最后在原系统中用JavaScript脚本语言调用封装好的WebAssembly模块,即WebAssembly二进制功能模块,用其替换原有的JavaScript模块并集成到Web应用系统中;
步骤104:基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
本发明实施例中,可基于所述同步异步代码解耦机制将集成后的所述Web应用系统中的WebAssembly异步代码和非WebAssembly同步代码解耦;并进一步将所述集成后的Web应用系统中目标函数调用改写为尾调用的架构,以触发LLVM编译器的尾调用优化;将原始的虚拟指令集中CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,将CPU指令的32位立即数改写为WAVM指令的静态操作数,并根据所述CPU指令的不同类别对操作码进行定制化改写,得到对应所述WAVM指令的操作码,完成虚拟指令集的归约改写;将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换;并根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换;基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。除此之外,可利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统;所述基于拓扑排序的就地内存填充分配机制包括基于内存空间存放变量的新旧状态差异,将内存切块标记,并根据内存块前后内容之间的对应关系,基于深度优先搜索模型进行拓扑排序,得到相应的内存内容块依赖关系树模型,以使得在旧内存上直接存放新内容。
具体的,如图2所示,为了进一步适配提高已经集成了WebAssembly模块的Web应用系统的计算效率。由于Web应用系统的部分固有业务计算特性(必须同步计算)和基于的硬件平台特性(例如面向CPU的系统架构和指令集)和WebAssembly的固有特性(API具有异步性,特有的虚拟指令集架构)之间的矛盾,因此需要自动对原Web应用系统进行改造,以进一步适配WebAssembly提高计算效率。具体的:首先由于异步的WebAssembly API特性和Web应用的部分同步算法特性,使得在集成WebAssembly模块过程中,Web应用系统受限于执行逻辑的伪异步,效率没有得到完全提升。其次,由于部分的Web应用系统是基于面向CPU的特有虚拟机架构和指令集,而WebAssembly是运行在Web浏览器中的WebAssembly虚拟机,具有不同于CPU的架构和指令集。因此在适配转化中可能由于架构和指令集的不兼容而导致功能出错,因此本发明设计出了从面向CPU到面向WebAssembly虚拟机的虚拟指令集架构改造用于在应用改造后进一步释放WebAssembly的计算能力。另外,可进一步适配减少已经集成了WebAssembly模块的Web应用系统的内存使用。由于WebAssembly是基于线性内存模型,因此对于一些内存开销极大的Web应用而言,该模型会导致内存消耗极大,需要进一步对原Web应用系统的内存使用进行改造适配WebAssembly的线性内存模型,提高了其内存使用效率,降低运行时的系统内存使用压力。针对内存困难的Web应用系统,本发明对其应用的内存填充机制进行改造,作为内存适配优化策略。利用基于拓扑排序的就地内存填充分配机制对集成后的Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。所述适配优化后的Web应用系统适用于两大典型的存算困难应用,即Web云存储差分同步服务和Web端加密货币工作量证明服务,即基于适配优化后的Web应用系统实现Web云存储差分同步服务或Web端加密货币工作量证明服务,并对其优化后的存算性能进行测量和验证,有效提升了Web云存储差分同步服务和Web端加密货币工作量证明服务的存算效率,进而提高了Web云存储差分同步服务性能和Web端加密货币工作量证明服务性能。
在实际实施过程中,为了进行计算适配优化,本发明首先设计了同步异步代码解耦机制,将Web应用系统中的异步WebAssembly代码和非WebAssembly的同步代码解耦,降低同步-异步耦合度,使得伪异步代码可以真正异步执行,加大提高了系统的执行效率。同时本发明还集成了WebAssembly的流式编译功能,使得整个WebAssembly实现的模块可以被并行下载和编译运行。
其次,为了对从面向CPU到面向WebAssembly虚拟机(简称为WAVM)的虚拟指令集架构进行改造,本步骤包括了以下几个子步骤:
(1)在执行尾调用改写过程中。WAVM是浏览器中WebAssembly二进制字节码的执行环境,类似于Java虚拟机(JVM)。由于WAVM属于栈式虚拟机,在执行指令时使用“栈”这种后进先出的容器结构来存储和交换数据。其核心原理是维护一个操作数栈,指令的执行过程可抽象为从栈顶“弹出”(pop)数据,执行计算,最后将结果“压入”(push)栈顶。每当一个函数被执行时,WAVM都会为该函数新创建一个“调用记录”,即栈帧(stack frame),用于保存函数的调用位置和内部变量等信息。函数调用结束后,栈帧就会被销毁出栈。如图5所示,在函数A的内部调用函数B,那么B的栈帧将会新建在A的栈帧上,直到B运行结束,将结果返回到A,B的栈帧才会出栈。多个函数的情况以此类推。因此,因此浏览器引擎在进行物理寄存器分配时,为维护WAVM的函数调用记录,按照ABI(Application Binary Interface)的约定(将程序中的变量尽量分配到物理寄存器中),将分配两个寄存器来记住每次函数调用的栈顶和栈基址。而应用虚拟机的寄存器数量和CPU的最大可分配寄存器数量相吻合,就会导致有部分虚拟寄存器无法被映射到物理寄存器,而是被映射到内存中,导致存取操作效率低。对此,利用了LLVM编译器的尾调用(tail call)优化,来避免函数调用记录对寄存器的占用。尾调用,指的是某个函数的最后一步是调用另一个函数,所以无需再保留调用位置、内部变量等外层函数的调用信息,只要直接用内层函数的调用记录,取代外层函数的调用记录即可,也就是只需要保留一个栈帧,而不再需要用额外的寄存器来存储函数的调用记录。LLVM编译器的尾调用优化,就是针对符合尾调用模式的函数调用,将call/ret指令优化为jump指令,从而可以复用同一个栈帧。本发明将Web应用中可改为尾调用形式的函数调用改为尾调用的形式,以触发LLVM编译器的尾调用优化,从而免去了额外的寄存器使用,保证了应用的虚拟机寄存器仍能确定地映射至CPU的物理寄存器。例如,如图6所示的尾调用改写前后的代码示例,左边是求n!的一段没有经过尾调用改写的函数factorial,外层函数factorial(int n)的最后一条指令是return n*factorial(n-1),每次内层函数factorial(n-1)返回之后,还需要将其与n相乘才能返回,因此需要分配两个寄存器来记住factorial(n-1)函数调用的栈顶和栈基址。右边是通过增加一个函数参数,将原函数factorial进行尾调用改写后的函数factorial_tail(和原函数功能一致)。经过尾调用改写后,外层函数factorial_tail(int n,int m)的最后一条指令是factorial_tail(n-1,n*m),也就是说当factorial_tail(n-1,n*m)执行结束返回之后,factorial_tail(int n,int m)也直接返回,因此执行到factorial_tail(n-1,n*m)的时候可以将其栈帧直接覆盖factorial_tail(int n,int m)的栈帧位置,而无须分配多余的寄存器用来保存factorial_tail(n-1,n*m)的栈帧地址。其中,所述的函数为一个程序代码的功能模块或者代码模块,每个函数本质上是一个自带声明和语句的小程序,可利用函数将web应用程序划分为多个功能模块,当函数调用时传递所需参数。
(2)在执行虚拟指令集的归约改写过程中。由于许多基于虚拟机的应用其虚拟机指令集基于的是CPU指令,而用WebAssembly实现之后,运行环境是WAVM,而WAVM指令和CPU指令的编码构造、指令集组成等存在着较大的区别。为使应用能在浏览器WAVM中顺利执行,本发明对贴近CPU指令集的应用虚拟指令集进行归约改写,使其贴近WAVM指令集。如图7所示是CPU指令集的编码结构,包含了操作码opcode、目标寄存器dst、源寄存器src、内存标志位mod、32位立即数imm32。WAVM指令仅由操作码(opcode)和操作数(operand)组成。操作码决定指令将进行的操作,操作数则相当于指令的参数,决定指令的执行对象。操作数又分为静态操作数和动态操作数,静态操作数直接编码在指令中,位于操作码之后,动态操作数则在运行时从操作数栈中获取。虚拟指令集的归约改写策略包括:将原CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,32位立即数改写为WAVM指令的静态操作数;根据指令的不同类别对操作码进行定制化改写。其中,根据指令的不同类别对操作码进行定制化改写,具体如下:
整数指令与浮点指令:整数指令是对整数的运算操作,浮点指令是对浮点数的运算操作,这两类指令的操作被WAVM指令的数值类指令完全包含,重写策略基本一致,将操作码直接对应改写为WAVM相同功能的数值指令操作码即可。如原虚拟指令集中的0x06、0x12等操作码,对应的操作都是64位整数的乘法,本文将之对应改写到WAVM指令集中的i64.mul(0x7E)。控制指令:控制指令包括浮点舍入控制指令和条件跳转指令。对于浮点舍入控制指令,其行为是将浮点控制寄存器的值右移,移位数由32位立即数决定,改写为WAVM的移位指令即可。条件跳转指令的作用是根据条件跳转到指定目标,而WAVM中没有跳转系列指令,不能直接对应,但可以用block和br系列指令的组合达到相同功能。具体地,使用block(0x02)指令对语句进行分块,br_table(0x0E)指令对语句块建立跳转表和跳转标签;再使用br_if(0x0D)指令判断是否符合跳转条件,符合则跳入语句块中;最后使用return(0x0F)指令跳出块。存储指令:存储指令的行为是将源寄存器中的内容存储至目标寄存器指示的内存地址中,对此根据源寄存器的数据类型,将其改写为WAVM的内存指令如i32.store(0x36)、f64.store(0x38)。而WAVM内存指令的内存地址由静态操作数指定,故再将原指令的目标寄存器改写为WAVM的静态操作数即可。
(3)软浮点实现。由于Web浏览器环境只支持浮点运算单元默认的“向最近舍入”这一种浮点舍入模式,而部分Web应用要求全面的浮点舍入模式,即“向最近舍入”、“向负无穷大舍入”、“向正无穷大舍入”和“向零舍入”这四种模式,否则会导致计算出错。因此为了保证计算结果的正确性,必须为Web浏览器环境引入额外的浮点舍入支持。从硬件层面很难实现这一支持,因此借鉴了嵌入式处理器领域的“软浮点”设计思想,预先在软件层面定义相应的浮点数结构,用软件层面的预设操作来模拟硬件浮点运算单元对浮点数的直接操作。具体而言,根据IEEE 754标准,浮点数的表示形式为:P=(-1)S×M×2E;其中,S∈{0,1},决定浮点数的符号(Sign);M为尾数(Mantissa),E是偏移为127的指数(Exponent)。本发明基于此格式用软件的方式模拟实现了硬件FPU(浮点计算单元)的浮点处理方式,包括了四则运算、逻辑移位和开方等。例如对于浮点加法,软件模拟的方式就是对阶、尾数相加,然后进行规格化、检查溢出和舍入等。最终,本发明将实现的软浮点向外暴露一个浮点控制接口,用来替换浮点控制寄存器(fprc)原先的触发接口。
(4)在执行单指令多数据流对函数库的调用转换过程中实现SIMD加速。单指令多数据流(SIMD)是CPU基本指令集的扩展,充分利用CPU的多个数据处理单元,使得一条指令可以并行处理多个数据。如图8所示,左侧为单指令单数据流,右侧为单指令多数据流。与单指令单数据流(SISD)相比,单指令多数据流具有更少的执行指令数,因此执行速度更快。但是由于SIMD内建函数库是“编译器特定的”,原始编译器(即GCC编译器)为C++提供的是Streaming SIMD Extension intrinsics(SSE库),而LLVM编译器为WebAssembly提供的则是Web SIDM Extension intrinsics(WSE库),因此导致从C++编译转化为WebAssembly之后,缺少了SIMD指令支持。因此本发明通过将C++源代码对SSE库(即原始编译器对应的函数库)的调用转换为对WSE库(即LLVM编译器对应的函数库)的调用,包括了对向量容器数据类型的转换和对函数功能的转换。向量容器是SIMD内建函数库提供的数据类型,将会被映射到CPU的SIMD专用寄存器中。向量容器通常以联合体(union)的形式声明,用于存放需要并行处理的一组数据。其中,R1、R2以及R3分别表示向量容器。以下SSE库中的三种向量容器,均为128位,分别是:m128:用于容纳4个32位单精度浮点数;m128d:用于容纳2个64位双精度浮点数;m128i:用于容纳2个64位整数或4个32位整数;而WSE库简化了对向量容器的封装,提供的128位向量容器仅有“v128_t”这一种,也就是说,无论是4个32位单精度浮点数或2个64位整数等等,只要是一组总长度为128位的数据,均可且仅可被装载至v128_t中,至于应当按照什么类型来处理数据,则由操作函数来指定。因此,在向量容器类型的转换上,本发明把算法源代码中使用到的SSE库的三种128位容器全部映射为WSE库的v128_t容器,即将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换。
对于函数功能的转换,因为SSE库与WSE库均是对SIMD指令的封装,有部分函数功能是相似的,甚至可以一对一地直接转换;而无法简单对应转换的函数,本发明则用若干条WSE库的函数组合重写,以实现与原SSE函数相同的功能。本发明首先对SSE库函数进行了分类,以便对不同类别采取不同的转换策略,根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换。从而基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。其中,使用到的SSE库可归为运算、存取、混洗三类,对应三种不同的转换策略,具体如下:
运算类:共72个,包括算术、逻辑、位操作等对向量容器中的数据进行运算的函数。这些函数封装的是SIMD的通用操作指令,在WSE库可以直接找到对应的同功能函数,也就是可以一对一地转换。并且,这些函数在两个库中的命名规则也是基本相似的,很容易地可以完成批量的自动化转换:SSE库中此类函数被命名为_mm_<operation>_<type>,_mm是前缀,<operation>表示操作,<type>指明操作的数据类型;WSE库中此类函数则被命名为_wasm_<type>_x_<lane>_<operation>,_wasm为前缀,<type>为数据类型<lane>为容器中的数据个数,<operation>为操作。比如,对128位容器中4个32位整数的相加,在SSE库中的函数名为_mm_add_epi32,在WSE库中的函数名则为_wasm_i32x4_add。利用命名规则的正则匹配,就可以完成运算类函数从SSE库到WSE库的一对一转换。
存取类:共8个,包括将数据加载入向量容器和把向量容器中的数据存储到指定地址的函数。SSE库中用于加载和存储的函数分别被命名为_mm_load_<type>和_mm_store_<type>,<type>是操作的数据类型,比如_mm_load_epi32表示加载32位整数至__m128i容器中。而由于WSE库仅提供v128_t一种类型,因此加载和存储函数都只有一个,分别是_wasm_v128_load和_wasm_v128_store,且已将SSE库的三个128位容器都映射到了v128_t,因此仍然按命名规则的正则匹配,将SSE库的加载函数和存储函数分别转换到WSE的加载(_wasm_v128_load)和存储(_wasm_v128_store)。和上文对运算类操作的转换处理是相似的,区别在于对存取类操作的转换是多对一转换。
混洗类:共12个,此类函数相对特殊,是对SIMD中shuffle指令的封装,可以对一组或多组向量容器中的数据进行重新排列,即数据重排。比如将128位容器的低64位与高64位互换、将四个128位容器的低32位按序载入另一个128位容器中等等。SSE库与WSE库对shuffle指令的封装方式差距较大,几乎没有一对一的直接对应,需要用多个WSE函数组合实现原SSE函数的功能。运算密集型Web应用以运算为主,总的用到了12个混洗函数,实质上按操作类型划分则只有3类,分别是_mm_blend_<type>、_mm_permutevar_<type>和_mm_swizzle_<type>。而操作类型相同、数据类型不同的函数,其转换范式是相似的,也就是说,实际需要的不同转换范式只有3类。本发明对每类转换都用WSE提供的函数以组合的方式等价实现。例如WSE中_mm_blend_<type>函数的功能是将两个向量容器的值按立即数mask的指示载入目标容器中,本发明用WSE的_wasm_<type>_x_<lane>_shuffle和_wasm_v128_bitselect函数组合实现。
为了进行内存适配优化,首先如图9所示对于运行过程中需要分配新旧大内存来分别保存变量前后状态的Web应用系统,本发明提出了基于拓扑排序的就地内存填充分配机制,也就是基于内存空间存放变量的新旧状态差异,将内存切块标记,并根据内存块前后内容之间的依赖关系,基于深度优先搜索算法进行拓扑排序,形成如图10所示的内存内容块依赖关系树模型,使得最终可以在旧内存上直接存放新内容。例如,在Web端云存储差分同步服务中最后文件重构阶段,原本需要分配两段大内存存放新旧文件内容,利用了本发明提出的基于拓扑排序的就地内存分配机制,可只用原本内存的一半就可以完成文件重构。其中,B1、B2、B3、B4分别表示内存块。
本发明提供了利用Web编程语言对存算困难的Web应用系统进行存算一体化适配方法,并针对不同类型的Web应用系统进行实现和性能验证,测量比较Web应用系统优化前后运行时计算时间开销和内存使用,并进行展示。需要说明的是,从技术层面上来看,利用WebAssembly来提高Web应用系统的性能流程可分为以下几个步骤:(1)首先定位区分出可以用C、C++、Rust和Go等语言重实现的Web应用中的JavaScript功能模块。这是由于部分Web功能并不被WebAssembly支持,因此仍只能由JavaScript承担,并非所有的功能模块都能被改写。因此这里区分可以改写的准则是一个功能模块是否是计算强相关(即计算密集型)并被WebAssembly支持。(2)其次用C++/C重新实现上一部划分出来的计算强相关并被WebAssembly的功能模块。(3)接着用Emscripten工具链将C++/C源代码编译为WebAssembly二进制字节码,并集成中原Web应用系统中。
本发明的有益效果在于:本发明开创性地使用了Web编程语言用于Web应用的存算一体化适配优化,针对适配过程中出现的存算问题进行深度优化,弥补了现有工业界和学术界对于应用WebAssembly进行Web应用存算性能优化研究的空白,极大地减少了存算困难型Web应用的计算和内存开销。本发明提出的基于Web编程语言的Web应用存算一体化适配方法,能够应用于解决大多数存算困难的Web应用性能问题,适用对象广泛,并且能够很方便被其他系统所集成合并,适配性也极强。同时本发明提出的基于Web编程语言的Web应用存算一体化适配方法,可以将原本计算密集型的Web应用的计算时间优化减少一个量级以上,极大提高了计算效率。并且可以减少至少一半的内存开销,提高了内存利用率以及服务器可并发支持的客户端数。
采用本发明实施例所述的Web应用系统存算一体化适配优化方法,通过确定Web应用系统中待优化的代码模块,并对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;然后,将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;最后,基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。能够有效提升应用系统存算适配优化效果,从而提高Web应用系统存算能力及Web服务的性能。
与上述提供的一种Web应用系统存算一体化适配优化方法相对应,本发明还提供一种Web应用系统存算一体化适配优化装置。由于该装置的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的Web应用系统存算一体化适配优化装置的实施例仅是示意性的。请参考图11所示,其为本发明实施例提供的一种Web应用系统存算一体化适配优化装置的结构示意图。
本发明所述的Web应用系统存算一体化适配优化装置,具体包括如下部分:
待优化模块检测单元1101,用于确定Web应用系统中待优化的代码模块;
功能模块改写及编译单元1102,用于对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;
功能模块集成单元1103,用于将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;
存算一体化适配优化单元1104,用于基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
本发明实施例所述的Web应用系统存算一体化适配优化装置,通过确定Web应用系统中待优化的代码模块,并对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;然后,将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;最后,基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。能够有效提升应用系统存算适配优化效果,从而提高Web应用系统存算能力及Web服务的性能。
与上述提供的Web应用系统存算一体化适配优化方法相对应,本发明还提供一种电子设备。由于该电子设备的实施例相似于上述方法实施例,所以描述得比较简单,相关之处请参见上述方法实施例部分的说明即可,下面描述的电子设备仅是示意性的。如图12所示,其为本发明实施例公开的一种电子设备的实体结构示意图。该电子设备可以包括:处理器(processor)1201、存储器(memory)1202和通信总线1203,其中,处理器1201,存储器1202通过通信总线1203完成相互间的通信,通过通信接口1204与外部进行通信。处理器1201可以调用存储器1202中的逻辑指令,以执行Web应用系统存算一体化适配优化方法,该方法包括:确定Web应用系统中待优化的代码模块;对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
此外,上述的存储器1202中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:存储芯片、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在处理器可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的Web应用系统存算一体化适配优化方法。该方法包括:确定Web应用系统中待优化的代码模块;对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
又一方面,本发明实施例还提供一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的Web应用系统存算一体化适配优化方法。该方法包括:确定Web应用系统中待优化的代码模块;对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
所述处理器可读存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NANDFLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (10)

1.一种Web应用系统存算一体化适配优化方法,其特征在于,包括:
确定Web应用系统中待优化的代码模块;
对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;
将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;
基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
2.根据权利要求1所述的Web应用系统存算一体化适配优化方法,其特征在于,所述确定Web应用系统中待优化的代码模块,具体包括:对原始的基于JavaScript编写的Web应用系统进行强计算相关性分析,以所述Web应用系统中的代码模块是否为强计算相关为准则,识别出相应的计算指令,并标记所述计算指令所属的相关代码模块;将所述相关代码模块标记为所述Web应用系统中待优化的代码模块;其中,所述代码模块是能够通过预设的编程语言进行改写,并被WebAssembly支持的计算密集型的JavaScript模块。
3.根据权利要求1所述的Web应用系统存算一体化适配优化方法,其特征在于,对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码,具体包括:
在确定所述代码模块的功能不变的基础上,优化所述代码模块的代码逻辑,以删除所述代码模块中满足预设条件的非必要的函数语句;并基于预设的编程语言对删除非必要函数语句后的所述代码模块进行改写,以重实现所述代码模块的相应功能,得到改写后的代码模块;
基于预设的Emscripten编译工具链将所述改写后的代码模块编译为WebAssembly字节码。
4.根据权利要求1所述的Web应用系统存算一体化适配优化方法,其特征在于,将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中,具体包括:
基于Emscripten SDK生成相应的JavaScript胶水代码,基于所述JavaScript胶水代码对所述WebAssembly字节码进行模块化封装处理,得到WebAssembly模块;
基于相应的JavaScript脚本语言调用封装处理得到的所述WebAssembly模块,将所述WebAssembly模块集成到所述Web应用系统中,以替换所述Web应用系统中原始的JavaScript模块;所述原始的JavaScript模块为所述待优化的代码模块。
5.根据权利要求1所述的Web应用系统存算一体化适配优化方法,其特征在于,基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化,具体包括:
基于所述同步异步代码解耦机制将集成后的所述Web应用系统中的WebAssembly异步代码和非WebAssembly同步代码解耦;并将所述集成后的所述Web应用系统中目标函数调用改写为尾调用的架构,以触发LLVM编译器的尾调用优化;将原始的虚拟指令集中CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,将所述CPU指令的32位立即数改写为WAVM指令的静态操作数,并根据所述CPU指令的不同类别对操作码进行定制化改写,得到对应所述WAVM指令的操作码,完成虚拟指令集的归约改写;将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换;并根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换;基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。
6.根据权利要求1所述的Web应用系统存算一体化适配优化方法,其特征在于,利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统,具体包括:
利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统;所述基于拓扑排序的就地内存填充分配机制包括基于内存空间存放变量的新旧状态差异,将内存切块标记,并根据内存块前后内容之间的对应关系,基于深度优先搜索模型进行拓扑排序,得到相应的内存内容块依赖关系树模型,以使得在旧内存上直接存放新内容。
7.一种Web应用系统存算一体化适配优化装置,其特征在于,包括:
待优化模块检测单元,用于确定Web应用系统中待优化的代码模块;
功能模块改写及编译单元,用于对所述代码模块进行相应的改写及编译操作,获得所述代码模块对应的WebAssembly字节码;
功能模块集成单元,用于将所述WebAssembly字节码封装为WebAssembly模块,并将所述WebAssembly模块集成到所述Web应用系统中;
存算一体化适配优化单元,用于基于预设的同步异步代码解耦机制和对应WebAssembly虚拟机的虚拟指令集架构对集成后的所述Web应用系统进行计算适配优化;利用基于拓扑排序的就地内存填充分配机制对集成后的所述Web应用系统进行内存适配优化,获得适配优化后的Web应用系统。
8.根据权利要求7所述的Web应用系统存算一体化适配优化装置,其特征在于,所述存算一体化适配优化单元,具体用于:
基于所述同步异步代码解耦机制将集成后的所述Web应用系统中的WebAssembly异步代码和非WebAssembly同步代码解耦;并将所述集成后的所述Web应用系统中目标函数调用改写为尾调用的架构,以触发LLVM编译器的尾调用优化;将原始的虚拟指令集中CPU指令的源寄存器和目标寄存器对应改写为WAVM指令的动态操作数,将所述CPU指令的32位立即数改写为WAVM指令的静态操作数,并根据所述CPU指令的不同类别对操作码进行定制化改写,得到对应所述WAVM指令的操作码,完成虚拟指令集的归约改写;将所述原始编译器对应的函数库的向量容器数据类型转换到所述LLVM编译器对应的函数库的向量容器数据类型,完成向量容器数据类型的转换;并根据所述原始编译器对应函数库中的函数类型以及相应的转换策略,完成从所述原始编译器对应的函数库到所述LLVM编译器对应的函数库的函数功能的调用转换;基于同步异步代码解耦机制、对所述尾调用的改写、所述虚拟指令集的归约改写以及单指令多数据流对函数库的调用转换,实现对集成后的所述Web应用系统进行计算适配优化。
9.一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任意一项所述的Web应用系统存算一体化适配优化方法的步骤。
10.一种处理器可读存储介质,所述处理器可读存储介质上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任意一项所述的Web应用系统存算一体化适配优化方法的步骤。
CN202210912083.6A 2022-07-29 2022-07-29 一种Web应用系统存算一体化适配优化方法及装置 Pending CN115408004A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210912083.6A CN115408004A (zh) 2022-07-29 2022-07-29 一种Web应用系统存算一体化适配优化方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210912083.6A CN115408004A (zh) 2022-07-29 2022-07-29 一种Web应用系统存算一体化适配优化方法及装置

Publications (1)

Publication Number Publication Date
CN115408004A true CN115408004A (zh) 2022-11-29

Family

ID=84159063

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210912083.6A Pending CN115408004A (zh) 2022-07-29 2022-07-29 一种Web应用系统存算一体化适配优化方法及装置

Country Status (1)

Country Link
CN (1) CN115408004A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116466995A (zh) * 2023-06-16 2023-07-21 紫光同芯微电子有限公司 基于复合指令的指令及其操作数的优化方法及装置
CN116882931A (zh) * 2023-07-18 2023-10-13 深圳市百慧文化发展有限公司 一种进销存管理系统及其数据处理方法
CN117971134A (zh) * 2024-03-28 2024-05-03 深圳市铨兴科技有限公司 存算一体化固态硬盘的控制方法、系统和介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116466995A (zh) * 2023-06-16 2023-07-21 紫光同芯微电子有限公司 基于复合指令的指令及其操作数的优化方法及装置
CN116466995B (zh) * 2023-06-16 2024-06-11 紫光同芯微电子有限公司 基于复合指令的指令及其操作数的优化方法及装置
CN116882931A (zh) * 2023-07-18 2023-10-13 深圳市百慧文化发展有限公司 一种进销存管理系统及其数据处理方法
CN116882931B (zh) * 2023-07-18 2024-03-19 深圳市百慧文化发展有限公司 一种进销存管理系统及其数据处理方法
CN117971134A (zh) * 2024-03-28 2024-05-03 深圳市铨兴科技有限公司 存算一体化固态硬盘的控制方法、系统和介质
CN117971134B (zh) * 2024-03-28 2024-05-31 深圳市铨兴科技有限公司 存算一体化固态硬盘的控制方法、系统和介质

Similar Documents

Publication Publication Date Title
CN115408004A (zh) 一种Web应用系统存算一体化适配优化方法及装置
US7103881B2 (en) Virtual machine to provide compiled code to processing elements embodied on a processor device
US6324686B1 (en) Just in time compiler technique
WO2021000970A1 (zh) 深度学习算法的编译方法、装置及相关产品
KR102332209B1 (ko) 2개의 명령어 세트 아키텍처들에 따라 컴파일링된 애플리케이션 코드의 실행을 위한 시스템 및 방법
US7877741B2 (en) Method and corresponding apparatus for compiling high-level languages into specific processor architectures
JP5263702B2 (ja) プログラム・コードを変換するためのコンピュータ・システム、方法、及びコンピュータ可読記録媒体
US8893104B2 (en) Method and apparatus for register spill minimization
JP2004280795A (ja) エクストリームパイプライン及び最適化再配列技術
CN105593815A (zh) 在编译器中构建基于图的中间表示的方法
CN115495087A (zh) 一种区块链中实现反射机制的方法、编译方法和编译器、Wasm虚拟机
CN115495086A (zh) 一种编译方法和编译器、Wasm虚拟机
CN116934330A (zh) 一种调用智能合约的方法及执行方法、计算机设备及存储介质
Battagline The Art of WebAssembly: Build Secure, Portable, High-Performance Applications
CN107729118A (zh) 面向众核处理器的修改Java虚拟机的方法
KR100588034B1 (ko) 레지스터 마다 다수의 부호화된 독립적인 데이터 요소의처리를 가능하게 하는 장치, 방법, 및 컴파일러
CN116775127B (zh) 一种基于RetroWrite框架的静态符号执行插桩方法
CN117032719A (zh) 针对TypeScript的静态编译方法及装置
JP2000353097A (ja) 低密回の干渉グラフを生成する方法および装置
CN113835688B (zh) 一种科学计算语言解释器的对象封装方法
CN114546515A (zh) 动态加载静态库的模块、固件及设备和C库转Lua库的方法
Klöckner et al. GPU scripting and code generation with PyCUDA
Sylvestre et al. Hardware Implementation of OCaml Using a Synchronous Functional Language
CN113138770B (zh) 一种基于符号执行的栈操作二进制代码优化方法和装置
CN117591087B (zh) 一种针对复杂数据处理需求的高效形式化代码构建方法

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