我知道有一些方法可以强制执行线程/进程关联,以将特定线程/进程绑定(bind)到各种操作系统中的 CPU/内核。我只是想知道是否有一种方法可以强制执行 CPU 套接字关联。即强制线程/进程绑定(bind)到可以容纳多处理器芯片的 CPU 套接字。
问题的出现是由于每个芯片的多处理器日益增加。
最佳答案
我知道这样做的唯一方法是找出哪些线程 ID 映射到哪个套接字(或 NUMA 节点)。获得此信息后,您可以使用通常的线程绑定(bind)方法来强制执行它。
如果您使用的是 Linux,您可以使用 numactl.h库来找出哪个硬件线程属于哪个 NUMA 节点。尽管 NUMA 节点并不总是与套接字一对一,但迄今为止所有后 Core 2 Xeons 和所有 Opteron 系统都是如此。
在 Windows 上,您可以使用 GetNumaNodeProcessorMask找出节点上的硬件线程。
在它们不一对一映射的情况下(例如 Core 2 Xeon,两个套接字都在同一个 NUMA 节点上),从性能的角度来看,这可能并不重要,除非您尝试微观管理每个处理器上的共享缓存。
关于multithreading - 如何强制执行 CPU Socket 关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670436/