设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

Emscripten将默认LLVM WebAssembly为WASM后端

2019-8-6 19:59| 发布者: joejoe0332| 查看: 586| 评论: 0|原作者: oschina|来自: oschina

摘要: Emscripten 是一个独特的 LLVM 后端,它可以将 LLVM 字节码编译成 JavaScript(asm.js),往上追溯其实也就是通过 Clang 将 C 和 C++ 代码编译成 JavaScript(asm.js),可以大大简化现有代码在 Web 时代的重用。 ...

Emscripten 是一个独特的 LLVM 后端,它可以将 LLVM 字节码编译成 JavaScript(asm.js),往上追溯其实也就是通过 Clang 将 C 和 C++ 代码编译成 JavaScript(asm.js),可以大大简化现有代码在 Web 时代的重用。除了 asm.js,Emscripten 还支持 WebAssembly 这一更加先进的 Web 技术,通过与 asm.js 类似的机制,Emscripten 可以生成 WASM 二进制字节码。

原本 Emscripten 的 WebAssembly 后端用的是 fastcomp,但之前已经增加了 LLVM WebAssembly 后端选项,并且二者保持并行开发。近期 JS 引擎 V8 官方发表博客表示很快将默认使用 LLVM WebAssembly 作为 Emscripten 的 WebAssembly 后端,因为 LLVM WebAssembly 后端现在在大多数指标上都已经超越了 fastcomp 后端。V8 团队介绍了具体原因,并给出了基准测试结果:

链接更快

LLVM WebAssembly 后端加上wasm-ld可以完全支持 WebAssembly 目标文件增量编译。fastcomp 在字节码文件中使用 LLVM IR,这意味着在链接时,所有 IR 都将由 LLVM 编译,所以 fastcomp 链接慢。另一方面,WebAssembly 对象文件 .o 包含已编译的 WebAssembly,它们可以像原生链接一样链接,因此,链接步骤可以比使用 fastcomp 快得多。

基准测试结果是 LLVM WebAssembly 链接速度是 fastcomp 的 7 倍:

速度更快,代码更小

LLVM WebAssembly 后端技术栈在基准测试中速度和代码大小都击败了 fastcomp。

宏观基准测试结果是速度平均提升了 3.2%。

总体而言,宏观基准代码大小平均减小了 3.7%,而在实际项目中,Cube 2 游戏引擎的 Web 移植版本 BananaBread,减小了 6% 以上,Doom 3 则减小了 15%。

这样的改进得益于:

  • LLVM 的后端代码比较智能,可以做像 fastcomp 这样的简单后端无法做到的事情,比如 GVN(Global value numbering,全局值编码)。
  • 新的 LLVM 具有更好的 IR 优化。
  • 团队在 WebAssembly 后端输出调整 Binaryen 优化器方面做了许多工作。

支持所有 LLVM IR

fastcomp 可以处理由 clang 产出的 LLVM IR,但因为架构原因经常会在其它源上失败,特别是在将 IR 合法化为 fastcomp 可以处理的类型时。另一方面,LLVM WebAssembly 后端使用通用的 LLVM 后端基础结构,因此可以处理所有内容。

新的 WebAssembly 功能

fastcomp 在运行 asm2wasm 之前编译出 asm.js,这意味着很难处理新的 WebAssembly 功能,如尾调用、异常与 SIMD 等。

来自上游更快的常规更新

使用上游 WebAssembly 后端意味着可以始终使用最新的 LLVM 上游,这意味着可以尽快获得 clang 中新的 C++ 语言功能、新的 LLVM IR 优化等。

切换到默认 LLVM WebAssembly 后,fastcomp 仍然是一个可选项,V8 团队表示最终会完全删除 fastcomp,这样做可以消除重大的维护负担,能够更多地关注于 WebAssembly 后端的新功能,并且加速 Emscripten 的一般改进。

详情查看原文:

https://v8.dev/blog/emscripten-llvm-wasm


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部