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