对不起,我是WebAssembly(wasm)的新手,正在使用ffmpeg和wasm在浏览器上解码视频,以提高性能。
我使用Emscripten(emcc)将ffmpeg编译为wasm并使事情有效。但是,由于Emscripten无法编译内联汇编代码,因此使用web上的wasm进行视频解码的速度几乎比不支持asm的本机解码慢3-5倍,并且CPU使用率可能非常高。
据我所知,wasm是一个基于堆栈的vm,而asm是cpu特定的,但是没有asm,wasm离本机速度的目标相当远。在有一天搜索了wasm和asm等的基本概念后,我知道一些像nasm这样的编译器来执行跨平台的asm,是否有一些编译器前端将llvmir和asm指令放在一起以便有内联asm和asm-在wasm支持?
为了补充szatmary答案,实际上没有办法将x86代码转换为wasm字节码。因此,针对wasm的C编译器只是忽略内联asm指令(无论是x86,ARM,无论如何)。
我认为这在理论上是可能的,但我怀疑有人会这样做。用例非常薄恕我直言。人们正在编写内联x86以尝试优化性能瓶颈,但这是以可移植性为代价的。便携性是Wasm的主要目标之一......
你所拥有的性能不是因为缺乏x86支持。这只是因为wasm是字节码,而且永远不会像本机代码那么快。也许JIT可以帮助那里,但没有太大的期望。
不,没有使用C或其他更高级语言作为中介,没有x86到wasm编译器。