33得票5回答
为什么这个C++函数会产生如此多的分支预测失败?

令A为包含奇数个零和一的数组,如果n是A的大小,则A的构造方式是前ceil(n/2)个元素为0,其余元素为1。 因此,如果n = 9,则A如下所示: 0,0,0,0,0,1,1,1,1 目标是找到数组中1s的总和,我们使用以下函数来实现:s = 0; void test1(int cur...

33得票4回答
x86-64汇编的性能优化 - 对齐和分支预测

我目前正在编写一些C99标准库字符串函数的高度优化版本,例如strlen(),memset()等,使用x86-64汇编和SSE-2指令。 到目前为止,我的表现在性能方面非常优秀,但是当我尝试进行更多优化时,有时会出现奇怪的行为。 例如,添加甚至删除一些简单的指令,或者仅仅是重新组织一些与跳...

28得票5回答
当前CPU中分支预测技术的普及程度有多大?

由于对性能的巨大影响,我从未想过我当前的桌面CPU是否具有分支预测功能。当然它有。但是各种ARM产品呢?iPhone或Android手机有分支预测功能吗?旧款任天堂DS呢?基于PowerPC的Wii呢?PS3呢? 它们是否具有复杂的预测单元并不是那么重要,但如果它们至少拥有一些动态预测,并且...

28得票4回答
分支预测和除零操作

我当时正在写类似以下的代码...if(denominator == 0){ return false; } int result = value / denominator; 当我在思考CPU中的分支行为时,这篇答案说CPU会尝试正确猜测分支的方向,只有在发现猜错后才会停下来。 但是...

27得票2回答
GCC的__builtin_expect到什么程度?

回答另一个问题时,我对此产生了好奇。我很清楚 if( __builtin_expect( !!a, 0 ) ) { // not likely } else { // quite likely } 将"很有可能"分支加速(通常情况下),通过类似提示处理器/更改汇编代码顺序...

27得票2回答
分支目标预测与分支预测相结合的作用是什么?

编辑:我的困惑在于,预测哪个分支被执行实际上也等于进行了目标预测吗? 这个问题与我关于此主题的第一个问题有着内在关联: 分支预测与分支目标预测 看着被接受的答案: 无条件跳转,固定目标 无限循环 goto 语句 break 或 continue 语句 if/else 语句的“then...

25得票4回答
有没有一种代码可以导致50%的分支预测错误?

问题: 我正在尝试编写一段代码(首选C语言,如果没有其他解决方案,也可以使用汇编语言),使得分支预测在50%的情况下出错。 因此,这必须是一段"免疫于"与分支相关的编译器优化的代码,并且所有硬件分支预测都不能超过50%(像抛硬币一样)。更大的挑战是能够在多个CPU架构上运行代码并获得相同的...

25得票5回答
延迟槽的作用是什么?

据我理解,延迟槽指的是当分支指令被调用时,紧接着分支后面的指令也会从内存中加载。这有什么意义呢?难道我们不期望如果分支被执行,则其后的代码将不会运行吗?这是为了在分支未被执行时节省时间吗? 我正在查看一个流水线图表,似乎分支后面的指令仍然会被执行。

25得票3回答
分支概率提示是否在函数调用中传递?

我遇到了几种情况,想要表达一个函数的返回值可能在函数体内,而不是调用它的if语句中。例如,假设我想从使用 LIKELY 宏移植代码到使用新的 [[likely]] 注释。但是它们在语法上放置的位置不同:#define LIKELY(...) __builtin_expect(!!(__VA_A...

24得票3回答
为什么英特尔在这些年里改变了静态分支预测机制?

根据这里的介绍,我知道英特尔在这些年实现了几种静态分支预测机制: 80486时代:始终不采取 Pentium4时代:反向采取/向前不采取 像Ivy Bridge、Haswell这样的新CPU变得越来越难以捉摸,Matt G在这里进行了实验。 而且英特尔似乎不想再谈论这个问题了,因为我发...