2013-07-30 9 views
30

です。Firefoxが速くasm.jsプロファイルを使用していないようです、まだChromeは

私はasm.jsウェブサイトから小さな関数を取りました。私はモジュールパターンを使用してラップします:一度asm、一度同じ構文で、しかし "asmを使用する"注釈なしで、そして一度vanilla-javascriptのように。

var add_asm = (function MyAOTMod(stdlib, foreign, heap) { 
    "use asm"; 
    var sqrt = stdlib.Math.sqrt; 

    function square(x) { 
    x = +x; 
    return +(x * x); 
    } 
    return function(x, y) { 
    x = +x; // x has type double 
    y = +y; // y has type double 
    return +sqrt(square(x) + square(y)); 
    }; 
}(window)); 

var add_reg_asmstyle = (function MyAsmLikeRegularMod() { 

    function square(x) { 
    x = +x; 
    return +(x * x); 
    } 
    return function(x, y) { 
    x = +x; // x has type double 
    y = +y; // y has type double 
    return +Math.sqrt(square(x) + square(y)); 
    }; 
}()); 


var add_reg = (function MyStrictProfile() { 
    "use strict"; 
    return function(x, y) { 
    return Math.sqrt(x * x + y * y); 
    }; 
}()) 

Iが小さいjsperfを作成した: jsperfコードが http://jsperf.com/asm-simple/7

以下ディスカッションスレッドから上記組み込む先端からわずかに異なる性能は、Firefox 22はASMで最も遅いことを示しています-syntax( "asmの使用"の有無にかかわらず)、chromeはasm-modeで最速です。

私の質問です:これはどのように可能ですか?私はFirefoxがASMモードで最速になると期待しています。私はChromeの違いを見るとは思っていません。間違ったasm構文を使用しますか?私は何が欠けていますか?

アドバイスや説明をいただければ幸いです。ありがとう、

+0

私は何も知りませんどんなASMであっても、Firefoxはなぜ最速になると思いますか?異なるJavaScriptエンジンを使用していることはご存じでしょうか?すべてのブラウザのパフォーマンスは異なります – Ian

+0

セットアップで関数を呼び出して(コンパイルをトリガーするため)、 – SheetJS

+3

@Ian:OPは各ブラウザのASMコードと非ASMコードを比較して、その違いを確認します。 ChromeはASMの最適化AFAIKをサポートしていないため、アノテーションは違いをもたらすべきではありませんが、FireFoxはサポートしています。 OPはFFとChromeを比較していません。 –

答えて

7

Firefoxでコードを実行すると、asm.js呼び出しの速度が大幅に低下することがあります。これは、繰り返しコンパイル(コンソールに表示される)またはjs-to -asmが呼び出されます。フィドルを見て -

one performance fault that we already know trips up people trying to benchmark asm.js is that calling from non-asm.js into asm.js and vice versa is much slower than normal calls due to general-purpose enter/exit routines. We plan to fix this in the next few months but, in the meantime, for benchmarking purposes, try to keep the whole computation happening inside a single asm.js module, not calling in and out.

自分自身でそれを表示するには:http://jsperf.com/asm-simple/10

  • Firefoxの26:22,600K ops /秒でのこの仮説はさらにLuke Wagner、asm.jsの実装によってstrenghtenedされますasm-asm case対asm-jsの場合の(!)
  • クローム28:18K 13K
  • IE11対:〜すべてのテストのために7.5K、観察されなかっ大きな違い、それは輝くデッドコードellimination、を除く;)
+0

//警告: 'TypeError:asm.js型のエラー:比較の引数は、符号付き、符号なし、または倍精度でなければなりません。 intとintが '与えられた'は本物かバグです。観察されたスピードブーストは私にちょうど迷惑メッセージを信じさせる。 – c69

関連する問題