LoginSignup
2
0

More than 1 year has passed since last update.

C/C++ アプリを WASI で WasmEdge で動かすメモ

Last updated at Posted at 2022-09-23

WebAssemblyランタイム比較(Lucet, Wasmer, Wasmtime)
https://zenn.dev/zaki_yama/scraps/cd40f7535b3224

wasi-sdk + wasmer-python で C/C++ アプリを WASM でポータブルに動かすメモ
https://qiita.com/syoyo/items/300d4ef7fd105e69ad10

WASI で動かすのは wasmer, wasmtime が主にありましたが,
最近(2022/09 時点), WasmEdge というのも出てきました.
AOT(Ahead of time) compile で高速実行目指す?っぽい.
C/C++ アプリを速度落とさずのサンドボックス実行できそうな気がしますので試してみます.

  • wasmer(C/C++ をポータブルなプラグインにして Python で呼んだりしたいときとか)
  • wasmtime : 最近(2022/09) 1.0 リリースされてセキュリティ的に安心して使いたいとき用?
  • WasmEdge : C/C++ アプリを限りなく爆速で sandbox(isolation)実行したいとき用?

という感じの棲み分けになるのでしょうか...

SIMD, thread

wasmtime とかと違い?(一応 wasmtime とかでもサポートされているようではあるが...)
SIMD, thread が使えます.

ただどれだけセキュアに使えるかどうかは不明です.

TinyGLTF を動かす.

TinyGLTF を試してみます. thread や SIMD は使っていません.

まず wasi-sdk あたりで .wasm 作っておきます.

その後, wasmedgec.wasm を AOT コンパイルします(数分くらいかかりました)

$ wasmedgec loader_example.wasm loader_example.aot.wasm

あとは実行するだけです!

--dir でファイルアクセスを許可するフォルダを指定します. ../ など親フォルダはダメでしたので, カレントディレクトリあたりにファイルを置いておきましょう.

$ wasmedge --dir . loader_example.aot.wasm Cube.gltf
Reading ASCII glTF
=== Dump glTF ===
asset.copyright          : 
asset.generator          : VKTS glTF 2.0 exporter
asset.version            : 2.0
asset.minVersion         : 

=== Dump scene ===
defaultScene: 0
scenes(items=1)
.. 

Voila!

thread 対応

WASM 自体では C/C++ のネイティブな Thread 対応は現状(2022/09 時点)無理です.
現状ですと C から JS レイヤーで Worker を建てる感じでの対応になっています.

SIMD

実行側で SIMD 機能のある CPU が必要になりそうな予感...?
あと, WASM SIMD は iOS Safari では対応していませんので, 同じ WASM バイナリをブラウザで動かしたいときなどは SIMD on/off でコンパイルし直しが必要になります.

TODO

  • WasmEdge の thread API を試してみる.
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0