【问题标题】:C++: Low CPU usage on Ubuntu multi core serverC++:Ubuntu 多核服务器上的低 CPU 使用率
【发布时间】:2015-01-22 21:28:41
【问题描述】:

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

我的操作系统:

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% 使用此服务器的核心。

谁能帮帮我?

【问题讨论】:

  • 你用什么工具来显示CPU使用率?该工具可能会将使用情况显示为 所有 CPU 的一小部分,因此如果您的代码是单线程的,那么它似乎只使用了多处理器的一小部分。
  • 我正在使用顶部。但是在服务器上运行的时间比我的笔记本要长。
  • 我认为你的方法是错误的。你应该考虑“我如何让这个应用程序计算/完成它需要最有效地做的事情”,而不是“我怎样才能让它成为一个 CPU 受限的程序,以尽可能多地使用 CPU 时间”.. .

标签: c++ ubuntu cpu-usage


【解决方案1】:

它可能不是您的操作系统,而是编译器。编译器正在移动目标,他们逐年改进(希望)他们的自动优化。您的代码可能仍在矢量化,而您并不知道。是的,我知道您在笔记本电脑上使用的是较新的编译器。

查看禁用所有优化(-O0 或类似)时是否仍有性能差异。如果您试图最大化 CPU 周期,您可能正在使用易于矢量化的数值计算。并行化也是如此。您还可以从 gcc 获得一般优化报告以及特定的矢量化报告。参数我不记得了,网上很容易找到。

此外,服务器(可能是多核 Xeon)上的内核数与您的 i3 之间存在天壤之别。您的 i3 有 2 个内核,每个内核都能够运行两个硬件线程,这意味着您实际上有 4 个 CPU。根据您的服务器配置,您可以在一个处理器中拥有多达 18 个内核,每个内核具有两个硬件线程。这相当于 36 个有效的 CPU。此外,每个主板可以有多个处理器。你可以算算。

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

您的操作系统还可以衡量您可以占用多少处理能力。如果此服务器不受您的控制,则管理员可能已经制定了一项策略来限制任何一个应用程序可以使用的处理百分比。

总之: (1) 禁用所有优化 (2) 检查单个核心 CPU 使用情况,查看所有有效 CPU 上的负载情况 (3) 重组你的代码,将任务分配到你的有效 CPU 上,每个任务都尽可能多地消耗处理。 (4) 确保您的管理员没有限制单个应用程序可以消耗的处理量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 2021-09-13
    • 2018-12-13
    相关资源
    最近更新 更多