2

我在 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没有报告最短时间,但可能是中值时间。[编辑]没关系 10x 问题benchmark_harness.dart:这是设计使然。

4

0 回答 0