Practical Emscripten - Mozilla Vision 2012

1,548 views

Published on

Published in: Technology, News & Politics
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,548
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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日火曜日

×