如何在从调度程序中移除核心的 (Linux) 系统上设置 OpenMP 线程的 CPU 亲和性(例如使用 isolcpus 启动参数)?在仅使用前 12 个核心的系统中
如何在从调度程序中删除核心的(Linux)系统上设置 OpenMP 线程的 CPU 亲和性(例如使用 isolcpus
启动参数)?
在只有前 12 个核心可供调度程序使用的系统上 ( isolcpus=12-127
),使用以下命令调用 OpenMP 程序
GOMP_CPU_AFFINITY=64-127 OMP_NUM_THREADS=64 taskset --cpu-list 64-127 command
所有 64 个 OpenMP 线程均在 CPU 64 上运行。
和
GOMP_CPU_AFFINITY=64-127 OMP_NUM_THREADS=64 command
所有 64 个 OpenMP 线程均在 CPU 0-12 上运行。
如何让 64 个 OpenMP 线程在 CPU 64-127 上运行?
我可以使用以下软件以编程方式完成此操作
#pragma omp parallel for
for(...)
pthread_setaffinity_np(...)
启动 OpenMP 程序时,有没有什么方法可以从外部完成此操作?
核心隔离限制 OpenMP 到单核 中提出了类似的问题 ,但没有提供解决方案。给出的答案 “我认为你要求 OpenMP 做一些不可能的事情。” 是不正确的,因为 OpenMP 库需要做的就是调用 pthread_setaffinity_np()
或等效函数。它甚至不需要 taskset
在中指定的 CPU 上运行 GOMP_CPU_AFFINITY
。)