我正在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函数,但是我不确定为什么。