为什么一个核心执行的指令超过了它的份额?

时间:2015-12-01 03:26:56

标签: c multithreading mips multicore computer-architecture

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

可能出现这种情况的原因有哪些?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您没有提到您正在使用的操作系统。

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

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

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

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

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