multithreading - 如何强制执行 CPU Socket 关联?

标签 multithreading cpu multicore affinity

我知道有一些方法可以强制执行线程/进程关联,以将特定线程/进程绑定(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/

相关文章:

python - 将来在不同的时间启动(非常短的) Action 时如何避免启动数百个线程

io - 从标准输出到我的电脑屏幕

python-3.x - 使用 xgb 和 XGBclassifier 的 CPU 比 GPU 快

c# - Unity3d 和线程

c++ - 如何在单个 POSIX 线程中结合两种不同的等待机制?

Java同步类中的方法

c - C 代码中的先来先服务多处理器(6 个处理器)调度程序

ruby - ruby 生成的子进程使用的 CPU

java - 当有多个处理器时,Thread.currentThread() 是如何工作的?

matlab - 我可以测量 matlab 中并行化的加速比吗?