对不起,我是WebAssembly( wasm )的新手,我正在做一个项目,用ffmpeg和wasm在浏览器上解码视频以提高性能。
我使用了Emscripten(emcc)来编译ffmpeg到wasm,并使事情得以进行。然而,由于Emscripten不能编译内联汇编代码,所以在web上使用wasm的视频解码几乎比不支持的本地解码慢3-5倍,而且使用的可能很高。
据我所知,wasm是一个基于堆栈的vm,而asm是特定于cpu的,但是没有,wasm与的目标是距离本地速度很远。在对wasm和asm的基本概念进行了深入的研究之后,我认识了一些编译器,比如nasm来执行跨平台的asm,是否有一些编译器前端将llvmir和asm指令放在一起,以便在wasm中具有内联和asm支持的?
发布于 2019-02-20 12:07:03
为了补充szatmary的答案,实际上无法将x86代码转换为wasm字节码。因此,目标是ARM的C编译器只是忽略了内联的asm指令(不管是x86、ARM还是其他什么)。
我想理论上这是可能的,但我怀疑有人会这么做。用例真的很薄,IMHO。人们正在编写内联x86,试图优化性能瓶颈,但这是以可移植性为代价的。可移植性是Wasm的主要目标之一.
您的性能不佳并不是因为缺乏x86支持。这仅仅是因为wasm是字节码,这永远不会像本机代码那么快。也许JIT能帮上忙,但不要期望太大。
发布于 2019-02-18 19:40:18
不,如果不使用C或另一种高级语言作为中介,就没有x86可用于wasm编译器。
https://stackoverflow.com/questions/54752139
复制相似问题