gpt4 book ai didi

c - numactl --physcpubind

转载 作者:IT王子 更新时间:2023-10-29 00:32:29 25 4
gpt4 key购买 nike

我使用的是带有 --physcpubind 选项的 numactl。手册说:

--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...

假设我的 NUMA 系统有 3 个 NUMA 节点,每个节点有 4 个核心。 NUMA 节点 0 的核心编号为 0、1、2、3。 NUMA节点1有4、5、6、7,NUMA节点2有8、9、10、11。我的问题是假设我按如下方式运行程序:

export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program

即我将用 6 个线程运行我的程序,我要求它们在 CPU 内核 0、1、4、5、8、9 上。例如,如果在程序线程 0-5 的某个时刻分配了 CPU 内核 0、1、4、5、8、9 (setup1)。是否有可能在程序执行期间的某个其他时刻,线程 0 可能正在 CPU 核心 9 上运行,等等? IE。 CPU核之间会有线程迁移吗?或者线程唯一地绑定(bind)到 CPU 内核(如在 setup1 中)?谢谢。

最佳答案

numactl

physcpubind 选项应该是sched_setaffinity 的接口(interface)系统调用,它在进程启动时修改进程的 cpuset(允许的 CPU 集)。每个线程都有自己的 cpuset,但所有线程都将从父进程继承它们的 cpuset 值。

因此,允许线程在 cpuset 的任何 CPU 上运行,允许在 cpuset 的任何 cpu 之间迁移。

任何线程都可以调用 sched_setaffinity 或 pthread_setaffinity_np (特定于 linux 的单线程亲和性变化变体)缩小甚至扩展其 cpuset。

如果您想将线程绑定(bind)到 CPU,请在每个线程中直接使用 sched_setaffinity 或 pthread_setaffinity_np,或者在 OpenMP 的情况下通过 OMP 库设置关联:OpenMP and CPU affinity例如使用命令(OpenMP 3.1+)

export OMP_PROC_BIND=true

我猜测 OMP 库会在 omp 库初始化时以循环方式从进程的 cpuset 中选择 CPU。

对于旧版本的 libgomp - GCC 使用的 OMP 支持库 - 您可以使用命令传递允许的 CPU 集:

export GOMP_CPU_AFFINITY=0-1,4-5,8-9

PS:要检查您的线程位置,您可以启动 top 并使用 f j 键启用“Last CPU used”字段并打开使用 H 显示线程。

关于c - numactl --physcpubind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14720332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com