linux 任务集:多线程进程的线程是否总是 运行 在特定核心上?

linux taskset: Does a thread of a multi-thread process always run on a particular core?

我使用任务集在 Linux 主机上将多线程进程设置为 运行,如下所示:

任务-c 1,2 ./myprocess

某个特定的线程是否总是 运行 在特定的 CPU 上,例如,线程 1 总是 运行 在 c1 上?或者它会 运行 在不同的时间在 c1 或 c2 上?

不,过滤器应用于整个进程,线程可以在核心(受限列表)之间移动。如果你想让线程不动,那么你需要分别设置每个线程的亲和力(例如使用pthread_setaffinity_np)。请注意,您可以使用强大的 hwloc 工具 (hwloc-ps -t).

检查给定进程的线程的关联性

请注意,有些 libraries/frameworks 有办法更轻松地做到这一点。 OpenMP 程序就是这种情况,您可以使用 OMP_PLACES 等环境变量来设置每个线程的亲和力。