2013-07-30 14 views
30

Ben ASM nasıl çalıştığını tam olarak anlamaya çalışıyorum ve. Firefox asm.js profili kullanarak daha hızlı olması görünmüyor, henüz içinde tekmelediğinde Krom

Ben asm.js web sitesinden küçük bir işlevi aldı . Ben modül desenini kullanarak sarın: bir kez asm için, aynı sözdizimi ile ancak "asm" ek açıklama olmadan, ve bir kez vanilya-javascript gibi.
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); 
    }; 
}()) 

Ben küçük jsperf yarattı: jsperf kodu http://jsperf.com/asm-simple/7

performansının altında Tartışma dizisinden ipuçları içeren, yukarıdan biraz farklıdır firefox 22 asm ile en yavaş olduğunu gösteriyor -syntax ("asm kullan" açıklamasının eklenmesiyle veya olmadan) ve asm-modunda krom en hızlıdır.

Benim sorum şu: Bu nasıl mümkün olabilir? Firefox'un asm modunda en hızlı olmasını beklerdim. Chrome için bir fark görmeyi beklemezdim. Yanlış bir asm sözdizimi kullanıyor muyum? Neyi kaçırıyorum?

Herhangi bir öneri veya açıklama büyük beğeni topluyor. Teşekkürler,

+0

Bilmiyorum şey ASM ne olursa olsun, ama neden Firefox'un en hızlı olacağını düşünüyorsunuz? Farklı JavaScript motorlarını kullandıklarını biliyorsunuz değil mi? Tüm tarayıcılar – Ian

+0

performansta farklılık kurulumunda kez işlevini çağırın (derleme tetiklemek için) ve daha sonra sonuç – SheetJS

+3

@Ian bkz: OP yapar farkı görmek için her tarayıcıda ASM ve non-ASM kodu karşılaştırmaktadır. Chrome, ASM optimizasyonlarını AFAIK desteklemiyor. Bu nedenle, açıklama, bir fark yaratmamalı, FireFox bunu desteklemelidir. OP, FF'yi Chrome ile karşılaştırmıyor. –

cevap

7

Firefox'ta kod çalıştırdığınızda, çoğunlukla asm.js çağrıları için devasa bir düşüş görebilirsiniz; bu, büyük olasılıkla tekrarlanan derleme (konsolda görünebilir) veya js-to maliyetinden kaynaklanır. -asm çağırır. Turp bakmak -

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.

kendin görmek için:: http://jsperf.com/asm-simple/10

  • Firefox 26: 22,600K op/sn Bu hipotez ileri Luke Wagner, asm.js implementor güçlenen unsurun asm-js durumu vs (!) asm-js durumundadır.
  • Krom 28: 18K 13K
  • IE11 vs: ~ tüm testlerde 7.5K, hiçbir büyük fark gözlendi, bu parlar ölü kod ellimination hariç ;)
+0

// 'TypeError: asm.js' türünde bir hata olursa uyarı yok: Bir karşılaştırmaya ilişkin argümanların hem imzalanmış hem de imzasız olması gerekir; int ve int verilir 'hakiki veya bir hatadır. Gözlenen hız artışı beni sadece bir gereksiz mesaja belittiriyor. – c69

İlgili konular