浏览代码

Write data handle states to trace

Lucas Leandro Nesi 6 年之前
父节点
当前提交
e097aa8ce0
共有 3 个文件被更改,包括 28 次插入4 次删除
  1. 18 0
      src/common/fxt.h
  2. 6 3
      src/datawizard/coherency.c
  3. 4 1
      src/datawizard/memalloc.c

+ 18 - 0
src/common/fxt.h

@@ -230,6 +230,10 @@
 #define _STARPU_FUT_TASK_THROTTLE_START	0x5180
 #define _STARPU_FUT_TASK_THROTTLE_START	0x5180
 #define _STARPU_FUT_TASK_THROTTLE_END	0x5181
 #define _STARPU_FUT_TASK_THROTTLE_END	0x5181
 
 
+#define _STARPU_FUT_DATA_STATE_INVALID 0x5182
+#define _STARPU_FUT_DATA_STATE_OWNER      0x5183
+#define _STARPU_FUT_DATA_STATE_SHARED     0x5184
+
 extern unsigned long _starpu_job_cnt;
 extern unsigned long _starpu_job_cnt;
 
 
 static inline unsigned long _starpu_fxt_get_job_id(void)
 static inline unsigned long _starpu_fxt_get_job_id(void)
@@ -1120,6 +1124,17 @@ do {										\
 #define _STARPU_TRACE_DATA_INVALIDATE(handle, node)	do {(void) handle; (void) node;} while (0)
 #define _STARPU_TRACE_DATA_INVALIDATE(handle, node)	do {(void) handle; (void) node;} while (0)
 #endif
 #endif
 
 
+//Coherency Data Traces
+#define _STARPU_TRACE_DATA_STATE_INVALID(handle, node)      \
+       FUT_DO_PROBE2(_STARPU_FUT_DATA_STATE_INVALID, handle, node)
+
+#define _STARPU_TRACE_DATA_STATE_OWNER(handle, node)           \
+       FUT_DO_PROBE2(_STARPU_FUT_DATA_STATE_OWNER, handle, node)
+
+#define _STARPU_TRACE_DATA_STATE_SHARED(handle, node)          \
+       FUT_DO_PROBE2(_STARPU_FUT_DATA_STATE_SHARED, handle, node)
+
+
 #else // !STARPU_USE_FXT
 #else // !STARPU_USE_FXT
 
 
 /* Dummy macros in case FxT is disabled */
 /* Dummy macros in case FxT is disabled */
@@ -1241,6 +1256,9 @@ do {										\
 #define _STARPU_TRACE_DATA_INVALIDATE(handle, node)	do {(void)(handle); (void)(node);} while (0)
 #define _STARPU_TRACE_DATA_INVALIDATE(handle, node)	do {(void)(handle); (void)(node);} while (0)
 #define _STARPU_TRACE_WORKER_START_FETCH_INPUT(job, id)	do {(void)(job); (void)(id);} while(0)
 #define _STARPU_TRACE_WORKER_START_FETCH_INPUT(job, id)	do {(void)(job); (void)(id);} while(0)
 #define _STARPU_TRACE_WORKER_END_FETCH_INPUT(job, id)	do {(void)(job); (void)(id);} while(0)
 #define _STARPU_TRACE_WORKER_END_FETCH_INPUT(job, id)	do {(void)(job); (void)(id);} while(0)
+#define _STARPU_TRACE_DATA_STATE_INVALID(handle, node)	do {(void)(handle); (void)(node);} while(0)
+#define _STARPU_TRACE_DATA_STATE_OWNER(handle, node)	do {(void)(handle); (void)(node);} while(0)
+#define _STARPU_TRACE_DATA_STATE_SHARED(handle, node)	do {(void)(handle); (void)(node);} while(0)
 
 
 #endif // STARPU_USE_FXT
 #endif // STARPU_USE_FXT
 
 

+ 6 - 3
src/datawizard/coherency.c

@@ -192,10 +192,10 @@ void _starpu_update_data_state(starpu_data_handle_t handle,
 		unsigned node;
 		unsigned node;
 		for (node = 0; node < nnodes; node++)
 		for (node = 0; node < nnodes; node++)
 		{
 		{
-			_STARPU_TRACE_DATA_INVALIDATE(handle, node);
+                       _STARPU_TRACE_DATA_STATE_INVALID(handle, node);
 			handle->per_node[node].state = STARPU_INVALID;
 			handle->per_node[node].state = STARPU_INVALID;
 		}
 		}
-
+               _STARPU_TRACE_DATA_STATE_OWNER(handle, requesting_node);
 		requesting_replicate->state = STARPU_OWNER;
 		requesting_replicate->state = STARPU_OWNER;
 		if (handle->home_node != -1 && handle->per_node[handle->home_node].state == STARPU_INVALID)
 		if (handle->home_node != -1 && handle->per_node[handle->home_node].state == STARPU_INVALID)
 			/* Notify that this MC is now dirty */
 			/* Notify that this MC is now dirty */
@@ -211,9 +211,12 @@ void _starpu_update_data_state(starpu_data_handle_t handle,
 			for (node = 0; node < nnodes; node++)
 			for (node = 0; node < nnodes; node++)
 			{
 			{
 				struct _starpu_data_replicate *replicate = &handle->per_node[node];
 				struct _starpu_data_replicate *replicate = &handle->per_node[node];
-				if (replicate->state != STARPU_INVALID)
+                               if (replicate->state != STARPU_INVALID){
+                                       _STARPU_TRACE_DATA_STATE_SHARED(handle, node);
 					replicate->state = STARPU_SHARED;
 					replicate->state = STARPU_SHARED;
+                               }
 			}
 			}
+                       _STARPU_TRACE_DATA_STATE_SHARED(handle, requesting_node);
 			requesting_replicate->state = STARPU_SHARED;
 			requesting_replicate->state = STARPU_SHARED;
 		}
 		}
 	}
 	}

+ 4 - 1
src/datawizard/memalloc.c

@@ -286,7 +286,7 @@ static int STARPU_ATTRIBUTE_WARN_UNUSED_RESULT transfer_subtree_to_node(starpu_d
 			unsigned cnt = 0;
 			unsigned cnt = 0;
 
 
 			/* some other node may have the copy */
 			/* some other node may have the copy */
-			_STARPU_TRACE_DATA_INVALIDATE(handle, src_node);
+			_STARPU_TRACE_DATA_STATE_INVALID(handle, src_node);
 			src_replicate->state = STARPU_INVALID;
 			src_replicate->state = STARPU_INVALID;
 
 
 			/* count the number of copies */
 			/* count the number of copies */
@@ -301,7 +301,10 @@ static int STARPU_ATTRIBUTE_WARN_UNUSED_RESULT transfer_subtree_to_node(starpu_d
 			STARPU_ASSERT(cnt > 0);
 			STARPU_ASSERT(cnt > 0);
 
 
 			if (cnt == 1)
 			if (cnt == 1)
+			{
+				_STARPU_TRACE_DATA_STATE_OWNER(handle, last);
 				handle->per_node[last].state = STARPU_OWNER;
 				handle->per_node[last].state = STARPU_OWNER;
+			}
 
 
 		}
 		}
 		else
 		else