2017-06-15 21 views
1

这是一个纯粹的概念问题。为什么OS没有切换任何时候从未被占用的分支?动态分支预测仅适用于过去采用的分支,而静态分支预测在某些情况下才是正确的。如果分支上没有数据,则操作系统和处理器似乎应该开始将单独的任务放入流水线,而不是盲目猜测分支。然后,您可以计算分支的结果,并在原始任务再次计划时执行该分支。下次遇到分支时,处理器可以使用动态预测。每当发生未知分支时,操作系统为什么不安排新的任务?

这个方法没有被使用的原因吗?或者它被使用,我只是不知道?

回答

1

与仅执行分支相比,上下文切换的开销非常高。

+0

我不太熟悉调度程序的工作原理。开销是否由于必须将处理器配置为正确的状态以恢复其他任务而产生? – master565

+1

处理器必须保存进程(或线程)的完整状态,这意味着定义状态的所有寄存器。然后它必须为新任务加载寄存器。这相当于20-30个移动指令。 – user3344003

+0

这很有道理。我想唯一可能的方式是值得的,如果你有一个疯狂的大型流水线,比上下文切换开销更大的清理开销。感谢你的回答! – master565

0

这就是为什么SMT - simultanions多线程被发明的原因,而一个线程与其分支错开预测,同一个核心上的其他线程可能会前进。

新的Power处理器,甚至对每个核心8个硬件线程,以确保在

  1. 分支预测错误脸
  2. 指令高速缓存未命中
  3. 数据缓存缺失
  4. 数据的依赖性最大吞吐量
相关问题