现在的位置: 首页 > 综合 > 正文

1GB 的4字节整数,内存排序时间为多少?

2013年08月24日 ⁄ 综合 ⁄ 共 313字 ⁄ 字号 评论关闭

      拿到这个问题,我们往往会计算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。

抱歉!评论已关闭.