我对 CPU 逻辑核心和物理核心以及调度程序亲和性有点困惑。假设有一个 4 物理核心 CPU,每个核心支持 2 个超线程。从今以后,根据/cpu/procinfo
逻辑核心 0 和逻辑核心 8 本质上是相同的物理核心。
现在,假设有两个线程:
情况一:两个线程都pthread_attr_setaffinity_np
用逻辑核心0启动。
情况 II:一个线程使用逻辑核心 0 启动pthread_attr_setaffinity_np
,另一个线程使用逻辑核心 8启动
这两种情况会有什么区别吗?
答案1
是的,会有显著差异。如果两个线程都设置为逻辑核心 0,则这两个线程将永远不会同时运行,而是轮流使用逻辑核心 0。如果一个线程设置为逻辑核心 0,另一个线程设置为逻辑核心 8,则这两个线程可以同时运行,共享该物理核心中的资源。
想象一下,如果一个线程几乎完全执行整数运算,而另一个线程几乎完全执行浮点运算。如果它们都绑定到逻辑核心 0,则物理核心将交替使其整数单元空闲,使其浮点单元空闲。将一个设置为 0,另一个设置为 8,一个线程可以使用整数单元,而另一个线程则使用物理核心的浮点单元。