cpu效率公式

时间:2012-02-07 16:40:30

标签: multithreading cpu

我有这样的问题:

某个系统的测量表明,平均过程在阻塞IO之前运行了一段时间。过程切换需要时间S,这有效地浪费(开销)。对于使用量子Q的循环调度,请为以下每个

提供CPU效率的公式
( a ) Q = INFINITY
( b ) Q > T
( c ) S < Q < T
( d ) Q = S
( e ) Q -> 0

我知道怎么做a,b,d和e,但是对于c,答案是T /(T + S * T / Q)= Q /(Q + S)。这意味着上下文切换发生的总时间是T / Q,这让我感到困惑,比如说T = 3,Q = 2,进程运行2个单位并切换到另一个进程,然后再切换回执行并完成,然后再次切换到另一个过程,所以它是2个开关,即=屋顶(T / Q);但根据答案,只有1个转换,所以在1轮和2轮比赛中没有什么不同?任何人都可以向我解释一下CPU的效率究竟是什么。

3 个答案:

答案 0 :(得分:2)

您的问题没有说明被IO阻止时调度程序切换的任何内容,所以我不是您提供的答案是正确的。它没有考虑到当IO阻止进程时CPU被浪费的事实。让我们看一个包含2个进程的示例:

repeat floor(T/Q) times:
  Process 1 runs (Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (Q units of time)
  Context switch to process 1 (S units of time)

if T mod Q > 0  
  Process 1 runs (T mod Q units of time) then blocks to IO 
  CPU is idle (Q - T mod Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (T mod Q units of time) then blocks to IO 
  CPU is idle (Q - T mod Q units of time)
  Context switch to process 1 (S units of time)


Total time elapsed = 2(Q+S)*ceiling(T/Q)
Total time processes were running = 2T
Efficiency = T/((Q+S)*ceiling(T/Q))

如果调度程序在进程被阻止后切换,则:

repeat floor(T/Q) times:
  Process 1 runs (Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (Q units of time)
  Context switch to process 1 (S units of time)

if T mod Q > 0  
  Process 1 runs (T mod Q units of time) then blocks to IO 
  Context switch to process 2 (S units of time)
  Process 2 runs (T mod Q units of time) then blocks to IO 
  Context switch to process 1 (S units of time)


Total time elapsed = 2T + 2*S*ceiling(T/Q)
Total time processes were running = 2T
Efficiency = T/(T+S*ceiling(T/Q))

因此,如果我们假设调度程序在被阻止时切换,那么你得到的答案就是错过了ceiling()部分。如果我们假设T总是Q的倍数,那么你甚至不需要它。不知道你的问题是怎么说的。

另一方面,我认为你是重复计算上下文切换,因为你是从一个进程的角度来看它。当您考虑调度多个进程时,每个运行的量程应该有一个上下文切换的事实变得更加明确。

答案 1 :(得分:0)

CPU效率是指CPU执行某些有用操作(即不切换)的时间百分比。你的公式没有提出任何关于完成了多少次开关的事情,只是花费了多少时间而不是切换。

答案 2 :(得分:0)

我最终得到[(T ^ 2)/(Q)] / [(T ^ 2)/(Q)+(S *((T / Q)) - (1 / P))]。使用P作为进程数。这是执行的总时间除以总时间(包括开关):

执行总时间:P [(T / Q)*(T)],T / Q是每个进程必须运行的次数。然后再次乘以T以获得总时间处理。

切换时间:P [((T / Q)*(S)) - S / P],T / Q * S,因为我们需要总切换时间,但现在我们在最后一个过程完成后计数切换(额外的计数)所以我们减去S / P.

总时间:执行时间+切换时间或P [(T ^ 2)/(Q)] + P [((T / Q)*(S)) - (S / P)]

效率:[(T ^ 2)/(Q)] / [(T ^ 2)/(Q)+(S *((T / Q)) - (1 / P))]注意P的下降

Wolfram Alpha正确显示:Wolfram Eval