我使用taskset命令在Linux主机上设置了一个多线程进程,如下所示:
taskset -c 1,2 ./myprocess
一个特定的线程是否总是运行在特定的CPU上,例如,线程1总是在c1上运行?还是它会在不同的时间运行在c1或c2上?
我使用taskset命令在Linux主机上设置了一个多线程进程,如下所示:
taskset -c 1,2 ./myprocess
一个特定的线程是否总是运行在特定的CPU上,例如,线程1总是在c1上运行?还是它会在不同的时间运行在c1或c2上?
pthread_setaffinity_np
)。请注意,您可以使用强大的hwloc工具(hwloc-ps -t
)检查给定进程的线程亲和力。OMP_PLACES
)来设置每个线程的亲和力。
taskset -c 7,8 ./executable
,但它只占用了7和8核中的一个。其中7和8是CentOS机器上的独立核心。请问有什么方法可以确保可执行文件同时使用第7和第8个核心吗? - SatKetchumtaskset
文档中,“processor”(又名“CPU”)的含义不太清楚。据我所知,在这个上下文中,“processor”是指处理单元,因此它可以是支持SMT或简单核心的微处理器芯片上的硬件线程。如果第7和8位置是映射在同一个核心上的两个硬件线程,那么效率通常会比提供两个不同核心的硬件线程 ID 低。实际上,这甚至更加复杂:有逻辑和物理 ID,并且您需要选择正确的 ID,即使文档几乎从不告诉您哪一个是必需的... - Jérôme Richardhwloc
这样的工具可以使所有这些更加清晰,并避免(非常常见的)错误,特别是lstopo
和hwloc-calc
。 - Jérôme Richard