- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用的是带有 --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/
我正在使用 NUMA 计算机。它有两个节点,每个节点上有 16GB 内存。当我运行一个大型程序时,我同时使用了 htop 和 numactl --hardware 来观察内存消耗。但是我得到了两个不同
在 Linux 中使用带 --membind 选项的 numactl 时,假设我执行以下操作: numactl --membind=0,1,2 ./prog 是否会在所有 NUMA 节点 0、1 和
我想了解 numactl --hardware 中的 node distances 是什么意思? 在我们的集群上,它输出以下内容 numactl --硬件 可用:2 个节点 (0-1) 节点 0 CP
我使用的是带有 --physcpubind 选项的 numactl。手册说: --physcpubind=cpus, -C cpus Only execute process on cpus. Etc
我正在尝试使用 numactl 启动我的 mpi 应用程序 (Open MPI 1.4.5)。由于显然使用 --cpu-nodebind 的负载平衡不会在可用节点之间以循环方式分配我的进程,我想专门将
numactl 是一个可以设置处理器关联的进程。它以固定到 cpu 的过程作为参数: numactl -physcpubind 0 我可以使用 pysys startProcess 命令成功运行我
我开发了一个简单的程序来测试一个页面在哪个 NUMA 节点中,基于 this question . 问题是,将我的程序结果与 Xeon E5-2698 v4(两个 NUMA 节点)上的 numactl
我正在尝试在 NUMA 机器上启动 mongodb 作为守护进程。当我运行时 numactl --interleave=all mongod & Mongo 启动并正常运行,但所有输出仍然显示。 (例
我有一个 16GB 的 Intel Xeon Phi 64 核 CPU 片上存储器设置为 NUMA 节点 1。我想将一个在 Docker 容器内运行的进程绑定(bind)到这个 NUMA 节点,但它出
我正在尝试根据 https://hub.docker.com/_/mongo/ 上的官方 repo 为内存中的 MongoDB 创建 Dockerfile . 在 dockerfile-entrypo
我尝试在带有 amazon linux 的 medium Ec2 上安装 sql-serven,但是我遇到了几个包的错误。 我正在使用以下命令:sudo yum install mssql-serve
我是一名优秀的程序员,十分优秀!