Samuel Thibault пре 8 година
родитељ
комит
f12a1fe618
4 измењених фајлова са 37 додато и 4 уклоњено
  1. 6 0
      src/common/fxt.h
  2. 4 0
      src/datawizard/memory_manager.c
  3. 21 0
      src/debug/traces/starpu_fxt.c
  4. 6 4
      src/debug/traces/starpu_paje.c

+ 6 - 0
src/common/fxt.h

@@ -93,6 +93,8 @@
 #define	_STARPU_FUT_START_ALLOC_REUSE	0x5129
 #define	_STARPU_FUT_END_ALLOC_REUSE	0x5130
 
+#define	_STARPU_FUT_USED_MEM	0x512a
+
 #define	_STARPU_FUT_START_MEMRECLAIM	0x5131
 #define	_STARPU_FUT_END_MEMRECLAIM	0x5132
 
@@ -689,6 +691,9 @@ do {										\
 #define _STARPU_TRACE_END_WRITEBACK(memnode)		\
 	FUT_DO_PROBE2(_STARPU_FUT_END_WRITEBACK, memnode, _starpu_gettid());
 
+#define _STARPU_TRACE_USED_MEM(memnode,used)		\
+	FUT_DO_PROBE3(_STARPU_FUT_USED_MEM, memnode, used, _starpu_gettid());
+	
 #define _STARPU_TRACE_START_MEMRECLAIM(memnode,is_prefetch)		\
 	FUT_DO_PROBE3(_STARPU_FUT_START_MEMRECLAIM, memnode, is_prefetch, _starpu_gettid());
 	
@@ -995,6 +1000,7 @@ do {										\
 #define _STARPU_TRACE_END_FREE(memnode)		do {} while(0)
 #define _STARPU_TRACE_START_WRITEBACK(memnode)	do {} while(0)
 #define _STARPU_TRACE_END_WRITEBACK(memnode)		do {} while(0)
+#define _STARPU_TRACE_USED_MEM(memnode,used)		do {} while (0)
 #define _STARPU_TRACE_START_MEMRECLAIM(memnode,is_prefetch)	do {} while(0)
 #define _STARPU_TRACE_END_MEMRECLAIM(memnode,is_prefetch)	do {} while(0)
 #define _STARPU_TRACE_START_WRITEBACK_ASYNC(memnode)	do {} while(0)

+ 4 - 0
src/datawizard/memory_manager.c

@@ -17,6 +17,7 @@
 #include <starpu.h>
 #include <common/utils.h>
 #include <common/thread.h>
+#include <common/fxt.h>
 #include <datawizard/memory_manager.h>
 #include <starpu_stdlib.h>
 
@@ -90,6 +91,7 @@ int starpu_memory_allocate(unsigned node, size_t size, int flags)
 
 		/* And take it */
 		used_size[node] += size;
+		_STARPU_TRACE_USED_MEM(node, used_size[node]);
 		ret = 0;
 	}
 	else if (flags & STARPU_MEMORY_OVERFLOW
@@ -97,6 +99,7 @@ int starpu_memory_allocate(unsigned node, size_t size, int flags)
 			|| used_size[node] + size <= global_size[node])
 	{
 		used_size[node] += size;
+		_STARPU_TRACE_USED_MEM(node, used_size[node]);
 		ret = 0;
 	}
 	else
@@ -112,6 +115,7 @@ void starpu_memory_deallocate(unsigned node, size_t size)
 	STARPU_PTHREAD_MUTEX_LOCK(&lock_nodes[node]);
 
 	used_size[node] -= size;
+	_STARPU_TRACE_USED_MEM(node, used_size[node]);
 
 	/* If there's now room for waiters, wake them */
 	if (waiting_size[node] &&

+ 21 - 0
src/debug/traces/starpu_fxt.c

@@ -837,9 +837,11 @@ static void handle_new_mem_node(struct fxt_ev_64 *ev, struct starpu_fxt_options
 		if (!options->no_bus)
 		{
 #ifdef STARPU_HAVE_POTI
+			poti_SetVariable(get_event_time_stamp(ev, options), new_memmanager_container_alias, "use", get_event_time_stamp(ev, options));
 			poti_SetVariable(get_event_time_stamp(ev, options), new_memmanager_container_alias, "bwi", get_event_time_stamp(ev, options));
 			poti_SetVariable(get_event_time_stamp(ev, options), new_memmanager_container_alias, "bwo", get_event_time_stamp(ev, options));
 #else
+			fprintf(out_paje_file, "13	%.9f	%smm%"PRIu64"	use	0.0\n", get_event_time_stamp(ev, options), prefix, ev->param[0]);
 			fprintf(out_paje_file, "13	%.9f	%smm%"PRIu64"	bwi	0.0\n", get_event_time_stamp(ev, options), prefix, ev->param[0]);
 			fprintf(out_paje_file, "13	%.9f	%smm%"PRIu64"	bwo	0.0\n", get_event_time_stamp(ev, options), prefix, ev->param[0]);
 #endif
@@ -1832,6 +1834,23 @@ static void handle_memnode_event(struct fxt_ev_64 *ev, struct starpu_fxt_options
 		memnode_set_state(get_event_time_stamp(ev, options), options->file_prefix, memnode, eventstr);
 }
 
+static void handle_used_mem(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	unsigned memnode = ev->param[0];
+
+	if (out_paje_file)
+	{
+#ifdef STARPU_HAVE_POTI
+		char memnode_container[STARPU_POTI_STR_LEN];
+		memmanager_container_alias(memnode_container, STARPU_POTI_STR_LEN, options->file_prefix, memnode);
+		poti_SetVariable(get_event_time_stamp(ev, options), memnode_container, "use", (double)ev->param[1] / (1<<20));
+#else
+		fprintf(out_paje_file, "13	%.9f	%smm%u	use	%f\n",
+			get_event_time_stamp(ev, options), options->file_prefix, memnode, (double)ev->param[1] / (1<<20));
+#endif
+	}
+}
+
 static void handle_task_submit_event(struct fxt_ev_64 *ev, struct starpu_fxt_options *options, unsigned long tid, const char *eventstr)
 {
 	int workerid = find_worker_id(tid);
@@ -2829,6 +2848,8 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
 					handle_memnode_event(&ev, options, "No");
 				}
 				break;
+			case _STARPU_FUT_USED_MEM:
+				handle_used_mem(&ev, options);
 
 			case _STARPU_FUT_USER_EVENT:
 				handle_user_event(&ev, options);

+ 6 - 4
src/debug/traces/starpu_paje.c

@@ -160,8 +160,9 @@ void _starpu_fxt_write_paje_header(FILE *file STARPU_ATTRIBUTE_UNUSED)
 
 	/* Types for the memory node */
 	poti_DefineEventType("invalidate", "Mm", "data invalidation");
-	poti_DefineVariableType("bwi", "Mm", "Bandwidth In", "0 0 0");
-	poti_DefineVariableType("bwo", "Mm", "Bandwidth Out", "0 0 0");
+	poti_DefineVariableType("use", "Mm", "Used (MB)", "0 0 0");
+	poti_DefineVariableType("bwi", "Mm", "Bandwidth In (MB/s)", "0 0 0");
+	poti_DefineVariableType("bwo", "Mm", "Bandwidth Out (MB/s)", "0 0 0");
 	poti_DefineStateType("MS", "Mm", "Memory Node State");
 	poti_DefineEntityValue("A", "MS", "Allocating", ".4 .1 .0");
 	poti_DefineEntityValue("Ar", "MS", "AllocatingReuse", ".1 .1 .8");
@@ -301,8 +302,9 @@ void _starpu_fxt_write_paje_header(FILE *file STARPU_ATTRIBUTE_UNUSED)
 3       MS       Mm       \"Memory Node State\"                        \n\
 4       nsubmitted    Sc       \"Number of Submitted Uncompleted Tasks\"                        \n\
 4       nready    Sc       \"Number of Ready Tasks\"                        \n\
-4       bwi     Mm       \"Bandwidth In\"                        \n\
-4       bwo     Mm       \"Bandwidth Out\"                        \n\
+4       use     Mm       \"Used (MB)\"                        \n\
+4       bwi     Mm       \"Bandwidth In (MB/s)\"                        \n\
+4       bwo     Mm       \"Bandwidth Out (MB/s)\"                        \n\
 4       gf      T       \"GFlops\"                        \n\
 6       I       S       Idle         \".9 .1 .0\"		\n\
 6       In       S      Initializing       \"0.0 .7 1.0\"            \n\