27157得票25回答
为什么处理一个已排序的数组比处理一个未排序的数组要快?

在这段C++代码中,对数据进行排序(在定时区域之前)可以使主循环的速度提高约6倍。 #include <algorithm> #include <ctime> #include <iostream> int main() { // Generat...

452得票10回答
Linux内核中的likely/unlikely宏是如何工作的,它们有什么好处?

我一直在研究Linux内核的一些部分,发现了像这样的调用: if (unlikely(fd < 0)) { /* Do something */ } 或者 if (likely(!err)) { /* Do something */ } 我找到了它们的定义: ...

434得票6回答
为什么在Java中,(a*b != 0)比(a != 0 && b != 0)更快?

我正在编写一些Java代码,在某个时刻,程序的流程取决于两个int变量“a”和“b”是否为非零(注意:a和b永远不会是负数,并且永远不会超出整数溢出范围)。 我可以使用以下方式进行评估 if (a != 0 && b != 0) { /* Some code */ } ...

198得票10回答
如果按照概率排序if...else if语句会产生什么影响?

具体而言,如果我有一系列的if...else if语句,并且我事先知道每个语句相对于其它语句被执行的概率,那么按照概率排序在执行时间上会有多大差异?例如,我应该更喜欢这样吗: if (highly_likely) //do something else if (somewhat_like...

177得票1回答
为什么使用现代 x86-64 clang 处理未排序数组的速度与处理已排序数组的速度相同?

我发现了这个流行的9年老的SO问题并决定再次核实其结果。 所以,我有AMD Ryzen 9 5950X、clang++ 10和Linux,我复制了问题中的代码,这是我得到的结果: 排序后 - 0.549702秒:~/d/so_sorting_faster$ cat main.cpp | gre...

172得票4回答
GCC 5.4.0下的昂贵跳跃

我是一名有用的助手,可以为您翻译文本。 我有一个函数,代码如下(仅显示重要部分): double CompareShifted(const std::vector<uint16_t>& l, const std::vector<uint16_t> &...

127得票8回答
有没有GCC编译器提示可以强制分支预测始终按照特定的方式进行?

对于英特尔架构,有没有一种方法可以指示GCC编译器在我的代码中始终强制分支预测以特定方式进行? 英特尔硬件是否支持这样做?其他编译器或硬件呢? 我会在C ++代码中使用它,在那里我知道我希望快速运行的情况,并且不在意其他分支需要被采取时的减速,即使最近已经采取了该分支。for (;;) { ...

126得票18回答
“IF”语句是否昂贵?

我实在是想不起来我们老师当时具体讲了什么,希望你可能知道。 这个模块是“数据结构和算法”,他告诉我们的大致是: if语句是最昂贵的 [某些东西]。[某些东西]寄存器 [某些东西]。 是的,我的记忆力真的很糟糕,非常非常抱歉,但我已经搜索了几个小时,没有任何结果。有任何想法吗?

106得票5回答
为什么条件移动不容易受到分支预测失败的影响?

在阅读了这篇StackOverflow上的帖子(最优化部分) 之后,我想知道为什么条件移动不容易受到分支预测失败的影响。在这篇AMD的PDF文件中,他们也声称了条件移动的性能优势。但是为什么呢?我没有看出来。在评估那个汇编指令的时候,前面CMP指令的结果还不知道。

73得票7回答
在Java中,& 操作符是否比 && 操作符更快?

在这段代码中: if (value >= x && value <= y) { 当value>=x和value<=y的结果不具有特定模式时,使用&运算符是否比使用&&更快?具体来说,我在考虑&&如何惰性地评估...