Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading cpu效率公式_Multithreading_Cpu - Fatal编程技术网

Multithreading cpu效率公式

Multithreading cpu效率公式,multithreading,cpu,Multithreading,Cpu,我有一个这样的问题: 对某个系统的测量表明,在阻塞IO之前,平均进程运行一段时间T。进程切换需要时间S,这实际上是浪费的(开销)。对于具有quantum Q的循环调度,给出以下各项的CPU效率公式 ( a ) Q = INFINITY ( b ) Q > T ( c ) S < Q < T ( d ) Q = S ( e ) Q -> 0 (a)Q=无穷大 (b)Q>T (c)S最后得到[(t^ 2)/(q)] /[(t^ 2)//(q)+(s*((t/q))-(1/p

我有一个这样的问题:

对某个系统的测量表明,在阻塞IO之前,平均进程运行一段时间T。进程切换需要时间S,这实际上是浪费的(开销)。对于具有quantum Q的循环调度,给出以下各项的CPU效率公式

( a ) Q = INFINITY
( b ) Q > T
( c ) S < Q < T
( d ) Q = S
( e ) Q -> 0
(a)Q=无穷大
(b)Q>T
(c)S0

我知道怎么做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效率到底是什么。

CPU效率是指CPU做一些有用的事情(即不切换)的时间百分比。您的公式并没有给出任何关于完成了多少次切换的建议,只是说明了不切换的时间占了多少。

您的问题并没有说明被IO阻止时调度程序的切换,因此我不认为您提供的答案是正确的。它没有考虑到当进程被IO阻塞时CPU被浪费的事实。让我们看一个包含两个过程的示例:

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))
因此,如果我们假设调度程序在被阻止时切换,那么您得到的答案就是缺少天花板()部分。如果我们假设T总是Q的倍数,那么你甚至不需要它。但我不确定你的问题说明了什么

另一方面,我认为您是在重复计算上下文切换,因为您是从单个进程的角度来看待它的。当考虑多个进程被调度时,每一个运行的量子都应该有一个上下文切换。

< P>最后得到[(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正确显示:

它说T/Q是一个进程在切换上花费的平均时间,所以T+S*T/Q是单元总数;当你用“时间”来表示持续时间和“时间”来表示计数时,我感到困惑。我指的是“根据答案,只有一个开关”——我不知道这是从哪里来的。正如@pepsi所说,每个量子点的末端都会有一个开关,因此您的计算效率也会随之提高。如果由于T不是Q的倍数而关闭,这是因为您的时间公式做出了相同的假设。当进程1完成后,IO阻塞,我认为CPU将立即执行上下文切换到进程2,而不是基于循环调度处于空闲状态。@skyrel:好,然后答案看起来更接近你提供的。更新了我的答案我有一个相同的问题,你能给我一些参考资料,从那里我可以得到描述的链接。。。