瀏覽代碼

Update starpu_task_insert() and alike to set starpu_task::callback_arg_free, starpu_task::prologue_callback_arg_free and starpu_task::prologue_callback_pop_arg_free to 1 when corresponding parameters (STARPU_CALLBACK_ARG, STARPU_PROLOGUE_CALLBACK_ARG, and STARPU_PROLOGUE_CALLBACK_POP_ARG) are used

Nathalie Furmento 5 年之前
父節點
當前提交
de9bdb8249

+ 14 - 4
ChangeLog

@@ -25,11 +25,21 @@ StarPU 1.3.3 (git revision xxx)
 ==============================================
 ==============================================
 
 
 Small features:
 Small features:
-  * New starpu_task_insert() parameter STARPU_TASK_WORKERIDS allowing
-    to set the fields starpu_task::workerids_len and
+  * New starpu_task_insert() and alike parameter STARPU_TASK_WORKERIDS
+    allowing to set the fields starpu_task::workerids_len and
     starpu_task::workerids
     starpu_task::workerids
-  * New starpu_task_insert() parameters STARPU_SEQUENTIAL_CONSISTENCY,
-    STARPU_TASK_NO_SUBMITORDER and STARPU_TASK_PROFILING_INFO
+  * New starpu_task_insert() and alike parameters
+    STARPU_SEQUENTIAL_CONSISTENCY, STARPU_TASK_NO_SUBMITORDER and
+    STARPU_TASK_PROFILING_INFO
+
+Small changes:
+  * Update starpu_task_insert() and alike to set
+    starpu_task::callback_arg_free,
+    starpu_task::prologue_callback_arg_free and
+    starpu_task::prologue_callback_pop_arg_free to 1 when
+    corresponding parameters (STARPU_CALLBACK_ARG,
+    STARPU_PROLOGUE_CALLBACK_ARG, and
+    STARPU_PROLOGUE_CALLBACK_POP_ARG) are used
 
 
 StarPU 1.3.2 (git revision af22a20fc00a37addf3cc6506305f89feed940b0)
 StarPU 1.3.2 (git revision af22a20fc00a37addf3cc6506305f89feed940b0)
 ==============================================
 ==============================================

+ 9 - 3
include/starpu_task.h

@@ -787,6 +787,7 @@ struct starpu_task
 	   ::STARPU_CL_ARGS.
 	   ::STARPU_CL_ARGS.
 	*/
 	*/
 	unsigned cl_arg_free:1;
 	unsigned cl_arg_free:1;
+
 	/**
 	/**
 	   Optional field. In case starpu_task::callback_arg was
 	   Optional field. In case starpu_task::callback_arg was
 	   allocated by the application through <c>malloc()</c>,
 	   allocated by the application through <c>malloc()</c>,
@@ -794,9 +795,11 @@ struct starpu_task
 	   automatically call <c>free(callback_arg)</c> when
 	   automatically call <c>free(callback_arg)</c> when
 	   destroying the task.
 	   destroying the task.
 
 
-	   TODO: does not have a starpu_task_insert() equivalent
+	   With starpu_task_insert() and alike this is set to 1 when using
+	   ::STARPU_CALLBACK_ARG or ::STARPU_CALLBACK_WITH_ARG
 	*/
 	*/
 	unsigned callback_arg_free:1;
 	unsigned callback_arg_free:1;
+
 	/**
 	/**
 	   Optional field. In case starpu_task::prologue_callback_arg
 	   Optional field. In case starpu_task::prologue_callback_arg
 	   was allocated by the application through <c>malloc()</c>,
 	   was allocated by the application through <c>malloc()</c>,
@@ -804,9 +807,11 @@ struct starpu_task
 	   StarPU automatically call
 	   StarPU automatically call
 	   <c>free(prologue_callback_arg)</c> when destroying the task.
 	   <c>free(prologue_callback_arg)</c> when destroying the task.
 
 
-	   TODO: does not have a starpu_task_insert() equivalent
+	   With starpu_task_insert() and alike this is set to 1 when using
+	   ::STARPU_PROLOGUE_CALLBACK_ARG.
 	*/
 	*/
 	unsigned prologue_callback_arg_free:1;
 	unsigned prologue_callback_arg_free:1;
+
 	/**
 	/**
 	   Optional field. In case starpu_task::prologue_callback_pop_arg
 	   Optional field. In case starpu_task::prologue_callback_pop_arg
 	   was allocated by the application through <c>malloc()</c>,
 	   was allocated by the application through <c>malloc()</c>,
@@ -815,7 +820,8 @@ struct starpu_task
 	   <c>free(prologue_callback_pop_arg)</c> when destroying the
 	   <c>free(prologue_callback_pop_arg)</c> when destroying the
 	   task.
 	   task.
 
 
-	   TODO: does not have a starpu_task_insert() equivalent
+	   With starpu_task_insert() and alike this is set to 1 when using
+	   ::STARPU_PROLOGUE_CALLBACK_POP_ARG.
 	*/
 	*/
 	unsigned prologue_callback_pop_arg_free:1;
 	unsigned prologue_callback_pop_arg_free:1;
 
 

+ 3 - 0
mpi/src/starpu_mpi_task_insert.c

@@ -569,6 +569,9 @@ int _starpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, stru
 
 
 		*task = starpu_task_create();
 		*task = starpu_task_create();
 		(*task)->cl_arg_free = 1;
 		(*task)->cl_arg_free = 1;
+		(*task)->callback_arg_free = 1;
+		(*task)->prologue_callback_arg_free = 1;
+		(*task)->prologue_callback_pop_arg_free = 1;
 
 
 		va_copy(varg_list_copy, varg_list);
 		va_copy(varg_list_copy, varg_list);
 		_starpu_task_insert_create(codelet, *task, varg_list_copy);
 		_starpu_task_insert_create(codelet, *task, varg_list_copy);

+ 3 - 0
mpi/src/starpu_mpi_task_insert_fortran.c

@@ -422,6 +422,9 @@ int _fstarpu_mpi_task_build_v(MPI_Comm comm, struct starpu_codelet *codelet, str
 
 
 		*task = starpu_task_create();
 		*task = starpu_task_create();
 		(*task)->cl_arg_free = 1;
 		(*task)->cl_arg_free = 1;
+		(*task)->callback_arg_free = 1;
+		(*task)->prologue_callback_arg_free = 1;
+		(*task)->prologue_callback_pop_arg_free = 1;
 
 
 		_fstarpu_task_insert_create(codelet, *task, arglist);
 		_fstarpu_task_insert_create(codelet, *task, arglist);
 		return 0;
 		return 0;

+ 8 - 0
src/util/starpu_task_insert_utils.c

@@ -431,10 +431,12 @@ int _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *ta
 		{
 		{
 			task->callback_func = va_arg(varg_list, _starpu_callback_func_t);
 			task->callback_func = va_arg(varg_list, _starpu_callback_func_t);
 			task->callback_arg = va_arg(varg_list, void *);
 			task->callback_arg = va_arg(varg_list, void *);
+			task->callback_arg_free = 1;
 		}
 		}
 		else if (arg_type==STARPU_CALLBACK_ARG)
 		else if (arg_type==STARPU_CALLBACK_ARG)
 		{
 		{
 			task->callback_arg = va_arg(varg_list, void *);
 			task->callback_arg = va_arg(varg_list, void *);
+			task->callback_arg_free = 1;
 		}
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK)
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK)
 		{
 		{
@@ -443,6 +445,7 @@ int _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *ta
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_ARG)
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_ARG)
 		{
 		{
 			task->prologue_callback_arg = va_arg(varg_list, void *);
 			task->prologue_callback_arg = va_arg(varg_list, void *);
+			task->prologue_callback_arg_free = 1;
 		}
 		}
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP)
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP)
 		{
 		{
@@ -451,6 +454,7 @@ int _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *ta
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP_ARG)
 		else if (arg_type==STARPU_PROLOGUE_CALLBACK_POP_ARG)
 		{
 		{
 			task->prologue_callback_pop_arg = va_arg(varg_list, void *);
 			task->prologue_callback_pop_arg = va_arg(varg_list, void *);
+			task->prologue_callback_pop_arg_free = 1;
 		}
 		}
 		else if (arg_type==STARPU_PRIORITY)
 		else if (arg_type==STARPU_PRIORITY)
 		{
 		{
@@ -702,11 +706,13 @@ int _fstarpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *t
 			task->callback_func = (_starpu_callback_func_t)arglist[arg_i];
 			task->callback_func = (_starpu_callback_func_t)arglist[arg_i];
 			arg_i++;
 			arg_i++;
 			task->callback_arg = arglist[arg_i];
 			task->callback_arg = arglist[arg_i];
+			task->callback_arg_free = 1;
 		}
 		}
 		else if (arg_type == STARPU_CALLBACK_ARG)
 		else if (arg_type == STARPU_CALLBACK_ARG)
 		{
 		{
 			arg_i++;
 			arg_i++;
 			task->callback_arg = arglist[arg_i];
 			task->callback_arg = arglist[arg_i];
+			task->callback_arg_free = 1;
 		}
 		}
 		else if (arg_type == STARPU_PROLOGUE_CALLBACK)
 		else if (arg_type == STARPU_PROLOGUE_CALLBACK)
 		{
 		{
@@ -717,6 +723,7 @@ int _fstarpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *t
 		{
 		{
 			arg_i++;
 			arg_i++;
 			task->prologue_callback_arg = arglist[arg_i];
 			task->prologue_callback_arg = arglist[arg_i];
+			task->prologue_callback_arg_free = 1;
 		}
 		}
 		else if (arg_type == STARPU_PROLOGUE_CALLBACK_POP)
 		else if (arg_type == STARPU_PROLOGUE_CALLBACK_POP)
 		{
 		{
@@ -727,6 +734,7 @@ int _fstarpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task *t
 		{
 		{
 			arg_i++;
 			arg_i++;
 			task->prologue_callback_pop_arg = arglist[arg_i];
 			task->prologue_callback_pop_arg = arglist[arg_i];
+			task->prologue_callback_pop_arg_free = 1;
 		}
 		}
 		else if (arg_type == STARPU_PRIORITY)
 		else if (arg_type == STARPU_PRIORITY)
 		{
 		{