【问题标题】:Is there an standard benchmark for webAssembly?webAssembly 有标准的基准测试吗?
【发布时间】:2019-07-13 05:25:55
【问题描述】:

是否有针对 webAssembly 或程序语言的标准基准测试?

我想将我的 c++ 程序迁移到 webAssembly,所以我必须做一些基准测试来测试 webAssembly 的性能并将其与 c++ 性能进行比较。

【问题讨论】:

    标签: c++ testing benchmarking webassembly


    【解决方案1】:

    还没有。但是对于 Wasm CG 创建一个全面的基准测试套件已经达成了强烈的共识,请参阅notes from the last F2F meeting 和链接的幻灯片。最近为它创建了一个 GHrepository,但它目前只包含一般信息。

    【讨论】:

      【解决方案2】:

      更新(调查后@Webassembly SF)

      在参加了 Webassembly Meetup 并征求了各种人的意见之后。我很幸运地偶然发现了一些对此进行了非常彻底的思考的人。

      1. 仅当您只想比较 Javascript 的首次运行(JIT 优化前)与 wasm 速度时,才使用 Fib Seq。这对于查看对浏览器的更新或机器的更改是否有显着影响更有用。但是:它是一个 Microbenchmark,因此它不会让您全面了解所有不同类型的速度。 (在每种类型的操作中,一种语言并不总是比另一种语言快 x 数量)。 TLDR:其他人已经写出来了(不需要自己写)。除非您的程序专门用于 fib seq,否则只能将其与一组其他基准测试功能一起查看。 :D。
      2. 您真正想做什么:为您现有应用程序中最昂贵的操作进行微基准测试。这实际上取决于您要执行的应用程序。对您来说最好的选择可能是在运行时分析您现有的 c++ 应用程序,以查看哪些操作占用的时间最多。然后,为那些“昂贵”的操作创建某种批量单元测试。假设它是对图像像素的操作:创建一个测试,插入 100 张图片并计算平均执行时间。然后专注于在 .wasm 中重新创建特定的“批量”测试,看看您将体验到哪些性能变化。这可以帮助您决定是否要迁移/能够预测迁移的速度影响。
      3. 昨晚阐明这一点的一个人是 Aaron Turner,他有一篇与基准化 wasm 相关的精彩相关文章,这里是他的文章,因为我不想为他说话:https://medium.com/@torch2424/webassembly-is-fast-a-real-world-benchmark-of-webassembly-vs-es6-d85a23f8e193

      原创

      我一直使用 Fibonacci Sequence to 25 作为我的基准测试。

      我为什么要这样做?

      • 尽管计算成本很高,但使用多种语言进行编程非常容易,无需涉及大量导入库(相对于加密基准测试)

      • 有一些实际用途。

      • 似乎其他人也这样做了...(如有疑问,请自行解决)https://boyan.io/angular-wasm/fibonacci

      但是,我仍然会考虑您使用 webassembly 的目的。 如果您尝试在前端网站上包含 c++ 功能......那么您是否不想测试 Javascript 针对 Webassembly 的速度(因为浏览器不支持“本机”C++ 程序,因此不能在上述条件下进行基准测试?)。我确实知道 Web-Assembly 可以在浏览器之外使用,如果是你的情况(比如物联网传感器),我会收回我之前的断言。

      对于可能阅读本文的绝大多数人来说......他们可能处于“Web 应用程序的 WebAssembly”的头部空间您正在使用 wasm 介绍您的 Web 应用程序。

      如果我的假设或陈述有误,请纠正我。此外,如果权力有一个建议的标准化基准,LMK!我很想听听在网络组装方面有更多经验的人的意见!

      PS:我今晚将参加SF Webassembly会议,并向那里的大佬们提出这个问题!

      【讨论】:

      • 微基准测试通常不是衡量总体性能的好方法,更不用说单个测试了。
      • @AndreasRossberg:尤其不是 this 微基准测试:它要么测试扩展精度,要么测试整数 add 操作的单个依赖链(和/或循环开销) .或者我猜对于递归情况,测试优化器将脑死 O(Fib(n)) 代码转换回 O(n) 循环的能力;看起来都失败了。这至少是一个有趣的微基准测试,但是是的,它并没有告诉我们关于全局的信息,也没有什么可以用 SIMD 或类似的东西进行自动矢量化。
      • @Peter-Cordes & Andreas Rossberg 已更新,但仍想听听您对上述内容的看法,感谢 cmets!
      • 这是一个改进。您可能想澄清“昂贵的操作”必须足够大才能真实,而不仅仅是单个像素上的东西。 (不是那么小,但是 wasm -> 本机机器代码 JIT 执行它,执行将与周围的代码重叠很多,所以上下文很重要。)此外,一些代码可能会在缓存未命中时遇到瓶颈,所以只生成 100 个图像可能意味着它们在缓存中很冷。
      • 你不必总是手写wasm; clang/LLVM 可以编译为 wasm(而不是硬件 ISA 的机器代码或 asm)。 godbolt.org/z/JUxC_v
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2013-04-19
      • 2010-12-30
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多