我有一些非常简单的基准测试,通过 Catch2 运行,并使用 -O3 进行编译emscripten 3.1.37:
BENCHMARK("cpp sin only")
{
double sum = 1.0;
for (int t = 0; t < 2000000; ++t) {
sum += sin(double(t));
}
return sum;
};
#ifdef __EMSCRIPTEN__
BENCHMARK("js sin only")
{
EM_ASM_DOUBLE({
let sum = 1;
for (let i = 0; i < 2000000; i++) {
sum = sum + Math.sin(i);
}
return sum;
});
};
#endif
Run Code Online (Sandbox Code Playgroud)
我预计 JavaScript 和 WebAssembly 之间不会有太大差异,但有:
chrome:
benchmark name samples iterations est run time
mean low mean high mean
std dev low std dev high std dev
-------------------------------------------------------------------------------
cpp sin only 100 1 7.93775 s
79.3856 ms 79.147 ms 79.7195 ms
1.43061 ms 1.10437 ms 1.97222 ms
js sin only 100 1 2.21506 s
22.1354 ms 22.0064 ms 22.3 ms
742.138 us 614.746 us 901.128 us
Run Code Online (Sandbox Code Playgroud)
本机,用 编译GCC 12.3.0,我得到 24.2ms。
-fast-math不会提高 double 的性能。Chrome 中的快速数学浮动变得与 JavaScript 一样快,在 FF 中仍然在 30 毫秒左右。更新(我根据评论中的请求运行了几个额外的基准测试):
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |