javascript-为什么多维数据集比squ快

我这样写:

  var max = 0xffffff * 4;
  var step = 1 / max;
  function cube() {
    var result = 0.;
    for (var x = 0.; x < 1; x += step) {
      result += x * x * x;
    }
    return result;
  }
  function mul() {
    var result = 0.;
    for (var x = 0.; x < 1; x += step) {
      result += x * x;
    }
    return result;
  }
  function go() {
    var r = '';
    r += cube() + ' \n';
    r += mul() + ' \n';
    alert(r);
  }

并在Chrome分析器中查看结果:

mul: 106ms 
cube: 87ms

那怎么可能?

shal asked 2020-08-07T07:05:58Z
4个解决方案
34 votes

您的主张是完全错误的。 cube不比mul快,您的示例也不能证明这一点。

实际上,发生的事情是Java语言执行的内部过程比实际的乘法要花费更多的时间,从而导致mul和cube的时间非常相似。 我循环运行了两个函数,只是为了增加差异,分析器显示20219 vs 20197,这无关紧要。 顺便说一句,多维数据集在这里是“较慢”的。

而且,这种剖析方法行不通,因为Chrome和Firefox在循环内进行数学运算之前都进行了大量优化。 您认为循环可能很好地使用了缓存的值,甚至优化使用的数学函数都返回相同的结果。

这是我使用的代码:

<script>
 var max = 0xffffff * 4;
  var step = 1 / max;
  function cube() {
    var result = 0.;
    for (var x = 0.; x < 1; x += step) {
      result += x * x * x;
    }
    return result;
  }
  function mul() {
    var result = 0.;
    for (var x = 0.; x < 1; x += step) {
      result += x * x;
    }
    return result;
  }
  function go() {
    var s='';
    for (var i=0; i<100; i++) {
        s+=cube();
        s+=mul();
    }
    console.log(s);
  }
  go();
</script>

另外,仅供参考,请在此处观看视频:[https://fosdem.org/2016/schedule/event/mozilla_benchmarking_javascript_tips/],其中Firefox员工解释了为什么微基准测试的意义并不大。

Siderite Zackwehdex answered 2020-08-07T07:06:23Z
0 votes

这可能是因为既然您所有的数字都小于1,则多维数据集函数所添加的数字要比平方小,并且(我不确定这是否实际上是这样工作的)因此花费的时间更少。 这只是一个猜测。 而且由于数字太小,这也可能是由于精度不足所致。 我也用数字测试了一个,但立方体的速度较慢。

C L K Kissane answered 2020-08-07T07:06:44Z
0 votes

也许优化器决定其中一个可以使用矢量指令执行,而另一个使用普通的旧式fmul。 我推测“平方”使用fmul,而多维数据集使用矢量指令mulpd,一条指令最多可以乘以4双。 我添加了一个“四元组”,它进行了4次乘法运算,其时间非常接近于立方体。 但是当我去“五”时,它的速度比平方慢。 这是间接证据表明矢量指令已用于多维数据集和四边形。

在平板电脑上以Intel cpu vs arm看到结果会很有趣。

dmh2000 answered 2020-08-07T07:07:09Z
-5 votes

在某些浏览器中,JavaScript在解释器启动时由JIT在后台编译。 javascript编译后,它开始运行得更快。

Russell Hankins answered 2020-08-07T07:07:29Z
translate from https://stackoverflow.com:/questions/36178051/why-cube-is-faster-than-square