【问题标题】:How can I build an intuitive sense of the relative cost of WebAssembly instructions?如何直观地了解 WebAssembly 指令的相对成本?
【发布时间】:2026-02-05 10:25:02
【问题描述】:

我正在构建一个simple compiler,它会发出 WebAssembly。在我制作编译器将发出的 Wasm 时,通常有多种方法可以实现给定的行为,我不确定哪一种会更好。

例如,在某些情况下,我可以链接一些数学指令来避免将值存储/检索到变量中/从变量中取出。什么时候值得做出这种权衡?这甚至是我应该考虑的事情吗?

显然,该问题的唯一真正答案是“构建两者,然后测量多个 Wasm 解释器的性能”,但对于我的问题数量而言,这感觉不可行。我猜有些类型的指令比其他指令贵一个数量级,知道这将有助于我做出更好的直观决策。

对于如何思考这个问题,有什么经验法则吗?有没有人写过这个?是否有工具可以告诉我给定的浏览器/解释器会将 Wasm 的 sn-p 编译成什么?

【问题讨论】:

    标签: performance compiler-optimization webassembly


    【解决方案1】:

    听起来您需要类似于 JsPerf 但用于 WASM 的东西。

    性能将取决于您使用的浏览器和版本,恐怕这里没有一个好的答案。如果你看一下 js 的性能随着时间的推移,编译器确实会有所帮助,但可以做一些有意义的事情的是供应商。

    随着时间的推移,我们可以预期 wasm 和原生应用程序之间的差距会缩小很多,我怀疑 wasm 的主要瓶颈是 js 和 wasm 之间的桥梁。

    有一篇你可能感兴趣的论文:https://www.usenix.org/system/files/atc19-jangda.pdf

    【讨论】:

      【解决方案2】:

      您可以优化 Wasm 代码以减小 输出大小。实际上,可以更快地下载较小的输出文件。如果您的 Wasm 代码存储在 Web 服务器上并在客户端浏览器中执行,这一点很重要。

      除此之外,浏览器中的 Wasm 编译器也可以优化代码。但即使在这种情况下,提前在编译器中进行优化也不是完全没有意义的,因为浏览器给浏览器带来了更多负担,很可能经常会导致它将代码编译为原生二进制文件更慢。这会导致加载时间稍长或 Web 应用程序响应速度稍慢

      【讨论】: