Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Practical Emscripten - Mozilla Vision 2012

1,576 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

Practical Emscripten - Mozilla Vision 2012

  1. 1. 実戦 Emscripten Practical Emscripten ushiroad12年1月24日火曜日
  2. 2. 0:20 Whats’s Emscripten? (大部分の)作者 Alon Zakaiさん on Mozilla Mobile Team 既存のC/C++資産を Webに持ち込む 銀の弾丸 http://emscripten.org/12年1月24日火曜日
  3. 3. 0:50 Whats’s Emscripten? LLVM to Javascript Compiler LLVM bitcode Javascript C code int main(){ clang load $1 = HEAP[$2]; .......... } icmp $3 = $1 < $4; 結果としてC/C++コードを移植できる •LLVMの命令をJSでシミュレートする • 人間的な 移植作業を自動化するのはさすがに難しい •当然、オーバーヘッドが出てくる(短所) •解析部分は 本物の Cコンパイラを使える(長所)12年1月24日火曜日
  4. 4. Emscripten DOES NOT #include <stdio.h> function main() { #include <stdlib.h> var i; var buf = " Hello!"; int main() { for (i = 0;i < 10;i++) { int i; puts(buf.substring(9-i)); char* buf = " Hello!"; } for (i = 0;i < 10;i++) { puts(buf + (9-i)); return 0; } } return 0; }12年1月24日火曜日
  5. 5. function _main() { But…… var __label__; __label__ = -1; while(1) switch(__label__) { case -1: // $0 var $1; var $i; var $buf; $1=0; $buf=((__str)|0); $i=0; __label__ = 1; break; for (i = 0; case 1: // $2 var $3=$i; i < 10; var $4=((($3))|0) < 10; i++) if ($4) { __label__ = 2; break; } else { __label__ = 4; break; } case 2: // $5 : : case 3: // $11 ちなみにメモリ、ポインタは var $12=$i; 配列でシミュレート var $13=((($12)+1)|0);12年1月24日火曜日 $i=$13;
  6. 6. 1:40 パフォーマンス 実用的な速さで動くの? Test program 30600点の座標変換、照明計算 Vector × Matrix Vector・Vector JS “Native” VS C ➡ JS12年1月24日火曜日
  7. 7. パフォーマンス 60ms 45ms 30ms 15ms faster 0ms Chrome 16 Firefox 10 JS Emscripten12年1月24日火曜日
  8. 8. パフォーマンス 700ms ➡ 少し昔のJavascript よりは格段に速い 525ms 350ms 175ms 0ms Chrome 16 Firefox 10 Firefox 2.0 JITなしの頃は…… JS Emscripten12年1月24日火曜日
  9. 9. まとめ: Emscripten を使うべきか? 判断のポイント 対価: 実行速度(手書きより数倍遅くなる) 得られるもの: 莫大な移植作業の時間 ➡ 一瞬 数倍の高速化のために莫大な時間を支払って手書きする? (もちろん、そちらを選択すべき場合もある)12年1月24日火曜日
  10. 10. Demo 名前が被ってるのでそのうち変えます JSViz http://ushiroad.com/jsviz/12年1月24日火曜日
  11. 11. Demo GraphViz digraph { A -> B -> C; A -> C -> D; A -> D; D -> E -> F -> B; }12年1月24日火曜日
  12. 12. 3:00 Demo GraphViz + Interactive + Animation12年1月24日火曜日
  13. 13. !ank y" http://ushiroad.com/ にEmscriptenのインストール方法等の記事があります が、Emscripten の変化が激しすぎて既に古くなっているので要注意。 LLVMのバージョン、JSエンジンの種類に注意。 ushiroad12年1月24日火曜日

×