配置文件java并行/顺序排序
有没有人知道在java(顺序和fork连接)中分类排序算法的好方法? 因为运行时间太短(排序列表大小5000 ..),System.nanoTime()似乎无法正常工作。我打算多次运行相同的测试用例(1000),并摆脱前100个结果(避免HotSpot编译器问题),并使用System.nanoTime()来平均运行时间。 对此有何建议?配置文件java并行/顺序排序
非常感谢!
我可以这样做吗?
double count = 0;
double start, end;
for(int r = 0; r < warmup; r++) {
// do test
}
for(int t = 0; t < runs; t++){
start = System.nanoTime();
// do test
end = System.nanoTime();
count += start - end;
}
double avg = count/avg
我可以向你保证,nanoTime()确实有效,如果你想避免所有的热点热身,你需要运行10K次。你应该发现一种5K元素相当快,甚至1K测试不是很多。你需要写一个能产生可重现结果的测试。如果你没有,那是由你来修复测试,因为它不是很好。
我建议你试试看看你会得到什么结果。
在旧的计算机上,一种5K随机int值需要大约500 us。注意:对排序后的数组进行排序不会给出相同的结果。 (所以你不能每次排序相同的数组)
一个简单的方法来运行测试一定次数忽略前N次运行是做。
long start = 0;
for(int r = -warmup; r < runs; r++) {
if (r == 0) start = System.nanoTime();
// do test
}
long avg = (System.nanoTime() - start)/runs;
如果现实世界的运行时间太短而不能进行基准测试,那么优化它可能是不值得的。
如果您只是对5000个元素进行排序,那么最好使用最简单的解决方案,而不是过早地优化它。如果你的名单显着较大,那么你应该在这些大型名单上进行基准比较,而不是较小的名单。
如果我需要这样的信息,你知道任何好的方法吗?谢谢 – Ang 2010-12-02 22:06:04
从排序较大的列表开始。如果您试图比较基准时间,我认为50,000,000个元素更合理。
您的意思是10K次排序相同的列表或摆脱第一个10k运行结果?谢谢 – Ang 2010-12-02 22:05:39