繁体   English   中英

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

[英]C++: Low CPU usage on Ubuntu multi core server

我在使用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%使用。

有人可以帮我吗?

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

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

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

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

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

因此,可以得出以下结论:(1)禁用所有优化(2)检查各个核心CPU的使用情况,以查看所有有效CPU上的负载(3)重组代码以植入将在各个有效CPU上分配的任务消耗尽可能多的处理。 (4)确保您的管理员没有限制单个应用程序可以使用的处理量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM