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

Binding 如何知道核心是否已经绑定,binding,pthreads,mpi,core,Binding,Pthreads,Mpi,Core,hwloc中是否有线程已绑定到该“cpuset”的情况。 我需要知道这一点的原因: 假设我有一个四核。但如果我在运行时发布8个处理器。因此,它恰好将2个进程绑定到每个核心。然而,我只想在进程空闲时将其绑定到核心。因此,无论如何,我都可以知道核心已经绑定到进程。唯一的方法似乎是枚举所有进程,并检查其中一些是否绑定到指定的核心。您可以通过检查该实用程序的源代码了解如何做到这一点。它所做的是读取/proc文件系统并从中提取进程PID表单,然后使用hwloc\u get\u proc\u cpubind

hwloc中是否有线程已绑定到该“cpuset”的情况。 我需要知道这一点的原因:
假设我有一个四核。但如果我在运行时发布8个处理器。因此,它恰好将2个进程绑定到每个核心。然而,我只想在进程空闲时将其绑定到核心。因此,无论如何,我都可以知道核心已经绑定到进程。

唯一的方法似乎是枚举所有进程,并检查其中一些是否绑定到指定的核心。您可以通过检查该实用程序的源代码了解如何做到这一点。它所做的是读取
/proc
文件系统并从中提取进程PID表单,然后使用
hwloc\u get\u proc\u cpubind()
获取绑定掩码。这应该适用于Linux和Solaris,以及安装了
/proc
的*BSD系统。在Windows上,应使用来自的系统特定API来获取PID列表。OS X不支持处理器关联。

谢谢!我可以使用getpid()获取pid。但当我使用它时,它会给出分段错误。我在这里做错了什么?您是否使用
hwloc\u bitmap\u alloc()
初始化
set[I]
?不,我使用了“hwloc\u cpuset\u set[Numprocs]”它错了吗?
hwloc\u cpuset\u t
(以及
hwloc\u bitmap\u t
)是指针类型。您应该使用
hwloc\u bitmap\u alloc()
为(i=0;i)分配数组的每个元素
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)