我有一个在MIPS处理器模拟器上运行的C程序(图形benchamrk)(我希望绘制一些性能特征图)。处理器有8个内核,但核心0的执行速度似乎超过了其公平的指令份额。基准测试是多线程的,工作在线程之间完全分配。为什么核心0恰好在1/4到一半的指令之间运行,即使它在8核处理器上是多线程的?
可能出现这种情况的原因有哪些?
答案 0 :(得分:2)
大多数应用程序工作负载都涉及一些系统调用,这些调用可能会阻塞(例如,用于I / O)。您的线程可能会花费一些时间来阻止,而调度程序只是在第一个可用核心上运行它们。在极端情况下,如果您有N个线程,但每个线程只能在1 / N的时间内工作,则单个核心足以为整个工作负载提供服务。
您可以使用pthread_setaffinity_np
将每个线程分配给特定核心,然后查看会发生什么。
答案 1 :(得分:0)
您没有提到您正在使用的操作系统。
但是,大多数操作系统中的大多数代码仍然是针对单核CPU编写的。
因此,操作系统不会尝试在核心阵列上均匀分配进程。
当有多个可用核心时,大多数操作系统会在第一个可用核心上启动一个进程(阻塞进程会使相关核心可用。)
例如,在运行ubuntu linux 14.04的我的系统(4核amd-64)上,CPU通常不到1%,所以一切都可以在单核上运行。
必须有很多应用程序像视频和后台长时间运行的应用程序一样运行,有几个窗口打开以显示除第一个核心之外的许多真实活动。