Operating system 为什么不';当出现未知分支时,操作系统是否会安排新任务?

Operating system 为什么不';当出现未知分支时,操作系统是否会安排新任务?,operating-system,scheduler,branch-prediction,Operating System,Scheduler,Branch Prediction,这是一个纯粹的概念性问题。为什么操作系统不在从未执行过的分支发生时切换任务?动态分支预测仅适用于过去使用过的分支,而静态分支预测仅在某些情况下正确。如果分支上没有数据,那么操作系统和处理器应该开始将单独的任务放入管道,而不是盲目猜测分支。然后,您可以计算分支的结果,并在再次调度原始任务时执行该分支。下次遇到分支时,处理器可以使用动态预测 没有使用这种方法有什么原因吗?或者它被使用了,而我只是不知道?与只执行分支相比,上下文切换的开销是如此之高。这就是为什么SMT-Simulations多线程被发

这是一个纯粹的概念性问题。为什么操作系统不在从未执行过的分支发生时切换任务?动态分支预测仅适用于过去使用过的分支,而静态分支预测仅在某些情况下正确。如果分支上没有数据,那么操作系统和处理器应该开始将单独的任务放入管道,而不是盲目猜测分支。然后,您可以计算分支的结果,并在再次调度原始任务时执行该分支。下次遇到分支时,处理器可以使用动态预测


没有使用这种方法有什么原因吗?或者它被使用了,而我只是不知道?

与只执行分支相比,上下文切换的开销是如此之高。

这就是为什么SMT-Simulations多线程被发明的原因,而一个线程因其分支预测失误而四处摸索,而同一核心上的其他线程可以前进

新的Power处理器甚至在每个核心上都有8个硬件线程,以确保在面临灾难时的最大吞吐量

  • 分支错误预测
  • 指令缓存未命中
  • 数据缓存未命中
  • 数据依赖性

  • 我不太熟悉调度器的工作原理。开销是否是由于必须将处理器配置为正确的状态才能恢复另一个任务而引起的?处理器必须保存进程(或线程)的完整状态,即定义状态的所有寄存器。然后必须加载新任务的寄存器。这相当于20-30个移动指令。这是有道理的。我想唯一可能的方法是,如果你有一个非常大的管道,它的刷新开销比上下文切换开销大。谢谢你的回答!加上上下文更改将刷新许多系统上的缓存。加上上下文切换将等待清除管道,这是。。。你很清楚你想避免什么。。。