C ++:Ubuntu多核服务器上的CPU使用率低

时间:2015-01-22 21:28:41

标签: c++ ubuntu cpu-usage

我'在使用Ubuntu的强大多核服务器上运行c ++代码时遇到问题。问题是我的应用程序使用的CPU少于10%。但同样的应用程序使用我的i3笔记本中使用不同版本的Ubuntu的一个cpu的大约100%。

我的操作系统:

Linux version 3.11.0-23-generic (buildd@batsu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #40~precise1-Ubuntu SMP Wed Jun 4 22:06:36 UTC 2014

服务器的操作系统:

Linux version 3.11.0-12-generic (buildd@allspice) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #19-Ubuntu SMP Wed Oct 9 16:20:46 UTC 2013

至少就目前而言,我不需要并行化代码,也不需要使代码更高效。我只是想知道如何100%使用这个服务器的核心。

有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

它可能不是您的操作系统,而是编译器。编译器正在逐步改进目标,他们逐年改进(希望)自动优化。您的代码可能仍然是矢量化而您不了解它。是的,我意识到你在笔记本电脑上使用了更新的编译器。

当您禁用所有优化(-O0或某些优化)时,查看是否仍有性能增量。如果您尝试最大化CPU周期,则可能正在使用易于矢量化的数值计算。并行化也是如此。您还可以从gcc获取常规优化报告以及特定的矢量化报告。我不记得参数,但您可以在线轻松找到它。

此外,服务器(可能是多核Xeon)和i3之间的核心数量存在差异。您的i3有2个内核,每个内核可以运行两个硬件线程,这意味着您实际上有4个CPU。根据您的服务器配置,您最多可以拥有18个内核,每个内核在处理器中有两个硬件线程。这意味着36个有效的CPU。此外,每个主板可以有多个处理器。你可以做数学。

编译器和操作系统都会影响应用程序的处理器使用。如果您要求多个线程尝试使用处理,则操作系统可以将这些线程存储到不同的处理器,从而降低系统范围的CPU使用率。即使您运行的是纯串行代码,智能编译器也可以将代码分解为多个线程,您的线程库可以分配给这36个有效的CPU。

您的操作系统还可以计量您可以进行多少处理。如果此服务器不在您的控制之下,则管理员可能已建立一个策略来限制任何一个应用程序可以使用的处理百分比。

总之: (1)禁用所有优化 (2)检查各个核心CPU使用情况,以查看所有有效CPU的负载 (3)重新构建代码,以便分配将在有效CPU中分布的任务,每个任务都会消耗尽可能多的处理。 (4)确保您的管理员不限制单个应用程序可以使用的处理量。