55得票9回答
if(A | B) 总是比 if(A || B) 更快吗?

我正在阅读Fedor Pikus的这本书,他有一些非常非常有趣的例子,对我来说是一个惊喜。 特别是这个基准测试,其中唯一的区别在于,在其中一个中我们在if中使用||,而在另一个中我们使用|。 void BM_misspredict(benchmark::State& state) {...

55得票3回答
`rep ret` 是什么意思?(涉及IT技术)

我在Visual Studio 2008上测试一些代码时注意到了security_cookie。我能理解它的意义,但不明白这条指令的目的是什么。 rep ret /* REP to avoid AMD branch prediction penalty */ 当然,我能够理解这个评论 :...

47得票5回答
何时应该优先选择使用流而不是传统循环以获得最佳性能?流是否利用分支预测?

我刚刚读到了分支预测,并想尝试一下如何在Java 8流中使用它。 然而,使用流的性能始终比传统循环差。int totalSize = 32768; int filterValue = 1280; int[] array = new int[totalSize]; Random rnd = n...

44得票6回答
便携式分支预测提示

有没有一种可移植的方法来进行分支预测提示?考虑下面的例子: if (unlikely_condition) { /* ..A.. */ } else { /* ..B.. */ } 这与做下面的操作有什么不同: if (!unlikely_condition) { ...

43得票8回答
分支感知编程

我发现分支预测错误可能会成为应用程序性能的热点瓶颈。人们通常展示揭示问题的汇编代码,并指出程序员通常可以预测分支走向大部分时间,从而避免分支预测错误。 我的问题是: 是否有一些高级编程技术(即无需汇编)可以避免分支预测错误? 在高级编程语言中编写友好于分支的代码时应注意什么(我主要关注C和...

38得票1回答
CPU架构的演进如何影响虚拟函数调用性能?

多年前,我学习x86汇编语言、CPU流水线、缓存未命中、分支预测等相关知识。 这是一个双重结局的故事。我了解了处理器长流水线的所有优点,如指令重新排序、缓存预加载、依赖项交错等等。 不利的一面是任何偏离正常情况的操作都是非常昂贵的。例如,如果使用指针调用函数,早期几GHz时代的某个AMD处...

36得票3回答
如何编写无分支代码?

与此回答相关:https://dev59.com/iWgu5IYBdhLWcg3wkH6P#11227902 在上述回答中,提到了通过避免分支来避免分支预测失败的方法。 用户通过替换以下代码来演示这一点: if (data[c] >= 128) { sum += data[...

35得票4回答
Intel x86中的0x2E/0x3E前缀分支预测是否实际使用?

在最新的英特尔软件开发手册中,描述了两个操作码前缀:Group 2 > Branch Hints 0x2E: Branch Not Taken 0x3E: Branch Taken 这些指令允许对跳转指令(例如Jxx)进行显式分支预测。 我记得几年前阅读过一篇文章,称...

35得票2回答
无分支内部合并比带分支的内部合并慢。

我最近在Code Review上发了一个问题,希望大家能够审查一个名为QuickMergeSort的排序算法。具体细节我就不赘述了,但是这个算法在某一步骤中需要执行内部归并排序:它不使用额外的内存来存储需要合并的数据,而是将要合并的元素与原始序列中的另一部分元素进行交换。以下是我关注的算法部分...

34得票2回答
GCC是否会为静态分支预测生成次优代码?

根据我在大学课程中所听到的,按照惯例,在 if 中放置更可能的条件而不是在 else 中放置更可能的条件可以帮助静态分支预测器。例如:if (check_collision(player, enemy)) { // very unlikely to be true doA(); } e...