Pārlūkot izejas kodu

Add function names in Temanejo

Samuel Thibault 12 gadi atpakaļ
vecāks
revīzija
dee5e3115b
5 mainītis faili ar 52 papildinājumiem un 6 dzēšanām
  1. 46 1
      src/core/debug.c
  2. 3 0
      src/core/debug.h
  3. 1 2
      src/core/jobs.c
  4. 1 1
      src/core/sched_policy.c
  5. 1 2
      src/core/task.c

+ 46 - 1
src/core/debug.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2009-2011  Université de Bordeaux 1
+ * Copyright (C) 2009-2012  Université de Bordeaux 1
  * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -67,3 +67,48 @@ void _starpu_print_to_logfile(const char *format STARPU_ATTRIBUTE_UNUSED, ...)
 	va_end( args );
 #endif
 }
+
+/* Record codelet to give ayudame nice function ids starting from 0. */
+#ifdef HAVE_AYUDAME_H
+struct ayudame_codelet {
+	char *name;
+	struct starpu_codelet *cl;
+} *codelets;
+static unsigned ncodelets, ncodelets_alloc;
+static _starpu_pthread_mutex_t ayudame_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+int64_t _starpu_ayudame_get_func_id(struct starpu_codelet *cl)
+{
+	unsigned i;
+	const char *name;
+	if (!cl)
+		return -1;
+	name = _starpu_codelet_get_model_name(cl);
+	_STARPU_PTHREAD_MUTEX_LOCK(&ayudame_mutex);
+	for (i=0; i < ncodelets; i++) {
+		if (codelets[i].cl == cl &&
+			((!name && !codelets[i].name) ||
+				((name && codelets[i].name) && !strcmp(codelets[i].name, name)))) {
+			_STARPU_PTHREAD_MUTEX_UNLOCK(&ayudame_mutex);
+			return i;
+		}
+	}
+	if (ncodelets == ncodelets_alloc) {
+		if (!ncodelets_alloc)
+			ncodelets_alloc = 16;
+		else
+			ncodelets_alloc *= 2;
+		codelets = realloc(codelets, ncodelets_alloc * sizeof(*codelets));
+	}
+	codelets[ncodelets].cl = cl;
+	if (name)
+		/* codelet might be freed by user */
+		codelets[ncodelets].name = strdup(name);
+	else
+		codelets[ncodelets].name = NULL;
+	i = ncodelets++;
+	if (name)
+		AYU_event(AYU_REGISTERFUNCTION, i, (void*) name);
+	_STARPU_PTHREAD_MUTEX_UNLOCK(&ayudame_mutex);
+	return i;
+}
+#endif

+ 3 - 0
src/core/debug.h

@@ -41,4 +41,7 @@ void _starpu_print_to_logfile(const char *format, ...);
 /* Tell gdb whether FXT is compiled in or not */
 extern int _starpu_use_fxt;
 
+/* Get an Ayudame id for CL */
+int64_t _starpu_ayudame_get_func_id(struct starpu_codelet *cl);
+
 #endif // __DEBUG_H__

+ 1 - 2
src/core/jobs.c

@@ -234,8 +234,7 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 
 #ifdef HAVE_AYUDAME_H
 		if (AYU_event) {
-#warning TODO: function id
-			int64_t AYU_data[2] = {0, task->priority > STARPU_MIN_PRIO};
+			int64_t AYU_data[2] = {j->exclude_from_dag?-1:_starpu_ayudame_get_func_id(task->cl), task->priority > STARPU_MIN_PRIO};
 			AYU_event(AYU_ADDTASK, j->job_id, AYU_data);
 		}
 #endif

+ 1 - 1
src/core/sched_policy.c

@@ -264,7 +264,7 @@ int _starpu_push_task(struct _starpu_job *j)
 	task->status = STARPU_TASK_READY;
 #ifdef HAVE_AYUDAME_H
 	if (AYU_event) {
-		int id = 0;
+		int id = -1;
 		AYU_event(AYU_ADDTASKTOQUEUE, j->job_id, &id);
 	}
 #endif

+ 1 - 2
src/core/task.c

@@ -375,8 +375,7 @@ int starpu_task_submit(struct starpu_task *task)
 
 #ifdef HAVE_AYUDAME_H
 	if (AYU_event) {
-#warning TODO: function id
-		int64_t AYU_data[2] = {0, task->priority > STARPU_MIN_PRIO};
+		int64_t AYU_data[2] = {j->exclude_from_dag?-1:_starpu_ayudame_get_func_id(task->cl), task->priority > STARPU_MIN_PRIO};
 		AYU_event(AYU_ADDTASK, j->job_id, AYU_data);
 	}
 #endif