hwloc_get_type_depth函数返回错误的值

时间:2019-06-25 09:24:34

标签: c linux architecture x86-64

我正在C程序中使用 hwloc 库来获取有关计算机体系结构的信息。我尝试了一个简单的代码:

#include "hwloc.h"
#include <errno.h>
#include <stdio.h>
#include <string.h> 

int main(void)
{
int depth;
unsigned i, n;
char string[128];
hwloc_topology_t topology;

hwloc_topology_init(&topology);
hwloc_topology_load(topology);

int ncores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
   printf("Number of cores: %d\n", ncores);

if(hwloc_get_type_depth(topology, HWLOC_OBJ_CORE) != HWLOC_TYPE_DEPTH_UNKNOWN){
  depth = hwloc_get_type_depth(topology, HWLOC_OBJ_CORE);

  printf("*** Objects at level %d\n", depth);
  for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth);
       i++) {
      hwloc_obj_type_snprintf(string, sizeof(string), 
                              hwloc_get_obj_by_depth(topology, depth, i), 0);
      printf("Index %u: %s\n", i, string);
  }
}
}

我正在使用两个NUMA节点在Skylake架构上进行测试,每个节点上有16个内核。总共应该有32个核心。内核位于第6级。我使用-lhwloc进行编译。但是我得到的结果是这样的:

Number of cores: 2
*** Objects at level 1
Index 0: NUMANode
Index 1: NUMANode

显然,它无法为HWLOC_OBJ_CORE定义正确的深度。至于级别,而不是1,应该为6,核心数应该为32。现在,它输出有关NUMANodes的信息,这不是我传递给hwloc_get_type_depth的对象类型HWLOC_OBJ_CORE。

我假设我没有正确使用hwloc_get_type_depth函数,但是我不确定为什么。

0 个答案:

没有答案