【发布时间】:2019-02-18 17:03:27
【问题描述】:
抱歉,我是 WebAssembly(wasm) 的新手,正在开发一个项目,使用 ffmpeg 和 wasm 在浏览器上解码视频以提高性能。
我已经使用 Emscripten(emcc) 将 ffmpeg 编译为 wasm 并完成了工作。但是,由于 Emscripten 无法编译内联汇编代码,因此在 web 上使用 wasm 进行视频解码几乎比不支持 asm 的本地解码慢 3-5 倍,并且 cpu 使用率可能非常高。
据我所知,wasm 是一个基于堆栈的虚拟机,而 asm 是特定于 cpu 的,但是没有 asm,wasm 与实现本机速度的目标相差甚远。经过一天对 wasm 和 asm 等基本概念的搜索。我知道一些编译器,如 nasm 来执行 cross-platform asm,是否有一些编译器前端有 llvmir和 asm 指令一起,以便在 wasm 中具有 inline-asm 和 asm-supported?
【问题讨论】:
-
NASM 只是跨平台的,因为它可以在潜在的许多不同平台上运行,而不是它生成可以在 x86 CPU 以外的任何平台上运行的机器代码。 WebAbbsembly 不会提供为目标平台(例如 x86)生成任意机器代码的方法,因为这会破坏它的目的,即成为类似于 Java 虚拟机的“安全”虚拟机环境。
标签: assembly ffmpeg webassembly