2

我知道有一些方法可以强制执行线程/进程关联,以将特定线程/进程绑定到各种操作系统中的 CPU/内核。我只是想知道是否有一种方法可以强制执行 CPU 套接字关联。即强制线程/进程绑定到可以容纳多处理器芯片的CPU Socket。

问题的出现是由于每个芯片的多处理器日益增加。

4

2 回答 2

1

我知道这样做的唯一方法是找出哪些线程 ID 映射到哪个套接字(或 NUMA 节点)。获得此信息后,您可以使用通常的线程绑定方法来强制执行它。

如果您使用的是 Linux,则可以使用numactl.h库来找出哪个硬件线程属于哪个 NUMA 节点。尽管 NUMA 节点并不总是与套接字一对一,但迄今为止所有后 Core 2 Xeons 和所有 Opteron 系统都是如此。

在 Windows 上,您可以使用GetNumaNodeProcessorMask来确定节点上的硬件线程。

在它们不一对一映射的情况下(例如 Core 2 Xeon,两个套接字都在同一个 NUMA 节点上),从性能的角度来看,这可能并不重要,除非您尝试微观管理每个处理器上的共享缓存。

于 2011-10-06T05:12:51.210 回答
1

如果我正确理解您的问题,您需要做的就是将进程或线程的关联设置为驻留在 CPU 上的一组内核。

根据您的操作系统,有多种方法可以推断此信息。例如,在 linux 中,您可以/proc/cpuinfo查看哪些内核属于给定处理器。

于 2011-10-06T05:31:58.370 回答