4

この asm.js をテストするために、jsPref を作成しました: http://jsperf.com/asm-diag

asmjs コードは通常の js コードよりも 2 倍遅く、firefox nightly でも実行されるため、何か間違ったことをしたと思います。

コードの何が問題なのかわかりません。

前もって感謝します、


編集:

Benchmark.prototype.setup = function() {
  function DiagModule(stdlib, foreign, heap) {
      "use asm";

      // Variable Declarations
      var sqrt = stdlib.Math.sqrt;
      var pow = stdlib.Math.pow;

      // Function Declarations
      function square(x) {
          x = x|0;
          return (pow(x, 2))|0;
      }

      function diag(x, y) {
          x = x|0;
          y = y|0;
          return +sqrt(square(x) + square(y));
      }

      return { diag: diag };
  }

  diag = DiagModule({ Math: Math }).diag;
};

asm:

var _diag = diag(10, 100);

通常:

var _diag = Math.sqrt(Math.pow(10, 2) + Math.pow(100, 2))
4

2 に答える 2

6
  1. JS から asm.js 関数を呼び出すと、かなりのオーバーヘッドが発生し、ベンチマークしている関数は、呼び出しのオーバーヘッドを補うのに十分な作業を行いません。

    asm.js 関数を使用する場合は、asm<->JS 通信を最小限に抑え、asm.js モジュールでより多くの作業を行うようにしてください。

  2. jsperf は、テスト中に asm.js モジュールを数回強制的に再コンパイルしますが、Firefox はまだ再コンパイルをサポートしていないため、jsperf テストは asm.js モードで実行されることはありません。

于 2013-06-06T01:31:06.623 に答える