Проблемы при компиляции x86 asm и inline-asm в ffmpeg для WebAssembly - PullRequest
0 голосов
/ 18 февраля 2019

Извините, я новичок в WebAssembly (wasm) и работаю над проектом по декодированию видео в браузере с помощью ffmpeg и wasm для повышения производительности.

Я использовал Emscripten (emcc) для компиляции ffmpeg в wasm, и все заработало.Однако, поскольку Emscripten не может скомпилировать встроенный код ассемблера, декодирование видео с помощью wasm в сети почти в 3-5 раз медленнее , чем собственное декодирование без поддержки asm, и использование процессора может быть очень высоким.

Насколько я знаю, wasm - это основанный на стеке vm, в то время как asm специфичен для процессора, но без asm wasm довольно далеко далеко от цели до собственной скорости.После некоторого дня поисков базовой концепции wasm, asm и т. Д. Я знал некоторые компиляторы, такие как nasm для выполнения кросс-платформенного asm , есть ли какой-нибудь интерфейс компилятора, чтобы иметь llvmir и asmинструкции вместе, чтобы иметь inline-asm и asm-support в wasm?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

В дополнение к ответу szatmary, на самом деле нет способа преобразовать код x86 в wasm байт-код.Поэтому компиляторы C, нацеленные на wasm, просто игнорируют встроенные директивы asm (будь то x86, ARM и т. Д.).

Я полагаю, что это может быть теоретически возможно, но я сомневаюсь, что кто-то сделает это.Варианты использования действительно тонкие ИМХО.Люди пишут встроенный x86, чтобы попытаться оптимизировать узкие места в производительности, но это происходит за счет переносимости.А мобильность - одна из главных целей Wasm ...

У вас не наблюдается снижения производительности из-за отсутствия поддержки x86.Это просто потому, что wasm является байт-кодом, и это никогда не будет так быстро, как нативный код.Может быть, JIT может помочь там, но не слишком большие ожидания.

0 голосов
/ 18 февраля 2019

Нет, нет компилятора x86 to wasm без использования C или другого языка более высокого уровня в качестве посредника.

...