branch-prediction相关内容

我可以在现代Intel Core CPU上测量分支预测故障吗?

这个问题和它的答案(最近被标记为Epic答案)使我想知道;我可以通过Windows分支预测失败来衡量Windows中正在运行的应用程序的性能吗?我知道存在一些静态分析工具,这些工具可能有助于优化代码以在分支预测情况下实现良好性能,而手动技术可以通过简单地进行更改和重新测试来提供帮助,但我正在寻找一种可以报告一段时间内Windows应用程序运行时分支预测失败的总数,我希望Visual C ++的Pr ..
发布时间:2020-05-21 20:49:38 C/C++开发

分支目标缓冲区检测到什么分支预测错误?

我目前正在研究CPU管道的各个部分,这些部分可以检测到分支错误预测.我发现这些是: 分支目标缓冲区(BPU清除) 分支地址计算器(BA CLEAR) 跳转执行单元(不确定此处的信号名称吗?) 我知道2和3可以检测到什么,但是我不明白在BTB中检测到了什么错误预测. BAC会检测到BTB错误地预测了非分支指令的分支,BTB无法检测到分支或错误地预测了x86 RET指令的目标地址.执行 ..

分支感知编程

我正在阅读有关分支预测错误的信息,这可能是应用程序性能的一个热门瓶颈.正如我所看到的,人们经常显示出 assembly 代码来揭示问题,并指出程序员通常可以预测分支在大多数情况下可以到达的位置,并避免分支错误预测. 我的问题是: 1-是否可以使用某些高级编程技术(即无汇编)来避免分支预测错误? 2-使用高级编程语言(我对C和C ++最为感兴趣)生成适合分支的代码时,我应该牢记什么 ..
发布时间:2020-05-21 20:30:52 C/C++开发

X86 64位模式下的索引分支开销

这是该先前主题中的一些评论的后续内容: 递归斐波那契汇编 以下代码段计算斐波那契,第一个示例使用循环,第二个示例使用计算的跳转(索引分支)进入展开的循环.已使用Windows 7 Pro 64位模式下的Visual Studio 2015 Desktop Express和Intel 3770K 3.5ghz处理器对此进行了测试.通过对fib(0)至fib(93)进行单循环测试,获得循环 ..

通过有条件的早期计算来避免停顿管道

在谈论ifs的性能时,我们通常会谈论错误的预测如何使管道停滞.我看到的推荐解决方案是: 信任通常情况下会产生一个结果的分支预测变量;或 在合理可能的情况下,避免一点点魔术的分支;或 视情况而定. 我找不到的是我们是否可以尽早计算条件以在可能的情况下提供帮助.因此,代替: ... work if (a > b) { ... more work } 执行以下操作: ..

java for循环中的分支预测

我在旁边看到此评论,如果条件: //分支预测有利于最常用的条件 在 JavaFX SkinBase class。 protected double computeMinWidth(double height,double topInset,double rightInset,double bottomInset,double leftInset){ double minX ..
发布时间:2019-01-14 12:04:04 Java开发

如何制作无网段代码?

与此答案相关: https://stackoverflow.com/a/11227902/4714970 在上面的答案中,提到了如何通过避免分支来避免分支预测失败。 用户通过替换来证明这一点: if(data [c]> = 128) { sum + = data [c ]。 } 使用: int t =(data [c] - 128)>> 3 ..
发布时间:2018-12-25 20:44:49 Java开发

为什么(a * b!= 0)比Java更快(a!= 0& b!= 0)?

我正在用Java编写一些代码,在某些时候,程序的流程由两个int变量“a”和“b”是否为非零来确定(注意:a和b从不否定,并且从不在整数溢出范围内。) 我可以用 if(a!= 0&& b!= 0){/ *一些代码* /} 或者 if(a * b!= 0){/ *一些代码* /} 因为我希望这段代码每次运行数百万次,所以我想知道哪一条会是快 ..

订购if ... else if语句的概率有什么影响?

具体来说,如果我有一系列如果 ... 否则如果语句,我事先知道每个语句将评估为 true 的相对概率,它按概率顺序对它们进行排序的执行时间有多大差异?例如,我应该更喜欢这个: if(high_likely) //做一些事情 else if (有点像) //做一些 其他如果(不太可能) //做点什么 这个?: 如果(不太可能) //做一些事情 否则(有点像) ..

是“IF”昂贵?

对于我的生活,我不能记得那天我们的老师说了什么,我希望你可能知道。 模块是“数据结构和算法”,他告诉我们一些类似的东西: if语句是最昂贵的 [某件事]。 [东西]登记 [某事]。 是的,我确实有一段可怕的记忆,我真的很抱歉,但我一直在谷歌搜索几个小时,什么都没有出现。任何想法? 解决方案 在最低级别(在硬件中),是,如果 s很贵。为了理解原因,您必须了解管道的工作原 ..
发布时间:2018-07-17 08:42:30 其他开发

英特尔x86 0x2E / 0x3E前缀分支预测实际使用?

在最新的英特尔软件开发手册中,它描述了两个操作码前缀: 组2>分支提示 0x2E:分支未采取 0x3E:分支采取 Jxx ) 我记得读了几个几年前,x86显式分支预测在gccs分支预测内在函数的上下文中基本上是不可操作的。 我不清楚这些x86分支提示是否是新的功能或者它们在实践中是否实际上没有任何操作。 任何人都可以清除它? 是: ..
发布时间:2018-04-20 17:08:36 其他开发

分支预测在循环中的性能

这两个代码段之间会有明显的速度差异吗?原来,我认为第二个片段会更快,因为分支指令会遇到很少,但另一方面,分支预测器应该解决这个问题。或者它会有明显的开销,尽管可预测的模式?假设不使用条件移动指令。 代码段1: for(int i = 0; i if(a == 3) output [i] else output [i] = 0; } $ b ..
发布时间:2016-10-25 14:17:20 C/C++开发

分支预测在循环中的性能

这两个代码段之间会有明显的速度差异吗?原来,我认为第二个片段会更快,因为分支指令会遇到很少,但另一方面,分支预测器应该解决这个问题。或者它会有明显的开销,尽管可预测的模式?假设不使用条件移动指令。 代码段1: for(int i = 0; i if(a == 3) output [i] else output [i] = 0; } $ b ..
发布时间:2016-10-24 17:16:37 C/C++开发

分支预测与分支目标预测

我理解这一点,如果语句更依赖于分支预测和v表查找更依赖于分支目标预测?对于v表,没有“分支预测”,只有目标预测? 尝试理解CPU如何处理v表。 解决方案 分支预测正在预测分支是否将被占用。分支目标预测是分支将要到达的预测。这两个事件是独立的,可以在所有组合中出现。 这些例子可能是: 无条件分支,固定目标 无限循环 goto 语句 break 或 continue ..
发布时间:2016-10-17 10:56:12 C/C++开发

是否有一个编译器提示GCC强制分支预测总是以一定的方式?

对于Intel架构,有没有办法指示GCC编译器生成始终在我的代码中强制分支预测的代码?英特尔硬件甚至支持这一点吗?其他编译器或硬件如何? 我将在C ++代码中使用它,我知道这种情况我希望运行快,不关心慢下来, for(;;){ if正常){//如何告诉编译器总是分支预测真实值? doSomethingNormal(); } else { exceptionCase(); ..
发布时间:2016-10-13 10:58:12 C/C++开发

我可以使用GCC的__builtin_expect()在C三元运算符

借助 GCC手册只显示了__builtin_expect()将被置于整个状态的例子一个“如果”的语句。 我也注意到,GCC不抱怨,如果我使用它,例如,用一个三元运算符,或任意组成的前pression对于这个问题,即使是未在分支环境中使用。 所以,我不知道其使用的基本约束条件其实都是。 在三元操作像这样使用时,将保留其效果: INT富(int i)以 { 返回__builtin_exp ..
发布时间:2016-08-21 21:06:44 C/C++