Forráskód Böngészése

Add STARPU_NAME to specify a task name from a starpu_task_insert call.

Samuel Thibault 9 éve
szülő
commit
f36c3c1cb1

+ 1 - 0
ChangeLog

@@ -155,6 +155,7 @@ Small features:
     another way than starpu_malloc.
   * Add STARPU_NOWHERE to create synchronization tasks with data.
   * Document how to switch between differents views of the same data.
+  * Add STARPU_NAME to specify a task name from a starpu_task_insert call.
 
 Changes:
   * Data interfaces (variable, vector, matrix and block) now define

+ 4 - 0
doc/doxygen/chapters/13offline_performance_tools.doxy

@@ -139,6 +139,10 @@ enough version of vite (>= r1430) and the
 \ref enable-paje-codelet-details "--enable-paje-codelet-details"
 StarPU configure option, the value of the tag will show up in the trace.
 
+It can also set the starpu_task::name field of the task (or use STARPU_NAME)
+when using starpu_task_insert()), to replace in traces the name of the codelet
+with an arbitrarily chosen name.
+
 Traces can also be inspected by hand by using the tool <c>fxt_print</c>, for instance:
 
 \verbatim

+ 5 - 0
doc/doxygen/chapters/api/insert_task.doxy

@@ -104,6 +104,11 @@ this macro is used when calling starpu_task_insert(), and must be followed by a
 this macro is used when calling starpu_task_insert(), and must be followed by a tag.
 It sets starpu_task::tag_id, but leaves starpu_task::use_tag as 0.
 
+\def STARPU_NAME
+\ingroup API_Insert_Task
+this macro is used when calling starpu_task_insert(), and must be followed by a char *.
+It sets starpu_task::name to it.
+
 \def STARPU_FLOPS
 \ingroup API_Insert_Task
 this macro is used when calling starpu_task_insert(), and must

+ 3 - 0
examples/cholesky/cholesky_implicit.c

@@ -67,6 +67,7 @@ static int _cholesky(starpu_data_handle_t dataA, unsigned nblocks)
 					 STARPU_CALLBACK, (k == 3*nblocks/4)?callback_turn_spmd_on:NULL,
 					 STARPU_FLOPS, (double) FLOPS_SPOTRF(nn),
 					 STARPU_TAG_ONLY, TAG11(k),
+					 STARPU_NAME, "cl11",
 					 0);
 		if (ret == -ENODEV) return 77;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_insert");
@@ -81,6 +82,7 @@ static int _cholesky(starpu_data_handle_t dataA, unsigned nblocks)
 						 STARPU_RW, sdatakj,
 						 STARPU_FLOPS, (double) FLOPS_STRSM(nn, nn),
 						 STARPU_TAG_ONLY, TAG21(k,j),
+						 STARPU_NAME, "cl21",
 						 0);
 			if (ret == -ENODEV) return 77;
 			STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_insert");
@@ -104,6 +106,7 @@ static int _cholesky(starpu_data_handle_t dataA, unsigned nblocks)
 								 cl22.modes[2], sdataij,
 								 STARPU_FLOPS, (double) FLOPS_SGEMM(nn, nn, nn),
 								 STARPU_TAG_ONLY, TAG22(k,i,j),
+								 STARPU_NAME,  ((i == k+1) && (j == k+1))?"cl22_p":"cl22",
 								 0);
 					if (ret == -ENODEV) return 77;
 					STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_insert");

+ 2 - 1
include/starpu_task_util.h

@@ -58,7 +58,8 @@ void starpu_create_sync_task(starpu_tag_t sync_tag, unsigned ndeps, starpu_tag_t
 #define STARPU_POSSIBLY_PARALLEL    (20<<STARPU_MODE_SHIFT)
 #define STARPU_WORKER_ORDER      (21<<STARPU_MODE_SHIFT)
 #define STARPU_NODE_SELECTION_POLICY (22<<STARPU_MODE_SHIFT)
-#define STARPU_SHIFTED_MODE_MAX (23<<STARPU_MODE_SHIFT)
+#define STARPU_NAME		 (23<<STARPU_MODE_SHIFT)
+#define STARPU_SHIFTED_MODE_MAX (24<<STARPU_MODE_SHIFT)
 
 struct starpu_task *starpu_task_build(struct starpu_codelet *cl, ...);
 int starpu_task_insert(struct starpu_codelet *cl, ...);

+ 4 - 0
mpi/src/starpu_mpi_task_insert.c

@@ -372,6 +372,10 @@ int _starpu_mpi_task_decode_v(struct starpu_codelet *codelet, int me, int nb_nod
 		{
 			(void)va_arg(varg_list_copy, starpu_tag_t);
 		}
+		else if (arg_type==STARPU_NAME)
+		{
+			(void)va_arg(varg_list_copy, const char *);
+		}
 		else if (arg_type==STARPU_POSSIBLY_PARALLEL)
 		{
 			(void)va_arg(varg_list_copy, unsigned);

+ 4 - 3
src/util/misc.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2012  Université de Bordeaux
+ * Copyright (C) 2012, 2015  Université de Bordeaux
  *
  * 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
@@ -39,9 +39,10 @@ const char *_starpu_job_get_model_name(struct _starpu_job *j)
 	struct starpu_task *task = j->task;
 	if (task)
 	{
-		ret = _starpu_codelet_get_model_name(task->cl);
-		if (!ret)
+		if (task->name)
 			ret = task->name;
+		else
+			ret = _starpu_codelet_get_model_name(task->cl);
 	}
 
 	return ret;

+ 9 - 0
src/util/starpu_task_insert_utils.c

@@ -152,6 +152,10 @@ int _starpu_codelet_pack_args(void **arg_buffer, size_t *arg_buffer_size, va_lis
 		{
 			(void)va_arg(varg_list, starpu_tag_t);
 		}
+		else if (arg_type==STARPU_NAME)
+		{
+			(void)va_arg(varg_list, const char *);
+		}
 		else if (arg_type==STARPU_NODE_SELECTION_POLICY)
 		{
 			(void)va_arg(varg_list, int);
@@ -447,6 +451,11 @@ void _starpu_task_insert_create(struct starpu_codelet *cl, struct starpu_task **
 			starpu_tag_t tag = va_arg(varg_list, starpu_tag_t);
 			(*task)->tag_id = tag;
 		}
+		else if (arg_type==STARPU_NAME)
+		{
+			const char *name = va_arg(varg_list, const char *);
+			(*task)->name = name;
+		}
 		else if (arg_type==STARPU_NODE_SELECTION_POLICY)
 		{
 			(void)va_arg(varg_list, int);