Emscripten 将默认 LLVM WebAssembly 为 WASM 后端
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 的一般改进。
详情查看原文:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OSChina 周二乱弹 —— 下一个轮到你戴假发了
Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :还是老歌最耐听 #今日歌曲推荐# 《Somebody's Me》 - Enrique Iglesias 手机党少年们想听歌,请使劲儿戳(这里) @键仙 :昨晚只睡了3个多小时,十分疲劳 你问我为什么? 因为马上要立秋了么? 蚊子可疯狂了。 睡不好, 周一上班感觉上班的时间光怪陆离的, @键仙 :仿佛陷入了克苏鲁的世界 你要是真穿越到了克苏鲁的神话世界里, 按下面的生存指南…… 另外无论睡了几个小时, 你只要早晨好好吃饭, 都会觉得好一些。 @xiaoshiyue :包子只有早上吃才好吃 我给你找一个早晨晚上都不好吃的包子。 “地狱熔岩包 。” 最起码吃包子简单一些吧, 一个人吃饭, 别要求太多。 @qiaoaniu :下雨,打伞去吃饭,伞放门口,吃完饭,伞没了 伞没了, 就没了, 你这是没遇到过饭没的时候, 单身吃个饭都要提心吊胆的。 @ 还想问一句话, 人民币破7了, 对我们吃饭有什么影响哇, @每走一步都在掉渣 :人民币破7了? @吐槽的达达仔 :大家对汇率破7危害一点都不了解,人民币升值预期会带来外汇投入,但是相...
- 下一篇
每日一博 | 从 PaaS 平台到 aPaaS 平台
互联网行业喜欢搞一些单词的缩写,最近一个朋友换工作,说是去搞aPaaS平台了,那么aPaaS平台是什么呢? 了解下云计算 aPaas是衍生在云平台之上的,如果开发一款应用,需要涉及大量基础技术或者基础设置。 如果从技术层次上划分来说,分为以下几层: application层 data层 runtime层 middleware层 OS层 virtualization层 servers层 storage层 networking层 在以前软件开发及维护过程中需要购买并维护这9层设施,而一些公司可以将这9层基础技术或者基础设施打包起来出售,就是云计算了。 慢慢云计算,云服务就变成了我们服务底层的水电煤,我们每个月交钱就可以了,比自己维护这9层来说简单了很多。 针对这9层的打包方式分为以下几种方式: IaaS:基础即服务 PaaS:平台即服务 SaaS:软件即服务 aPaaS是什么 可以将aPaaS理解为PaaS的一种形式,aPaaS(application Platform as a service,应用程序即服务)。基于aPaaS的解决方案,支持应用程序在云端开发,部署和运行,提供软件开发中...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群