如何加快这个Dart微基准测试?

时间:2013-10-23 17:40:27

标签: dart benchmarking microbenchmark

我在Dart编辑器中对此功能进行基准测试:

e28({N: 1000}) {   
  int diagNumber = 1;         
  int sum        = diagNumber;          

  for (int width = 2; width <= N; width += 2)  
    for (int j = 0; j < 4; ++j) {     
      diagNumber += width;        
      sum        += diagNumber;     
    }

  return sum;
}

我创建了命令行应用程序并取消选中Run in checked mode。还有什么我可以做的让它跑得更快吗?我注意到Process properties对话框在命令行中显示--debug选项。删除调试选项的方法是什么?是否有发布或优化选项?

允许保留代码修改的小算法(例如,更简洁的符号),但是使其更冗长(例如,循环展开)不是。鉴于这些限制,您可以编写更快版本的e28()吗?

我目前在Xubuntu 13.04 64位Core i5 3450S 2.8GHz上的结果比使用LLVM编译的C ++或D中的相同代码慢约10倍。好处是它击败了Scala,Julia,F#,当然还有Python,但我期望Dart性能有所提升。

以下是定时方式:

void main() {
  final N         = 100000;
  var   timer     = new Stopwatch()..start();
  var   resultMin = e28();
  var   timeMin   = timer.elapsedMicroseconds;

  for (int i = 0; i < N; ++i) {
    var t0    = timer.elapsedMicroseconds;
    var r     = e28();
    var t1    = timer.elapsedMicroseconds;
    timeMin   = min(timeMin, t1-t0);
    resultMin = min(resultMin, r);
  }

  print(timeMin);
  print(resultMin);
}
顺便说一句,当我使用官方基准测试工具时,我的运行时间要长10倍。我怀疑benchmark_harness.dart没有报告最短时间,但可能是中位数时间。 [编辑] 不介意benchmark_harness.dart中的10x问题:这是设计使然。

0 个答案:

没有答案