C++ 分支预测与分支目标预测

C++ 分支预测与分支目标预测,c++,performance,polymorphism,cpu,branch-prediction,C++,Performance,Polymorphism,Cpu,Branch Prediction,我是否正确理解了这一点,如果语句更依赖于分支预测,而v表查找更依赖于分支目标预测?关于v表,没有“分支预测”,只有目标预测 试图了解CPU如何处理v表。分支预测是预测是否执行分支。分支目标预测是预测分支将要到达的位置。这两件事是独立的,可以在所有的组合中发生 例如: 无条件分支,固定目标 无限循环 goto语句 中断或继续语句 if/else语句的'then'子句结尾(跳过else子句) 非虚函数调用 无条件分支,可变目标 从函数返回 虚拟函数调用 函数指针调用 switch语句(如果编译

我是否正确理解了这一点,
如果
语句更依赖于分支预测,而v表查找更依赖于分支目标预测?关于v表,没有“分支预测”,只有目标预测


试图了解CPU如何处理v表。

分支预测是预测是否执行分支。分支目标预测是预测分支将要到达的位置。这两件事是独立的,可以在所有的组合中发生

例如:

无条件分支,固定目标
  • 无限循环
  • goto
    语句
  • 中断
    继续
    语句
  • if/else
    语句的'then'子句结尾(跳过
    else
    子句)
  • 非虚函数调用
无条件分支,可变目标
  • 从函数返回
  • 虚拟函数调用
  • 函数指针调用
  • switch
    语句(如果编译成跳转表)
条件分支,固定目标
  • if
    语句
  • switch
    语句(如果编译成一系列
    if/else
    语句)
  • 循环条件测试
  • &&
    |
    运算符
  • 三元
    ?:
    运算符
条件分支,可变目标
  • 在正常情况下不太可能出现,但编译器可以将其中一种情况作为优化进行综合,并结合上述两种情况。例如,在x86上,如果由于尾部调用优化而出现在函数末尾,编译器可能会将类似
    if(condition){obj->VirtualFunctionCall();}
    的代码优化为类似
    jne*%eax
    的条件间接跳转

让我们结束一个问题,因为它只有4行长…..这是一个相当讽刺的评论,我理解一个未注释的结束动议可能看起来不公平,但原因(某种程度上)记录在所选选项(太宽)中,您没有被否决,这表明选民认为这个问题不能在StackOverflow上得到有效解决,这与StackOverflow本身有关,而与你的问题关系不大。假设您的推论正确:
if
和循环通常使用分支预测(布尔输出),而函数指针/虚拟函数使用分支目标预测(目标输出)。我如何理解关闭的原因?这不是一个宽泛的问题——有两个问题,既相关又具体?(但我感谢你花时间通过评论回答我的问题)啊!您可能没有足够的声誉来访问
关闭
对话框:X看看这个:如果您转到幻灯片13,分支目标预测器在哪里?@user997112它可能是左上角块“分支预测器”的一部分,否则您将如何将目标馈送到提取单元?