来自' int'的显着性能下降到了#long;' long int'

时间:2016-04-23 20:48:57

标签: c++ performance int long-integer

我编写了Eratosthenes筛子的简单实施方案,用于计算给定范围内的质数。最初我计划使用long int作为主整数类型。计算所有质数小于10亿的素数需要11-12秒。但是当我将类型切换到int时,我大约需要4-5秒。所以我想知道 - 为什么会这样?

我知道long int占用的空间比int多,但是我正在运行64位CPU - 所以 - 如果我理解正确的话 - 它有ALU接受64位整数,即关于这些数字的指令可以在相同数量的周期中执行。我之前的研究揭示了类似的问题,询问unsignedsigned类型([此处] [1]或[此处] [2])之间的性能差异,但我使用{{1变量和我仍然得到相同(小于2 ^ 33-1)输入的性能下降。下面我发布完整的代码。

signed
编辑上面的新代码并没有产生这样的问题。请参阅下面的答案。

1 个答案:

答案 0 :(得分:0)

正如@LogicStuff正确指出的那样,我通过使用isPrime()函数错过了Eratosthenes的Sieve。我编辑了代码(已编辑的原始问题),现在相同的测试(计算小于10毫安的素数)需要250到300毫秒,尽管整数类型 - 我已经测试了intlong intunsigned intunsigned long int

这意味着问题的根源在isPrime()函数内,即编译器或CPU缺少double转换或%运算符的优化。我打赌第一个问题,因为正如我在初始帖子中提到的那样unsigned int描述了here这个问题。感谢所有评论。