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