ソースを参照

Drop allocating memory only for callbacks in task_insert, the reason we allocated a structure has disappeared

Samuel Thibault 9 年 前
コミット
8c48c44395
共有1 個のファイルを変更した8 個の追加68 個の削除を含む
  1. 8 68
      src/util/starpu_task_insert_utils.c

+ 8 - 68
src/util/starpu_task_insert_utils.c

@@ -21,25 +21,6 @@
 #include <common/utils.h>
 #include <core/task.h>
 
-/* Deal with callbacks. The unpack function may be called multiple times when
- * we have a parallel task, and we should not free the cl_arg parameter from
- * the callback function. */
-struct _starpu_task_insert_cb_wrapper
-{
-	_starpu_callback_func_t callback_func;
-	void *callback_arg;
-};
-
-static
-void _starpu_task_insert_callback_wrapper(void *_cl_arg_wrapper)
-{
-	struct _starpu_task_insert_cb_wrapper *cl_arg_wrapper = (struct _starpu_task_insert_cb_wrapper *) _cl_arg_wrapper;
-
-	/* Execute the callback specified by the application */
-	if (cl_arg_wrapper->callback_func)
-		cl_arg_wrapper->callback_func(cl_arg_wrapper->callback_arg);
-}
-
 static
 void _starpu_pack_arguments(size_t *current_offset, size_t *arg_buffer_size_, char **arg_buffer_, void *ptr, size_t ptr_size)
 {
@@ -236,21 +217,6 @@ void _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task **
 
 	_STARPU_TRACE_TASK_BUILD_START();
 
-	struct _starpu_task_insert_cb_wrapper *cl_arg_wrapper = (struct _starpu_task_insert_cb_wrapper *) malloc(sizeof(struct _starpu_task_insert_cb_wrapper));
-	STARPU_ASSERT(cl_arg_wrapper);
-
-	cl_arg_wrapper->callback_func = NULL;
-
-	struct _starpu_task_insert_cb_wrapper *prologue_cl_arg_wrapper = (struct _starpu_task_insert_cb_wrapper *) malloc(sizeof(struct _starpu_task_insert_cb_wrapper));
-	STARPU_ASSERT(prologue_cl_arg_wrapper);
-
-	prologue_cl_arg_wrapper->callback_func = NULL;
-
-	struct _starpu_task_insert_cb_wrapper *prologue_pop_cl_arg_wrapper = (struct _starpu_task_insert_cb_wrapper *) malloc(sizeof(struct _starpu_task_insert_cb_wrapper));
-	STARPU_ASSERT(prologue_pop_cl_arg_wrapper);
-
-	prologue_pop_cl_arg_wrapper->callback_func = NULL;
-
 	(*task)->cl = cl;
 	current_buffer = 0;
 
@@ -351,45 +317,32 @@ void _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task **
 		}
 		else if (arg_type==STARPU_CALLBACK)
 		{
-			void (*callback_func)(void *);
-			callback_func = va_arg(varg_list, _starpu_callback_func_t);
-			cl_arg_wrapper->callback_func = callback_func;
+			(*task)->callback_func = va_arg(varg_list, _starpu_callback_func_t);
 		}
 		else if (arg_type==STARPU_CALLBACK_WITH_ARG)
 		{
-			void (*callback_func)(void *);
-			void *callback_arg;
-			callback_func = va_arg(varg_list, _starpu_callback_func_t);
-			callback_arg = va_arg(varg_list, void *);
-			cl_arg_wrapper->callback_func = callback_func;
-			cl_arg_wrapper->callback_arg = callback_arg;
+			(*task)->callback_func = va_arg(varg_list, _starpu_callback_func_t);
+			(*task)->callback_arg = va_arg(varg_list, void *);
 		}
 		else if (arg_type==STARPU_CALLBACK_ARG)
 		{
-			void *callback_arg = va_arg(varg_list, void *);
-			cl_arg_wrapper->callback_arg = callback_arg;
+			(*task)->callback_arg = va_arg(varg_list, void *);
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK)
 		{
-			void (*callback_func)(void *);
-			callback_func = va_arg(varg_list, _starpu_callback_func_t);
-			prologue_cl_arg_wrapper->callback_func = callback_func;
+			(*task)->prologue_callback_func = va_arg(varg_list, _starpu_callback_func_t);
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_ARG)
 		{
-			void *callback_arg = va_arg(varg_list, void *);
-			prologue_cl_arg_wrapper->callback_arg = callback_arg;
+			(*task)->prologue_callback_arg = va_arg(varg_list, void *);
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP)
 		{
-			void (*callback_func)(void *);
-			callback_func = va_arg(varg_list, _starpu_callback_func_t);
-			prologue_pop_cl_arg_wrapper->callback_func = callback_func;
+			(*task)->prologue_callback_pop_func = va_arg(varg_list, _starpu_callback_func_t);
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP_ARG)
 		{
-			void *callback_arg = va_arg(varg_list, void *);
-			prologue_pop_cl_arg_wrapper->callback_arg = callback_arg;
+			(*task)->prologue_callback_pop_arg = va_arg(varg_list, void *);
 		}
 		else if (arg_type==STARPU_PRIORITY)
 		{
@@ -493,18 +446,5 @@ void _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task **
 		arg_buffer_ = NULL;
 	}
 
-	/* The callback will free the argument stack and execute the
-	 * application's callback, if any. */
-	(*task)->callback_func = _starpu_task_insert_callback_wrapper;
-	(*task)->callback_arg = cl_arg_wrapper;
-	(*task)->callback_arg_free = 1;
-
-	(*task)->prologue_callback_func = _starpu_task_insert_callback_wrapper;
-	(*task)->prologue_callback_arg = prologue_cl_arg_wrapper;
-	(*task)->prologue_callback_arg_free = 1;
-
-	(*task)->prologue_callback_pop_func = _starpu_task_insert_callback_wrapper;
-	(*task)->prologue_callback_pop_arg = prologue_pop_cl_arg_wrapper;
-	(*task)->prologue_callback_pop_arg_free = 1;
 	_STARPU_TRACE_TASK_BUILD_END();
 }