Browse Source

Add _starpu_free_buffer_on_node, to be used by all interfaces to simplify data release

Samuel Thibault 12 years ago
parent
commit
da1ded45cf

+ 1 - 29
src/datawizard/interfaces/variable_interface.c

@@ -214,35 +214,7 @@ static ssize_t allocate_variable_buffer_on_node(void *data_interface_, uint32_t
 
 static void free_variable_buffer_on_node(void *data_interface, uint32_t node)
 {
-	enum starpu_node_kind kind = starpu_node_get_kind(node);
-	switch(kind)
-	{
-		case STARPU_CPU_RAM:
-			free((void*)STARPU_VARIABLE_GET_PTR(data_interface));
-			break;
-#ifdef STARPU_USE_CUDA
-		case STARPU_CUDA_RAM:
-		{
-			cudaError_t err;
-			err = cudaFree((void*)STARPU_VARIABLE_GET_PTR(data_interface));
-			if (STARPU_UNLIKELY(err != cudaSuccess))
-				STARPU_CUDA_REPORT_ERROR(err);
-			break;
-		}
-#endif
-#ifdef STARPU_USE_OPENCL
-                case STARPU_OPENCL_RAM:
-		{
-			cl_int err;
-                        err = clReleaseMemObject((void*)STARPU_VARIABLE_GET_PTR(data_interface));
-			if (STARPU_UNLIKELY(err != CL_SUCCESS))
-				STARPU_OPENCL_REPORT_ERROR(err);
-                        break;
-		}
-#endif
-		default:
-			STARPU_ABORT();
-	}
+	_starpu_free_buffer_on_node(STARPU_VARIABLE_GET_PTR(data_interface), node);
 }
 
 #ifdef STARPU_USE_CUDA

+ 34 - 0
src/datawizard/memalloc.c

@@ -796,6 +796,40 @@ _starpu_allocate_buffer_on_node(uint32_t dst_node, size_t size)
 	return addr;
 }
 
+void
+_starpu_free_buffer_on_node(uint32_t dst_node, uintptr_t addr)
+{
+	enum starpu_node_kind kind = starpu_node_get_kind(dst_node);
+	switch(kind)
+	{
+		case STARPU_CPU_RAM:
+			free((void*)addr);
+			break;
+#ifdef STARPU_USE_CUDA
+		case STARPU_CUDA_RAM:
+		{
+			cudaError_t err;
+			err = cudaFree((void*)addr);
+			if (STARPU_UNLIKELY(err != cudaSuccess))
+				STARPU_CUDA_REPORT_ERROR(err);
+			break;
+		}
+#endif
+#ifdef STARPU_USE_OPENCL
+                case STARPU_OPENCL_RAM:
+		{
+			cl_int err;
+                        err = clReleaseMemObject((void*)addr);
+			if (STARPU_UNLIKELY(err != CL_SUCCESS))
+				STARPU_OPENCL_REPORT_ERROR(err);
+                        break;
+		}
+#endif
+		default:
+			STARPU_ABORT();
+	}
+}
+
 /*
  * In order to allocate a piece of data, we try to reuse existing buffers if
  * its possible.

+ 1 - 0
src/datawizard/memalloc.h

@@ -61,6 +61,7 @@ void _starpu_deinit_mem_chunk_lists(void);
 void _starpu_request_mem_chunk_removal(starpu_data_handle_t handle, unsigned node, int handle_deleted);
 int _starpu_allocate_memory_on_node(starpu_data_handle_t handle, struct _starpu_data_replicate *replicate, unsigned is_prefetch);
 uintptr_t _starpu_allocate_buffer_on_node(uint32_t dst_node, size_t size);
+void _starpu_free_buffer_on_node(uint32_t dst_node, uintptr_t addr);
 size_t _starpu_free_all_automatically_allocated_buffers(uint32_t node);
 void _starpu_memchunk_recently_used(struct _starpu_mem_chunk *mc, unsigned node);