2017-04-10 55 views

回答

0

我假设你正在执行一个正在执行固定工作量的程序,并且该工作是在仅有一个内核的处理器上执行的CPU绑定。

如果您的应用程序有一些可以被多线程利用的并行性,那么智能地使用多个线程将会增加CPU利用率,从而减少执行时间。例如,如果任务的并行区域在一秒钟内执行,利用率高于空闲10%,并且它可以支持5个线程,那么执行时间将变为A/5秒,并且CPU利用率增加5倍,或者50%。我假设一个CPU绑定任务。对于阻塞任务,您的执行时间可能会减少而不会影响CPU利用率。

如果您的任务无法利用并行性,那么由于不必要的线程开销,CPU利用率会有一些名义上的增加。

还有其他可能影响CPU利用率的问题,例如执行应用程序之前CPU上的负载是多少。如果它已经很高,那么多线程可能会导致很多颠簸。另外,如果你的并行块太短,那么线程创建和销毁开销会改变方程。

同样,考虑到可以并行化的相同任务A,将其序列化将增加总运行时间并降低CPU利用率。

请注意,在上述情况下,完成的总工作量是恒定的。