如何知道核心是否已经绑定

时间:2014-03-27 02:17:00

标签: binding pthreads mpi core

hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, depth_CORE,MyRank%4);
hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset);
hwloc_set_cpubind(topology, cpuset, 0)

无论如何在hwloc中都知道线程是否已经绑定到" cpuset"。 我需要知道这个的原因: 假设我有一个四核。但是如果我在运行时发出8个处理器。所以它碰巧将2个进程绑定到每个核心。但是我想只在它自由时将进程绑定到核心。所以,无论如何我都知道核心已被绑定处理。

1 个答案:

答案 0 :(得分:1)

似乎唯一的方法是枚举所有进程并检查它们中的一些是否绑定到指定的核心。您可以通过检查hwloc-ps实用程序的源代码来了解如何执行此操作。它的作用是它通过/proc文件系统读取并从那里提取进程PID,然后使用hwloc_get_proc_cpubind()来获取绑定掩码。这应该适用于Linux和Solaris,以及挂载/proc的* BSD系统。在Windows上,应该使用Tool Help library中特定于系统的API来获取PID列表。 OS X不支持处理器关联。