我知道有一些方法可以强制执行线程/进程关联,以便将特定线程/进程绑定到各种操作系统中的CPU /核心。我只是想知道是否有办法强制执行CPU Socket亲和性。即强制执行一个线程/进程绑定到一个CPU套接字,它可以容纳一个多处理器芯片。
问题出现的原因是每个芯片的多处理器日益增加。
答案 0 :(得分:1)
我知道这样做的唯一方法是找出哪个线程ID映射到哪个套接字(或NUMA节点)。获得此信息后,您可以使用常用的线程绑定方法来强制执行此操作。
如果您使用的是Linux,则可以使用numactl.h库找出哪个NUMA节点属于哪个硬件线程。虽然NUMA节点并不总是与套接字一对一,但是所有后Core 2 Xeon和所有Opteron系统都是如此。
在Windows上,您可以使用GetNumaNodeProcessorMask来确定节点上的哪些硬件线程。
如果它们没有一对一映射(例如Core 2 Xeons,两个套接字都位于同一个NUMA节点上),从性能角度看它可能无关紧要,除非你'重新尝试对每个处理器上的共享缓存进行微观管理。
答案 1 :(得分:1)
如果我正确理解您的问题,您需要做的就是将进程或线程的关联设置为驻留在CPU上的核心集。
根据您的操作系统,有一些方法可以推断出这些信息。例如,在linux中,您可以查看/proc/cpuinfo
并查看哪些内核属于给定的处理器。