Ver código fonte

memory manager: add a node parameter to _starpu_memory_manager_add_size and _starpu_memory_manager_sub_size

Nathalie Furmento 12 anos atrás
pai
commit
28bc6a621d

+ 11 - 2
src/datawizard/memalloc.c

@@ -782,7 +782,7 @@ starpu_allocate_buffer_on_node(uint32_t dst_node, size_t size)
 		case STARPU_CPU_RAM:
 		{
 			addr = (uintptr_t)malloc(size);
-			_starpu_memory_manager_add_size(size);
+			_starpu_memory_manager_add_size(size, dst_node);
 			break;
 		}
 #if defined(STARPU_USE_CUDA) || defined(STARPU_SIMGRID)
@@ -805,6 +805,10 @@ starpu_allocate_buffer_on_node(uint32_t dst_node, size_t size)
 
 				addr = 0;
 			}
+			else
+			{
+			     _starpu_memory_manager_add_size(size, dst_node);
+			}
 #endif
 			break;
 #endif
@@ -824,7 +828,10 @@ starpu_allocate_buffer_on_node(uint32_t dst_node, size_t size)
 				if (ret)
 					addr = 0;
 				else
+				{
 					addr = (uintptr_t)ptr;
+					_starpu_memory_manager_add_size(size, dst_node);
+				}
 				break;
 #endif
 			}
@@ -847,7 +854,7 @@ starpu_free_buffer_on_node(uint32_t dst_node, uintptr_t addr, size_t size)
 #endif
 		case STARPU_CPU_RAM:
 			free((void*)addr);
-			_starpu_memory_manager_sub_size(size);
+			_starpu_memory_manager_sub_size(size, dst_node);
 			break;
 #if defined(STARPU_USE_CUDA) || defined(STARPU_SIMGRID)
 		case STARPU_CUDA_RAM:
@@ -862,6 +869,7 @@ starpu_free_buffer_on_node(uint32_t dst_node, uintptr_t addr, size_t size)
 			err = cudaFree((void*)addr);
 			if (STARPU_UNLIKELY(err != cudaSuccess))
 				STARPU_CUDA_REPORT_ERROR(err);
+			_starpu_memory_manager_sub_size(size, dst_node);
 #endif
 			break;
 		}
@@ -879,6 +887,7 @@ starpu_free_buffer_on_node(uint32_t dst_node, uintptr_t addr, size_t size)
                         err = clReleaseMemObject((void*)addr);
 			if (STARPU_UNLIKELY(err != CL_SUCCESS))
 				STARPU_OPENCL_REPORT_ERROR(err);
+			_starpu_memory_manager_sub_size(size, dst_node);
 #endif
                         break;
 		}

+ 17 - 12
src/datawizard/memory_manager.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2012-2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -18,27 +18,32 @@
 #include <common/config.h>
 #include <datawizard/memory_manager.h>
 
-static size_t global_size;
-static size_t used_size;
+static size_t global_size[STARPU_MAXNODES];
+static size_t used_size[STARPU_MAXNODES];
 
 int _starpu_memory_manager_init()
 {
 #ifdef STARPU_DEVEL
 #  warning use hwloc to get global size
 #endif
-     global_size = 0;
-     used_size = 0;
-     return 0;
+	int i;
+
+	for(i=0 ; i<STARPU_MAXNODES ; i++)
+	{
+		global_size[i] = 0;
+		used_size[i] = 0;
+	}
+	return 0;
 }
 
-int _starpu_memory_manager_add_size(size_t size)
+int _starpu_memory_manager_add_size(size_t size, unsigned node)
 {
-     used_size += size;
-     return 0;
+	used_size[node] += size;
+	return 0;
 }
 
-int _starpu_memory_manager_sub_size(size_t size)
+int _starpu_memory_manager_sub_size(size_t size, unsigned node)
 {
-     used_size -= size;
-     return 0;
+	used_size[node] -= size;
+	return 0;
 }

+ 3 - 3
src/datawizard/memory_manager.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2012-2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -21,7 +21,7 @@
 #include <common/config.h>
 
 int _starpu_memory_manager_init();
-int _starpu_memory_manager_add_size(size_t size);
-int _starpu_memory_manager_sub_size(size_t size);
+int _starpu_memory_manager_add_size(size_t size, unsigned node);
+int _starpu_memory_manager_sub_size(size_t size, unsigned node);
 
 #endif /* __MEMORY_MANAGER_H__ */