浏览代码

Always use HWLOC_OBJ_NUMANODE

Samuel Thibault 7 年之前
父节点
当前提交
f84f6a6983

+ 15 - 5
src/core/perfmodel/perfmodel_bus.c

@@ -48,6 +48,16 @@
 #include <windows.h>
 #endif
 
+#ifdef STARPU_HAVE_HWLOC
+#include <hwloc.h>
+#ifndef HWLOC_API_VERSION
+#define HWLOC_OBJ_PU HWLOC_OBJ_PROC
+#endif
+#if HWLOC_API_VERSION < 0x00010b00
+#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
+#endif
+#endif
+
 #if defined(HAVE_DECL_HWLOC_CUDA_GET_DEVICE_OSDEV_BY_INDEX) && HAVE_DECL_HWLOC_CUDA_GET_DEVICE_OSDEV_BY_INDEX
 #include <hwloc/cuda.h>
 #endif
@@ -184,7 +194,7 @@ static void measure_bandwidth_between_host_and_dev_on_numa_with_cuda(int dev, in
 	if (nnuma_nodes > 1)
 	{
 		/* NUMA mode activated */
-		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, numa);
+		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, numa);
 #if HWLOC_API_VERSION >= 0x00020000
 		h_buffer = hwloc_alloc_membind(hwtopology, size, obj->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
 #else
@@ -449,7 +459,7 @@ static void measure_bandwidth_between_host_and_dev_on_numa_with_opencl(int dev,
 	if (nnuma_nodes > 1)
 	{
 		/* NUMA mode activated */
-		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, numa);
+		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, numa);
 #if HWLOC_API_VERSION >= 0x00020000
 		h_buffer = hwloc_alloc_membind(hwtopology, size, obj->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
 #else
@@ -610,7 +620,7 @@ static void measure_bandwidth_between_numa_nodes_and_dev(int dev, struct dev_tim
 		/* Chose one CPU connected to this NUMA node */
 		unsigned cpu_id = 0;
 #ifdef STARPU_HAVE_HWLOC
-		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, numa_id);
+		hwloc_obj_t obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, numa_id);
 
 		if (obj)
 		{
@@ -669,7 +679,7 @@ static void measure_bandwidth_latency_between_numa(int numa_src, int numa_dst)
 		unsigned iter;
 
 		unsigned char *h_buffer;
-		hwloc_obj_t obj_src = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, numa_src);
+		hwloc_obj_t obj_src = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, numa_src);
 #if HWLOC_API_VERSION >= 0x00020000
 		h_buffer = hwloc_alloc_membind(hwtopology, SIZE, obj_src->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
 #else
@@ -677,7 +687,7 @@ static void measure_bandwidth_latency_between_numa(int numa_src, int numa_dst)
 #endif
 
 		unsigned char *d_buffer;
-		hwloc_obj_t obj_dst = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, numa_dst);
+		hwloc_obj_t obj_dst = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, numa_dst);
 #if HWLOC_API_VERSION >= 0x00020000
 		d_buffer = hwloc_alloc_membind(hwtopology, SIZE, obj_dst->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
 #else

+ 2 - 2
src/core/topology.c

@@ -122,7 +122,7 @@ static hwloc_obj_t numa_get_obj(hwloc_obj_t obj)
 	}
 	return obj->memory_first_child;
 #else
-	while (obj->type != HWLOC_OBJ_NODE)
+	while (obj->type != HWLOC_OBJ_NUMANODE)
 	{
 		obj = obj->parent;
 
@@ -999,7 +999,7 @@ unsigned _starpu_topology_get_nnumanodes(struct _starpu_machine_config *config S
 	if (starpu_get_env_number_default("STARPU_USE_NUMA", 0))
 	{
 		struct _starpu_machine_topology *topology = &config->topology ;
-		int nnumanodes = hwloc_get_nbobjs_by_type(topology->hwtopology, HWLOC_OBJ_NODE) ;
+		int nnumanodes = hwloc_get_nbobjs_by_type(topology->hwtopology, HWLOC_OBJ_NUMANODE) ;
 		res = nnumanodes > 0 ? nnumanodes : 1 ;
 	}
 	else

+ 11 - 1
src/datawizard/malloc.c

@@ -36,6 +36,16 @@
 #include <smpi/smpi.h>
 #endif
 
+#ifdef STARPU_HAVE_HWLOC
+#include <hwloc.h>
+#ifndef HWLOC_API_VERSION
+#define HWLOC_OBJ_PU HWLOC_OBJ_PROC
+#endif
+#if HWLOC_API_VERSION < 0x00010b00
+#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
+#endif
+#endif
+
 #ifndef O_BINARY
 #define O_BINARY 0
 #endif
@@ -310,7 +320,7 @@ int _starpu_malloc_flags_on_node(unsigned dst_node, void **A, size_t dim, int fl
 	{
 		struct _starpu_machine_config *config = _starpu_get_machine_config();
 		hwloc_topology_t hwtopology = config->topology.hwtopology;
-		hwloc_obj_t numa_node_obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NODE, starpu_memory_nodes_numa_id_to_hwloclogid(dst_node));
+		hwloc_obj_t numa_node_obj = hwloc_get_obj_by_type(hwtopology, HWLOC_OBJ_NUMANODE, starpu_memory_nodes_numa_id_to_hwloclogid(dst_node));
 		hwloc_bitmap_t nodeset = numa_node_obj->nodeset;
 #if HWLOC_API_VERSION >= 0x00020000
 		*A = hwloc_alloc_membind(hwtopology, dim, nodeset, HWLOC_MEMBIND_BIND | HWLOC_MEMBIND_NOCPUBIND, flags | HWLOC_MEMBIND_BYNODESET);

+ 4 - 1
src/drivers/cpu/driver_cpu.c

@@ -40,6 +40,9 @@
 #ifndef HWLOC_API_VERSION
 #define HWLOC_OBJ_PU HWLOC_OBJ_PROC
 #endif
+#if HWLOC_API_VERSION < 0x00010b00
+#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
+#endif
 #endif
 
 #ifdef STARPU_HAVE_WINDOWS
@@ -161,7 +164,7 @@ static size_t _starpu_cpu_get_global_mem_size(int nodeid STARPU_ATTRIBUTE_UNUSED
 	int nnumas = starpu_memory_nodes_get_numa_count();
 	if (nnumas > 1)
 	{
-		int depth_node = hwloc_get_type_depth(topology->hwtopology, HWLOC_OBJ_NODE);
+		int depth_node = hwloc_get_type_depth(topology->hwtopology, HWLOC_OBJ_NUMANODE);
 
 		if (depth_node == HWLOC_TYPE_DEPTH_UNKNOWN)
 		{

+ 12 - 3
src/sched_policies/scheduler_maker.c

@@ -21,6 +21,15 @@
 #include <common/list.h>
 #include <core/workers.h>
 
+#ifdef STARPU_HAVE_HWLOC
+#include <hwloc.h>
+#ifndef HWLOC_API_VERSION
+#define HWLOC_OBJ_PU HWLOC_OBJ_PROC
+#endif
+#if HWLOC_API_VERSION < 0x00010b00
+#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
+#endif
+
 #include "sched_component.h"
 
 
@@ -72,7 +81,7 @@ static struct sched_component_list helper_make_scheduler(struct starpu_sched_tre
 	{
 		CASE(HWLOC_OBJ_MACHINE,hwloc_machine_composed_sched_component);
 		CASE(HWLOC_OBJ_GROUP,hwloc_component_composed_sched_component);
-		CASE(HWLOC_OBJ_NODE,hwloc_component_composed_sched_component);
+		CASE(HWLOC_OBJ_NUMANODE,hwloc_component_composed_sched_component);
 		CASE(HWLOC_OBJ_SOCKET,hwloc_socket_composed_sched_component);
 		CASE(HWLOC_OBJ_CACHE,hwloc_cache_composed_sched_component);
 	default:
@@ -144,7 +153,7 @@ static int is_same_kind_of_all(struct starpu_sched_component * root, struct _sta
 static struct starpu_sched_component * find_mem_component(struct starpu_sched_component * root, struct starpu_sched_component * worker_component)
 {
 	struct starpu_sched_component * component = worker_component;
-	while(component->obj->type != HWLOC_OBJ_NODE
+	while(component->obj->type != HWLOC_OBJ_NUMANODE
 	      && component->obj->type != HWLOC_OBJ_GROUP
 	      && component->obj->type != HWLOC_OBJ_MACHINE)
 	{
@@ -174,7 +183,7 @@ static struct starpu_sched_component * where_should_we_plug_this(struct starpu_s
 		   && is_same_kind_of_all(parent->children[i], worker_component->data))
 			return parent->children[i];
 	}
-	if(obj->type == HWLOC_OBJ_NODE || obj->type == HWLOC_OBJ_GROUP)
+	if(obj->type == HWLOC_OBJ_NUMANODE || obj->type == HWLOC_OBJ_GROUP)
 	{
 		struct starpu_sched_component * component = starpu_sched_component_composed_component_create(root->tree, specs.hwloc_component_composed_sched_component);
 		component->obj = obj;