问题标签 [branch-prediction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
if-statement - “如果”贵吗?
我一辈子都记不住老师那天到底说了什么,我希望你可能知道。
该模块是“数据结构和算法”,他告诉我们一些类似的事情:
if
声明是最昂贵的[东西] 。[某事]注册[某事]。
是的,我确实有一个可怕的记忆,我真的很抱歉,但我已经搜索了几个小时,但没有任何结果。有任何想法吗?
c++ - 便携式分支预测提示
是否有任何可移植的方式来进行分支预测提示?考虑以下示例:
这与做有什么不同:
或者是使用编译器特定提示的唯一方法?(例如 GCC 上的 __builtin_expect)
编译器会根据if
条件的顺序对条件进行不同的处理吗?
c - If Thens 比乘法和赋值更快吗?
我有一个简单的问题,假设我有以下代码,并且它以类似的方式重复了 10 次。
评估是否会更快:
这也带来了一个问题,你能不能将一个布尔值乘以一个整数(虽然我不确定从 2^n 返回的类型,它是整数还是无符号......等等)?(我在 Ada 工作,但让我们试着概括一下吧?)
编辑:对不起,我应该澄清一下,我正在查看 2 的 n 次方,我将 c 放在那里,因为如果我在 c 中遇到这个问题,我对自己的学习感兴趣,我认为还有更多 c这些板上的程序员然后是 Ada(我假设你知道这意味着什么),但是我目前的问题是 Ada 语言,但问题应该是与语言无关的(我希望)。
x86 - CPU 架构演进如何影响虚函数调用性能?
几年前,我正在学习 x86 汇编器、CPU 流水线、缓存未命中、分支预测以及所有这些爵士乐。
这是一个两半的故事。我阅读了处理器中冗长管道的所有奇妙优势,即指令重新排序、缓存预加载、依赖交错等。
不利的一面是,任何偏离规范的行为都代价高昂。例如,IIRC 早期千兆赫时代的某个 AMD 处理器每次通过指针(!)调用函数时都会有40 个周期的惩罚,这显然是正常的。
这不是一个可以忽略的“不用担心”的数字!请记住,“好的设计”通常意味着“尽可能多地考虑你的功能”和“在数据类型中编码语义”,这通常意味着虚拟接口。
权衡是不执行此类操作的代码每个周期可能会获得两条以上的指令。这些是编写高性能 C++ 代码时需要担心的数字,这些代码重于对象设计而轻于数字运算。
我知道随着我们进入低功耗时代,长 CPU 流水线的趋势正在逆转。这是我的问题:
最新一代的 x86 兼容处理器是否仍然会因虚拟函数调用、错误的分支预测等而遭受巨大的惩罚?
assembly - 英特尔:序列化指令和分支预测
英特尔架构的开发人员手册(Vol3A,第 8-26 节)说:
Pentium 处理器和更新的处理器系列使用分支预测技术通过在执行分支指令之前预取分支指令的目标来提高性能。因此,当执行分支指令时,指令执行不是确定性地串行化的。
这是什么意思?
听起来真的,真的很糟糕。听起来像 CPUID 这样的序列化指令会破坏分支预测(反之亦然),但这似乎不太可能。任何 ASM 人员都可以帮助我理解“非确定性”在这种情况下的含义。
*为清晰起见进行了编辑
arm - 当前 CPU 上的分支预测有多普遍?
由于对性能的巨大影响,我从不怀疑我当前的桌面 CPU 是否有分支预测。当然可以。但是各种 ARM 产品呢?iPhone 或 android 手机有分支预测吗?旧的任天堂 DS?基于 PowerPC 的 Wii 怎么样?PS 3?
他们是否有一个复杂的预测单元并不那么重要,但他们是否至少有一些动态预测,以及他们是否在预期的分支之后执行一些指令。
具有分支预测的 CPU 的截止值是多少?几十年前的手持计算器显然没有,而我的台式机有。但是任何人都可以更清楚地概述可以期望动态分支预测的地方吗?
如果不清楚,我说的是条件变化的预测,在运行时改变预期的路径。
performance - 带有 __builtin_expect 的 ARM 的静态分支预测不起作用!!?
我在 Cortex-R4 中运行的 C 代码中进行优化。首先,当我在条件检查中指出“__builtin_expect”时,我没有看到汇编代码输出有任何变化。似乎编译器生成了不必要的跳转。
我的 C 代码:
---- 生成的 ASM 代码 -------- (bit => r0)
---- 我预期的 ASM 代码 --------
假设如果这段 C 代码在循环中运行,那么每次它都要跳转(因为 if 条件只通过了一次)。是否有任何其他编译器设置实际上可以按预期生成代码..??
c++ - C/C++ 最高效的 if 语句求值
X 几乎 99.9% 的时间都是正确的,但我也需要处理 Y 和 Z。尽管 X 条件的主体是空的,但我认为如果省略 X 条件,它应该比可能检查其他 2 个条件 Y 和 Z 更快。你怎么看?
c++ - 分支预测 - 全局共享实现说明
我正在我的计算机体系结构课程中进行一项作业,我们必须在 C++ 中实现分支预测算法(用于 Alpha 21264 微处理器体系结构)。
提供了一个解决方案作为示例。此解决方案是Global Share Predictor的实现。
我只是想了解给定的解决方案,特别是发生了什么:
具体来说,
谁能给我一个解释?谢谢你。