我在 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
:这是设计使然。