给 PWART(WebAssembly 的 JIT 轻量运行时)增加了性能测试 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pursuer
V2EX    分享发现

给 PWART(WebAssembly 的 JIT 轻量运行时)增加了性能测试

  •  
  •   pursuer 2023-05-19 12:05:50 +08:00 1018 次点击
    这是一个创建于 874 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前写了一个 WebAssembly 的轻量运行时 PWART( https://github.com/partic2/pwart , https://gitee.com/partic/pwart ),感觉 Bug 应该修差不多了,就在前两天做了一次简单的性能测试。在这次性能测试中,发现一些有趣的地方,先放测试结果。

    GCC (-O2) PWART (fixed memory) PWART (dynamic memory) TinyCC V8(Chrome v113)
    Windows10 x86_64 2823ms 3622ms 2720ms 6330ms 2618ms
    Linux aarch64 1561ms 1997ms 2079ms 7681ms 1465ms

    32 位 arm 的也稍测了下,PWART 耗时大约在 GCC -O2 的两倍,tinycc 是 GCC -O2 的三倍。32 位 x86 PWART 耗时大概在 GCC -O2 的 1.5 倍左右。

    WebAssembly 里需要一段线性地址空间作为内存,PWART 就在进入函数时,将线性内存的基地址保存到局部变量,最开始因为局部变量较多,内存基址被挤到内存栈上了,每次 WASM 访问内存,都要从内存栈取出值加上偏移,此时耗时只有 2900ms 左右,后来我把内存基址固定放到寄存器中,耗时居然就增加到 3622ms ,让人十分摸不着头脑,不过在 32 位 arm 上测试这样是有 8%左右性能提升的。还有上表中,dynamic memory 模式需要每次函数返回时更新内存基址,按理来说是额外消耗,结果在 x86_64 上耗时竟然缩短了,不知道 x86 上究竟是有什么黑魔法。

    虽然能理解,但我还是对 WebAssembly 不出指针类型耿耿于怀,在 JIT 实现和 API 设计上都能简单很多,虽然有 ref 特性,但感觉目前 ref 的设计比起指针还是麻烦不少,目前也不存在指向内存空间的 ref 。

    性能优化还是挺难做的,有很多细节要考虑,而且不知道怎么分析性能关键点,有大佬有相关经验可以分享一下。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1054 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:08 PVG 07:08 LAX 16:08 JFK 19:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86