拿到这个问题,我们往往会计算CPU运算次数,如快排的运算次数为1.4 * N * log(N),其中1.4为快排的系数,再根据CPU的运算频率计算出排序耗时。不过这种方法很土也不是很准,Jeff Dean告诉我们可以这样估算:排序时间 = 比较时间(分支预测错误) + 内存访问时间。快排过程中会发生大量的分支预测错误,所以比较次数为2^28 * log (2^28) ≈ 2^33,其中约1/2的比较会发生分支预测错误,所以比较时间为1/2 * 2 ^ 32 * 5ns = 21s,另外,快排每次找到分割点都需要一遍内存移动操作,而内存顺序访问性能为4GB/s,所以内存访问时间为28 * 1GB / 4GB = 7s。因此,单线程排序1GB 4字节整数总时间约为28s。
1GB 的4字节整数,内存排序时间为多少?
最新推荐文章于 2025-08-26 14:28:42 发布
本文介绍了一种估算快速排序耗时的方法,通过计算比较时间和内存访问时间来得出结论。快排过程中会发生大量的分支预测错误,这会影响比较时间;同时,每次找到分割点都需要进行内存移动操作,这也会影响内存访问时间。
716

被折叠的 条评论
为什么被折叠?



