【问题标题】:Why does one core execute more than its share of instructions?为什么一个内核执行的指令多于它的指令份额?
【发布时间】:2016-03-04 21:12:04
【问题描述】:

我有一个在 MIPS 处理器模拟器上运行的 C 程序(graphics benchamrk)(我希望绘制一些性能特征图)。该处理器有 8 个内核,但似乎内核 0 执行的指令数量超过了其公平份额。基准测试是多线程的,工作完全分布在线程之间。为什么即使核心 0 在 8 核处理器上是多线程的,它也会运行大约 1/4 到一半的指令?

发生这种情况的可能原因有哪些?

【问题讨论】:

  • 线程优先级是否相同?线程时间片是否相同?线程是否阻塞/休眠?
  • 一个可能的原因是“工作 [is] 完全分布在线程之间”的说法是错误的。说真的,这个问题的细节为零。
  • 您确定要在创建线程之前考虑程序的串行部分吗?

标签: c multithreading mips multicore computer-architecture


【解决方案1】:

大多数应用程序工作负载都涉及一定数量的系统调用,这些调用可能会阻塞(例如,对于 I/O)。您的线程可能会花费一些时间被阻塞,并且调度程序只是在第一个可用内核上运行它们。在极端情况下,如果您有 N 个线程,但每个线程只能在 1/N 的时间内完成工作,那么单个内核就足以为整个工作负载提供服务。

您可以使用pthread_setaffinity_np 将每个线程分配给特定的内核,然后看看会发生什么。

【讨论】:

  • 我认为您的意思是被阻止 (N-1)/N 次 :)
【解决方案2】:

您没有提及您使用的是哪个操作系统。

但是,大多数操作系统中的大部分代码仍然是为单核 CPU 编写的。

因此,操作系统不会尝试在内核阵列上平均分配进程。

当有多个可用内核时,大多数操作系统会在第一个可用内核上启动一个进程(并且阻塞的进程使相关内核保持可用。)

例如,在我的运行 ubuntu linux 14.04 的系统(4 核 amd-64)上,CPU 通常不到 1% 的繁忙,所以一切都可以在单核上运行。

必须有很多应用程序在运行,例如视频和后台长时间运行的应用程序,打开几个窗口以显示除第一个内核之外的许多实际活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2014-04-05
    • 2013-03-08
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多