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

问题描述 投票:1回答:1

在不使用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中多线程的重点是什么呢?

c++ multithreading emscripten webassembly
1个回答
2
投票

事实证明,罪魁祸首是在merge()的不同线程上分配左/右临时数组。一旦我在主线程上预先分配了临时数组,WebAssembly就可以很好地扩展:Multi-threaded performance

© www.soinside.com 2019 - 2024. All rights reserved.