在浏览器中,多线程WebAssembly的速度比单线程慢,为什么?

时间:2019-02-17 00:44:51

标签: c++ multithreading emscripten webassembly

在不使用Emscripten几年之后,我最近发现它现在支持将多线程C ++代码编译为WebAssembly。我整理了简单的合并排序代码,对1000万个浮点数进行了排序(本机代码可以轻松对更多排序,但浏览器似乎将内存限制为1GB)

https://github.com/bsergeev/MtMergeSort

令人惊讶的是,尽管此代码可编译为WebAssembly并在Chrome中运行,但随着使用多个线程,浏览器中的排序变得越来越慢(而按预期,单线程性能是本机线程的1.5 ... 2倍) :本机代码1.80秒,WebAssembly 3.1 ... 3.3秒和JavaScript 4.69秒):

Comparison of x64 vs. WebAssembly vs. JavaScript

浏览器限制WebWorkers导致的多线程性能下降吗?但是,WebAssembly中的多个线程又有什么意义呢?

1 个答案:

答案 0 :(得分:1)

原来,罪魁祸首是在b中不同线程上分配左/右临时数组。一旦我在主线程上预分配了临时数组,WebAssembly就可以很好地扩展: Multi-threaded performance