【问题标题】:Regarding CPU utilization关于 CPU 利用率
【发布时间】:2015-04-24 10:23:49
【问题描述】:

考虑到下面的 C 代码,我预计 CPU 利用率会上升到 100%,因为处理器会尝试完成分配给它的工作(在这种情况下是无休止的)。在运行可执行文件 5 分钟后,我发现 CPU 达到最大值。 48%。我正在运行 Mac OS X 10.5.8;处理器:英特尔酷睿 2 双核;编译器:GCC 4.1。

int i = 10;
while(1) {
    i = i * 5;
}

有人能解释一下为什么 CPU 使用率没有达到 100% 吗?操作系统是否限制 CPU 达到 100%?

请注意,如果我在循环中添加“printf()”,CPU 会达到 88%。我知道在这种情况下,处理器还必须写入标准输出流,因此使用率急剧上升。

这与每单位时间分配给处理器的工作量有关吗?

问候, 文。

【问题讨论】:

    标签: c macos


    【解决方案1】:

    您有一个多核处理器并且您处于单线程方案中,因此您将只使用一个核心全油门......为什么您希望在类似情况下整体处理器使用率达到 100%?

    【讨论】:

      【解决方案2】:

      同时运行您的程序的两个副本。这些将使用“Core 2 Duo”CPU 的两个内核,整体 CPU 使用率将达到 100%


      编辑

      如果我在循环中添加“printf()”,CPU 会达到 88%。

      printf 将一些字符发送到终端/屏幕。发送信息、显示和更新由您的 exe 之外的代码处理,这很可能在另一个线程上执行。但是显示几个字符并不需要 100% 这样的线程。这就是为什么您看到 Core 1 为 100%,Core 2 为 76%,这导致总体 CPU 使用率为您所看到的 88%。

      【讨论】:

      • 嗯,我很确定你会看到 100%大部分的时间
      • 不知道,没试过。 OP 用 printf 表示它达到 88%,表明它可能已经使用了两个 CPU
      • 当我在循环中添加 "printf("%s", "whatever")" 时,它会达到 88%。那么,如果线程数 >= CPU 内核数,CPU 利用率将达到 100%(假设该作业需要相当长的时间来完成),我是否正确?
      • @Ven 您是否同时运行了您的程序的两个副本?请参阅我的 printf 编辑
      • @DrKoch:是的,我做到了。 CPU 利用率高达 100%(两个内核都处于最大值)
      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多