瀏覽代碼

insert_task: do not call _starpu_codelet_pack_args() if not needed

Nathalie Furmento 12 年之前
父節點
當前提交
c6e8c55fe1
共有 2 個文件被更改,包括 12 次插入6 次删除
  1. 6 3
      mpi/src/starpu_mpi_insert_task.c
  2. 6 3
      src/util/starpu_insert_task.c

+ 6 - 3
mpi/src/starpu_mpi_insert_task.c

@@ -366,7 +366,7 @@ int starpu_mpi_insert_task(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 	int me, do_execute, xrank, nb_nodes;
 	size_t *size_on_nodes;
 	size_t arg_buffer_size = 0;
-	char *arg_buffer;
+	char *arg_buffer = NULL;
 	int dest=0, inconsistent_execute;
 	int current_data = 0;
 
@@ -381,8 +381,11 @@ int starpu_mpi_insert_task(MPI_Comm comm, struct starpu_codelet *codelet, ...)
 	va_start(varg_list, codelet);
 	arg_buffer_size = _starpu_insert_task_get_arg_size(varg_list);
 
-	va_start(varg_list, codelet);
-	_starpu_codelet_pack_args(arg_buffer_size, &arg_buffer, varg_list);
+	if (arg_buffer_size)
+	{
+		va_start(varg_list, codelet);
+		_starpu_codelet_pack_args(arg_buffer_size, &arg_buffer, varg_list);
+	}
 
 	/* Find out whether we are to execute the data because we own the data to be written to. */
 	inconsistent_execute = 0;

+ 6 - 3
src/util/starpu_insert_task.c

@@ -66,15 +66,18 @@ void starpu_codelet_unpack_args(void *_cl_arg, ...)
 int starpu_insert_task(struct starpu_codelet *cl, ...)
 {
 	va_list varg_list;
+	char *arg_buffer = NULL;
 
 	/* Compute the size */
 	size_t arg_buffer_size = 0;
 	va_start(varg_list, cl);
         arg_buffer_size = _starpu_insert_task_get_arg_size(varg_list);
 
-	va_start(varg_list, cl);
-	char *arg_buffer;
-	_starpu_codelet_pack_args(arg_buffer_size, &arg_buffer, varg_list);
+	if (arg_buffer_size)
+	{
+		va_start(varg_list, cl);
+		_starpu_codelet_pack_args(arg_buffer_size, &arg_buffer, varg_list);
+	}
 
 	va_start(varg_list, cl);
         struct starpu_task *task = starpu_task_create();