瀏覽代碼

Avoid recording useless data state changes

Samuel Thibault 4 年之前
父節點
當前提交
18ff0ebdc3
共有 2 個文件被更改,包括 15 次插入9 次删除
  1. 11 7
      src/datawizard/coherency.c
  2. 4 2
      src/datawizard/memalloc.c

+ 11 - 7
src/datawizard/coherency.c

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

+ 4 - 2
src/datawizard/memalloc.c

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