【问题标题】:Are OS schedulers irrelevant to multithreaded algorithms?操作系统调度程序与多线程算法无关吗?
【发布时间】:2012-03-27 15:01:42
【问题描述】:

许多算法成本模型(参见 Cormen 第三版,第 27 章)认为调度程序都是相同的,因此在某些算法的顺序中基本上是一个常数。它是否正确?使用 O(1) 调度程序与 CFS 调度程序会不会有任何后果?谢谢。

【问题讨论】:

    标签: multithreading algorithm scheduling


    【解决方案1】:

    许多算法成本模型(参见 Cormen 第三版,第 27 章)争论 调度程序都是相同的,因此基本上是一个常数 一些算法的顺序。

    简单的答案是肯定的。 CLRS 中所说的上下文是为了衡量多线程算法的性能。这种措施最明显的例子是通过并行/多线程算法实现的speed-up。操作系统调度程序的工作,特别是在多处理器环境中,是确保所有处理器尽可能公平地分配总工作,以最大限度地提高总性能。操作系统遵循什么调度算法并不重要。因为,如果有空闲的处理器并且有工作要做,操作系统调度程序总是会分配一些工作。

    让我们举个例子。 X 是要完成的总工作(假设它非常像基因计算,因此有足够的并行空间),你有 5 个处理器。您编写了一个算法,将总工作分成 5 个几乎相等的卡盘。假设这些块是独立的,并且您测量的加速是 3.5(它不是 5,因为线程创建、上下文切换和一些通信等的额外成本)

    请注意,当您衡量并行算法的加速时,您总是要通过确保除了并行任务之外没有其他任务正在运行来衡量它。不难看出,并行算法实现的加速几乎与操作系统调度算法在这里几乎没有发言权相同。因此,无论操作系统调度程序如何,您总是会获得与本示例中的 3.5 几乎相似的加速。

    使用 O(1) 调度器与 CFS 调度器相比是否没有任何后果?

    是的,用于衡量并行/多线程算法的性能

    简单并行算法的目标(无论实际实现它可能有多么困难)是优化分配工作,以确保所有处理器都朝着完成任务工作。可以合理地假设所有(并行任务)线程都是相同的,除非您采取其他措施。 但是在一般情况下,操作系统调度程序的任务更复杂。因为,总是会有许多进程在相同和不同的运行时间以不同的优先级运行等。在这种情况下,操作系统调度程序算法开始发挥作用。即他们如何决定接下来要执行的任务。并且根据不同的需求和不同的人的喜好,我们有很多操作系统调度算法。

    必须注意的是,并行算法的性能可能因操作系统调度程序而异,当运行许多其他具有不同优先级的任务时。让我们的任务是 T,它分为 t1、t2、t3、t4 和 t5。假设调度程序在其队列中的其他任务是 t12、t25、t99、t75、t60(我在这里使用了一些随机 id)。那么任务 T 的总运行时间取决于操作系统调度程序如何调度所有这些任务。因此,如果您的一项任务(例如 t4)在执行所有其他任务(t1、t2、t3、t5、t12、t25、t99、t75 和 t60)之后最后安排,那么您将获得不同的运行时间。根据您所有任务的计划和完成时间,您将获得不同的运行时间。在这种情况下,操作系统调度算法确实会影响实际运行时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 2011-05-24
      • 2010-10-16
      • 1970-01-01
      • 2014-02-18
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多