采访者问我这个问题,我想了解概念,即CPU使用情况如何变化:
1)如果在使用单核机器的单线程设计中运行无限循环
2)如果在使用多核机器(4核心)的单线程设计中运行无限循环
3)如果在使用单核机器的多线程设计中运行无限循环
4)如果在使用多核机器(4核心)的多线程设计中运行无限循环
5)当应用程序拥有更多线程然后是硬件核心时会发生什么。例如:应用程序在4核心机器中创建30个线程。它会提高应用程序的性能还是降低性能?
6)当应用程序的线程少于硬件核心时会发生什么。例如:应用程序在4核心机器中创建5个线程。它会提高应用程序的性能还是降低性能?
请求您解释概念,以便事情清楚。我有很多困惑。
答案 0 :(得分:1)
首先,正如评论所述,完整的答案取决于各种各样的事情,包括:
然而,我们可以给出一些"第一近似值"答案,如果我们做一些简化的假设。
1)如果使用单核机器在单线程设计中运行无限循环。
让我们称之为基线案例;即,下面描述的加速比对于这种情况是 relative 。
2)如果在使用多核机器(4核心)的单线程设计中运行无限循环
没有加速。即使有多个内核,应用程序也无法使用它们。一个线程一次运行在一个核心上。
3)如果在单线程机器的多线程设计中运行无限循环。
没有加速。虽然有N个线程,但每个线程在单个可用核心上平均可获得1 / N的可用执行时间。核心一次只能运行一个线程。
4)如果在使用多核机器(4核心)的多线程设计中运行无限循环
加速最多四倍。
5)当应用程序拥有更多线程然后是硬件核心时会发生什么。例如:应用程序在4核心机器中创建30个线程。它会提高应用程序的性能还是降低性能?
如果应用程序受CPU限制,则速度不会超过四倍。见上文2)和3)。
6)当应用程序的线程少于硬件核心时会发生什么。例如:应用程序在4核心机器中创建5个线程。它会提高应用程序的性能还是降低性能?
你的例子没有意义。 5个线程超过4个核心。如果你的意思是4个内核上有3个线程,那么CPU绑定应用程序的最大加速比是三倍。
以下是我为上述做出的主要简化假设: