SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
実戦 Emscripten
               Practical Emscripten




                                      ushiroad

12年1月24日火曜日
0:20




       Whats’s Emscripten?




        (大部分の)作者

         Alon Zakaiさん
          on Mozilla Mobile Team

           既存のC/C++資産を
         Webに持ち込む 銀の弾丸


                                   http://emscripten.org/
12年1月24日火曜日
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日火曜日
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日火曜日
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;
1:40




       パフォーマンス

       実用的な速さで動くの?
        Test program
         30600点の座標変換、照明計算
          Vector × Matrix
          Vector・Vector


                            JS “Native”
                              VS


                            C ➡ JS



12年1月24日火曜日
パフォーマンス

              60ms


              45ms


              30ms


              15ms
 faster

               0ms
                     Chrome 16           Firefox 10

                          JS     Emscripten


12年1月24日火曜日
パフォーマンス

              700ms
                                                       ➡ 少し昔のJavascript
                                                          よりは格段に速い
              525ms



              350ms



              175ms



                0ms
                      Chrome 16        Firefox 10      Firefox 2.0
                                                          JITなしの頃は……


                                  JS      Emscripten


12年1月24日火曜日
まとめ: Emscripten を使うべきか?



              判断のポイント

               対価: 実行速度(手書きより数倍遅くなる)

               得られるもの: 莫大な移植作業の時間 ➡ 一瞬




                   数倍の高速化のために莫大な時間を支払って手書きする?
                        (もちろん、そちらを選択すべき場合もある)

12年1月24日火曜日
Demo



              名前が被ってるのでそのうち変えます




               JSViz
                http://ushiroad.com/jsviz/




12年1月24日火曜日
Demo


                    GraphViz

     digraph {
       A -> B -> C;
       A -> C -> D;
       A -> D;
       D -> E -> F -> B;
     }



12年1月24日火曜日
3:00




       Demo



               GraphViz
                   +
              Interactive
                   +
               Animation

12年1月24日火曜日
!ank y"



 http://ushiroad.com/ にEmscriptenのインストール方法等の記事があります
 が、Emscripten の変化が激しすぎて既に古くなっているので要注意。
 LLVMのバージョン、JSエンジンの種類に注意。                           ushiroad

12年1月24日火曜日

Weitere ähnliche Inhalte

Andere mochten auch

Cuento del mega extrem
Cuento del mega extremCuento del mega extrem
Cuento del mega extrem
julen102011
 
Universidad central del ecuador
Universidad central del ecuadorUniversidad central del ecuador
Universidad central del ecuador
LourdesLombeida
 
Apresentação internet cidadão
Apresentação internet cidadãoApresentação internet cidadão
Apresentação internet cidadão
Sabrina_Tavares
 
Projecte d'ensenyament de la llengua d'acollida
Projecte d'ensenyament de la llengua d'acollidaProjecte d'ensenyament de la llengua d'acollida
Projecte d'ensenyament de la llengua d'acollida
societatdigital
 
Proyecto innovador en la economía
Proyecto innovador en la economíaProyecto innovador en la economía
Proyecto innovador en la economía
dagonzalez9
 
Proyecto educación física y ética.
Proyecto educación física y ética.Proyecto educación física y ética.
Proyecto educación física y ética.
Silvia Artiques
 
Os portugues no oriente 8º6ª (liliana, diogo mateus leandro daniel e joana)
Os portugues no oriente   8º6ª (liliana, diogo mateus leandro daniel e joana)Os portugues no oriente   8º6ª (liliana, diogo mateus leandro daniel e joana)
Os portugues no oriente 8º6ª (liliana, diogo mateus leandro daniel e joana)
luisaprof
 

Andere mochten auch (20)

La célula jp
La célula jpLa célula jp
La célula jp
 
Energia solar
Energia solarEnergia solar
Energia solar
 
Soinua eta zaratea
Soinua eta zarateaSoinua eta zaratea
Soinua eta zaratea
 
Cuento del mega extrem
Cuento del mega extremCuento del mega extrem
Cuento del mega extrem
 
Mirikol barraskiloa
Mirikol barraskiloaMirikol barraskiloa
Mirikol barraskiloa
 
Baaskaa 1
Baaskaa 1Baaskaa 1
Baaskaa 1
 
Universidad central del ecuador
Universidad central del ecuadorUniversidad central del ecuador
Universidad central del ecuador
 
Apresentação internet cidadão
Apresentação internet cidadãoApresentação internet cidadão
Apresentação internet cidadão
 
Projecte d'ensenyament de la llengua d'acollida
Projecte d'ensenyament de la llengua d'acollidaProjecte d'ensenyament de la llengua d'acollida
Projecte d'ensenyament de la llengua d'acollida
 
Entorno visual p2
Entorno visual p2Entorno visual p2
Entorno visual p2
 
ALASKA
ALASKAALASKA
ALASKA
 
Presentacion excel3
Presentacion excel3Presentacion excel3
Presentacion excel3
 
Mapa conceptua lmio11
Mapa conceptua lmio11Mapa conceptua lmio11
Mapa conceptua lmio11
 
Proyecto innovador en la economía
Proyecto innovador en la economíaProyecto innovador en la economía
Proyecto innovador en la economía
 
El papel de las instituciones universitarias y de investigación occidentales ...
El papel de las instituciones universitarias y de investigación occidentales ...El papel de las instituciones universitarias y de investigación occidentales ...
El papel de las instituciones universitarias y de investigación occidentales ...
 
Socialização de conteúdo2
Socialização de conteúdo2Socialização de conteúdo2
Socialização de conteúdo2
 
Proyecto educación física y ética.
Proyecto educación física y ética.Proyecto educación física y ética.
Proyecto educación física y ética.
 
Cunducri blanca
Cunducri blancaCunducri blanca
Cunducri blanca
 
Amasa-Villabona herriaren deskripzioa. Marina-Igor
Amasa-Villabona herriaren deskripzioa. Marina-IgorAmasa-Villabona herriaren deskripzioa. Marina-Igor
Amasa-Villabona herriaren deskripzioa. Marina-Igor
 
Os portugues no oriente 8º6ª (liliana, diogo mateus leandro daniel e joana)
Os portugues no oriente   8º6ª (liliana, diogo mateus leandro daniel e joana)Os portugues no oriente   8º6ª (liliana, diogo mateus leandro daniel e joana)
Os portugues no oriente 8º6ª (liliana, diogo mateus leandro daniel e joana)
 

Ähnlich wie Practical Emscripten - Mozilla Vision 2012

PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
Takuya Tsuchida
 
函館IKA Eclipse活用術
函館IKA Eclipse活用術函館IKA Eclipse活用術
函館IKA Eclipse活用術
Masahiro Wakame
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
 

Ähnlich wie Practical Emscripten - Mozilla Vision 2012 (20)

JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
kagamicomput201806
kagamicomput201806kagamicomput201806
kagamicomput201806
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
“Stay Right”ペンテスト体験:SANS Holiday Hack Challenge 2017の解説 & Walkthrough
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
函館IKA Eclipse活用術
函館IKA Eclipse活用術函館IKA Eclipse活用術
函館IKA Eclipse活用術
 
Cross Platform Make
Cross Platform MakeCross Platform Make
Cross Platform Make
 
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
boost - std - C#
boost - std - C#boost - std - C#
boost - std - C#
 
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 

Practical Emscripten - Mozilla Vision 2012

  • 1. 実戦 Emscripten Practical Emscripten ushiroad 12年1月24日火曜日
  • 2. 0:20 Whats’s Emscripten? (大部分の)作者 Alon Zakaiさん on Mozilla Mobile Team 既存のC/C++資産を Webに持ち込む 銀の弾丸 http://emscripten.org/ 12年1月24日火曜日
  • 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. 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. 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. 1:40 パフォーマンス 実用的な速さで動くの? Test program 30600点の座標変換、照明計算 Vector × Matrix Vector・Vector JS “Native” VS C ➡ JS 12年1月24日火曜日
  • 7. パフォーマンス 60ms 45ms 30ms 15ms faster 0ms Chrome 16 Firefox 10 JS Emscripten 12年1月24日火曜日
  • 8. パフォーマンス 700ms ➡ 少し昔のJavascript よりは格段に速い 525ms 350ms 175ms 0ms Chrome 16 Firefox 10 Firefox 2.0 JITなしの頃は…… JS Emscripten 12年1月24日火曜日
  • 9. まとめ: Emscripten を使うべきか? 判断のポイント 対価: 実行速度(手書きより数倍遅くなる) 得られるもの: 莫大な移植作業の時間 ➡ 一瞬 数倍の高速化のために莫大な時間を支払って手書きする? (もちろん、そちらを選択すべき場合もある) 12年1月24日火曜日
  • 10. Demo 名前が被ってるのでそのうち変えます JSViz http://ushiroad.com/jsviz/ 12年1月24日火曜日
  • 11. Demo GraphViz digraph { A -> B -> C; A -> C -> D; A -> D; D -> E -> F -> B; } 12年1月24日火曜日
  • 12. 3:00 Demo GraphViz + Interactive + Animation 12年1月24日火曜日
  • 13. !ank y" http://ushiroad.com/ にEmscriptenのインストール方法等の記事があります が、Emscripten の変化が激しすぎて既に古くなっているので要注意。 LLVMのバージョン、JSエンジンの種類に注意。 ushiroad 12年1月24日火曜日