Performance 在循环中,布尔运算比数学运算慢吗?

Performance 在循环中,布尔运算比数学运算慢吗?,performance,language-agnostic,programming-languages,Performance,Language Agnostic,Programming Languages,我真的试图找到一些关于这种操作的信息,但我没有找到关于我的问题的具体信息。。。很简单:布尔运算比循环中的典型数学运算慢吗 例如,在使用某种排序时可以看到这一点。该方法将进行迭代,并将X与Y进行比较。。。但这比求和或减法循环慢吗 例如: 布尔比较 for(int i=1; i<Vector.Length; i++) if(Vector[i-1] < Vector[i]) for(int i=1;iShort版本 没有正确的答案,因为您的问题不够具体(您给出的两个代码示例没有达到相同的

我真的试图找到一些关于这种操作的信息,但我没有找到关于我的问题的具体信息。。。很简单:布尔运算比循环中的典型数学运算慢吗

例如,在使用某种排序时可以看到这一点。该方法将进行迭代,并将X与Y进行比较。。。但这比求和或减法循环慢吗

例如: 布尔比较

for(int i=1; i<Vector.Length; i++) if(Vector[i-1] < Vector[i])
for(int i=1;iShort版本
没有正确的答案,因为您的问题不够具体(您给出的两个代码示例没有达到相同的目的)

如果你的问题是:

bool大于=(a>b);
int sum=a+b;
慢还是快

那么答案是:除非你非常关心你花费了多少周期,否则大致相同,在这种情况下,这取决于你的处理器,你需要阅读它的文档

如果你的问题是:

我给出的第一个例子的迭代速度是比第二个例子慢还是快

答案是:它将主要取决于数组包含的值,但也取决于编译器、处理器和许多其他因素

较长版本 在大多数处理器上,布尔运算没有理由明显比加法慢或快:两者都是基本指令,即使比较可能需要两条指令(减法,然后比较为零)。解码指令所需的周期数取决于处理器,可能会有所不同,但除非处于关键循环中,否则几个周期不会产生很大差异

但是,在您给出的示例中,if条件可能是有害的,因为。现代处理器非常努力地猜测下一批指令将是什么,以便可以预取它们并并行处理。如果存在分支,处理器不知道它是否必须执行
然后
else
part,因此它根据前面的时间进行猜测

如果条件的结果在大多数情况下都是相同的,那么处理器很可能会正确地猜测,这会很顺利。但是如果条件的结果不断变化,那么处理器就不会正确地猜测。当发生这种情况时,这意味着它可以扔掉管道的内容,重新进行操作,因为它是真实的我想这是毫无意义的,真的,痛

您可以自己尝试:当一百万个元素的值相同、递增、递减、交替或随机时,测量在这些元素上运行循环所需的时间

这让我得出结论:处理器已经变成了一些非常复杂的庞然大物,没有黄金答案,只有经验法则,所以你需要测量和分析。你可以阅读其他人的测量结果,了解你应该做什么或不应该做什么


体验乐趣。:)

以尽可能易读的方式编写代码,不要为这些微观优化选择操心。一般来说,我不会太担心微优化,因为性能在很大程度上取决于运行程序的编译器和处理器。至于你的问题,我在理解上有点困难。。。在内部,布尔值被视为数字。某些操作通常可以在单个CPU指令中完成。例如,
if[,=]
操作通常都有类似于jump if better/less/equal的指令,这比执行数学计算要快。@arcyqwerty总之。。。处理器的工作在
1+1=2
时比
25>22=true或false
时“更大”?取决于所讨论的处理器以及编译器如何将该行代码翻译成机器代码。在任何现代处理器中,这两种操作都将进行大量优化,特别是对于纯增量的情况(而不是添加任意数量)
Double sum = 0;

for(int i=0; i<Vector.Length; i++) sum += Vector[i];