瀏覽代碼

The _starpu_search_existing_data_request now considers a
starpu_data_replicate_s instead of a (handle, memory_node).

Cédric Augonnet 14 年之前
父節點
當前提交
74b87470d3
共有 4 個文件被更改,包括 9 次插入7 次删除
  1. 2 2
      src/datawizard/coherency.c
  2. 3 3
      src/datawizard/data_request.c
  3. 3 1
      src/datawizard/data_request.h
  4. 1 1
      src/datawizard/write_back.c

+ 2 - 2
src/datawizard/coherency.c

@@ -173,7 +173,7 @@ int _starpu_fetch_data_on_node(starpu_data_handle handle, uint32_t requesting_no
 	starpu_data_request_t r;
 
 	/* is there already a pending request ? */
-	r = _starpu_search_existing_data_request(handle, requesting_node, mode);
+	r = _starpu_search_existing_data_request(&handle->per_node[requesting_node], mode);
 	/* at the exit of _starpu_search_existing_data_request the lock is taken is the request existed ! */
 
 	if (!r) {
@@ -202,7 +202,7 @@ int _starpu_fetch_data_on_node(starpu_data_handle handle, uint32_t requesting_no
 			if (!is_prefetch)
 				r_ram_to_dst->refcnt++;
 
-			r_src_to_ram = _starpu_search_existing_data_request(handle, 0, mode);
+			r_src_to_ram = _starpu_search_existing_data_request(&handle->per_node[0], mode);
 			if (!r_src_to_ram)
 			{
 				reuse_r_src_to_ram = 0;

+ 3 - 3
src/datawizard/data_request.c

@@ -109,9 +109,9 @@ starpu_data_request_t _starpu_create_data_request(starpu_data_handle handle, uin
 }
 
 /* handle->lock should be taken. r is returned locked */
-starpu_data_request_t _starpu_search_existing_data_request(starpu_data_handle handle, uint32_t dst_node, starpu_access_mode mode)
+starpu_data_request_t _starpu_search_existing_data_request(struct starpu_data_replicate_s *replicate, starpu_access_mode mode)
 {
-	starpu_data_request_t r = handle->per_node[dst_node].request;
+	starpu_data_request_t r = replicate->request;
 
 	if (r)
 	{
@@ -124,7 +124,7 @@ starpu_data_request_t _starpu_search_existing_data_request(starpu_data_handle ha
 			 * transfer yet, we have to increment the refcnt now
 			 * (so that the source remains valid) */
 			if (!(r->mode & STARPU_R))
-				handle->per_node[dst_node].refcnt++;
+				replicate->refcnt++;
 
 			r->mode |= STARPU_R;
 		}

+ 3 - 1
src/datawizard/data_request.h

@@ -23,6 +23,8 @@
 #include <common/list.h>
 #include <common/starpu_spinlock.h>
 
+struct starpu_data_replicate_s;
+
 struct callback_list {
 	void (*callback_func)(void *);
 	void *callback_arg;
@@ -91,7 +93,7 @@ void _starpu_handle_all_pending_node_data_requests(uint32_t src_node);
 int _starpu_check_that_no_data_request_exists(uint32_t node);
 
 starpu_data_request_t _starpu_create_data_request(starpu_data_handle handle, uint32_t src_node, uint32_t dst_node, uint32_t handling_node, starpu_access_mode mode, unsigned is_prefetch);
-starpu_data_request_t _starpu_search_existing_data_request(starpu_data_handle handle, uint32_t dst_node, starpu_access_mode mode);
+starpu_data_request_t _starpu_search_existing_data_request(struct starpu_data_replicate_s *replicate, starpu_access_mode mode);
 int _starpu_wait_data_request_completion(starpu_data_request_t r, unsigned may_alloc);
 
 void _starpu_data_request_append_callback(starpu_data_request_t r,

+ 1 - 1
src/datawizard/write_back.c

@@ -42,7 +42,7 @@ void _starpu_write_through_data(starpu_data_handle handle, uint32_t requesting_n
 
 				/* check that there is not already a similar
 				 * request that we should reuse */
-				r = _starpu_search_existing_data_request(handle, node, STARPU_R);
+				r = _starpu_search_existing_data_request(&handle->per_node[node], STARPU_R);
 				if (!r) {
 					/* there was no existing request so we create one now */
 					r = _starpu_create_data_request(handle, requesting_node,