许多算法成本模型(参见Cormen的第三版,第27章)认为调度程序都是相同的,因此在某些算法的顺序中基本上是常量。它是否正确?使用O(1)调度程序与CFS调度程序是否会产生任何后果?感谢。
答案 0 :(得分:1)
许多算法成本模型(参见Cormen的第三版,第27章)认为 调度程序都是相同的,因此基本上是一个常量 一些算法的顺序。
简单的答案是肯定的。 在CLRS中说这个的上下文是测量多线程算法的性能。这种度量的最明显的例子是并行/多线程算法实现的speed-up。 OS调度程序的工作,特别是在多处理器环境中,确保所有处理器尽可能公平地分享总工作量,以便最大化总体性能。操作系统遵循什么调度算法并不重要。因为,如果有一个免费的处理器并且还有工作要做,那么OS调度程序将始终分配一些工作。
我们举一个例子。 X是要完成的总工作(假设它非常像基因计算,因此有足够的并行空间),你有5个处理器。您编写了一个算法,将总工作分成5个几乎相等的 chucks。假设这些块是独立的,你的测量速度是3.5(由于线程创建,上下文切换和一些通信等的额外成本,它不是5)。
请注意,当您测量并行算法的加速时,您总是会通过确保除了并行任务之外没有其他任务正在运行来测量它。不难看出,并行算法实现的加速几乎与OS调度算法在这里几乎没有或没有说法相同。因此,无论操作系统调度程序如何,您都将获得与此示例中几乎相似的3.5的加速。
使用O(1)调度程序与CFS调度程序是否没有任何后果?
是,用于衡量并行/多线程算法的性能。
简单并行算法的目标(实际上很难实现它)是最佳分割工作,以确保所有处理器都能完成任务。假设所有(并行化任务)线程都相同是合理的,除非你做其他事情。 但是OS调度程序的任务在一般情况下更复杂。因为,在相同和不同的运行时间等处总会有许多进程以不同的优先级运行。在这种情况下,OS调度程序算法会起作用。即他们如何决定接下来要执行的任务。根据不同的需求和不同的人的喜好,我们有许多操作系统调度算法。
必须注意的是,当与许多其他具有不同优先级的任务一起运行时,并行算法的性能可能会因操作系统调度程序而异。让你的任务是T,它分为t1,t2,t3,t4& T5。假设调度程序在其队列中具有的其他任务是t12,t25,t99,t75,t60(我在这里使用了一些随机ID)。然后,任务T的总运行时间取决于OS调度程序如何安排所有这些任务。因此,如果你执行了所有其他任务(t1,t2,t3,t5,t12,t25,t99,t75和t60)之后最后安排了一个任务,比如t4,那么你将获得不同的运行时间。并且您将获得不同的运行时间,具体取决于您的所有任务的安排时间和安排。完成。在这种情况下,OS调度算法会影响实际运行时间。