소스 검색

- Rename the starpu_local_data_state_t structure into starpu_data_replicate_s.
- The 'void *interface[MAXNODE]' field of the handle structure is now part of
the starpu_data_replicate_s structure.

Cédric Augonnet 14 년 전
부모
커밋
0b718bb11a
5개의 변경된 파일22개의 추가작업 그리고 19개의 파일을 삭제
  1. 6 6
      src/datawizard/coherency.h
  2. 7 4
      src/datawizard/filters.c
  3. 6 6
      src/datawizard/interfaces/data_interface.c
  4. 2 2
      src/datawizard/memalloc.c
  5. 1 1
      src/drivers/gordon/driver_gordon.c

+ 6 - 6
src/datawizard/coherency.h

@@ -37,7 +37,10 @@ typedef enum {
 } starpu_cache_state;
 
 /* this should contain the information relative to a given node */
-typedef struct starpu_local_data_state_t {
+struct starpu_data_replicate_s {
+	/* describe the actual data layout */
+	void *interface;
+
 	/* describes the state of the local data in term of coherency */
 	starpu_cache_state	state; 
 
@@ -60,7 +63,7 @@ typedef struct starpu_local_data_state_t {
 	 */
 	uint8_t requested;
 	struct starpu_data_request_s *request;
-} starpu_local_data_state;
+};
 
 struct starpu_data_requester_list_s;
 
@@ -94,10 +97,7 @@ struct starpu_data_state_t {
 	unsigned nchildren;
 
 	/* describe the state of the data in term of coherency */
-	starpu_local_data_state per_node[STARPU_MAXNODES];
-
-	/* describe the actual data layout */
-	void *interface[STARPU_MAXNODES];
+	struct starpu_data_replicate_s per_node[STARPU_MAXNODES];
 
 	struct starpu_data_interface_ops_t *ops;
 

+ 7 - 4
src/datawizard/filters.c

@@ -151,7 +151,10 @@ void starpu_data_partition(starpu_data_handle initial_handle, struct starpu_data
 			child->per_node[node].refcnt = 0;
 			
 			/* update the interface */
-			f->filter_func(initial_handle->interface[node], child->interface[node], f, i, nparts);
+			void *initial_interface = starpu_data_get_interface_on_node(initial_handle, node);
+			void *child_interface = starpu_data_get_interface_on_node(child, node);
+
+			f->filter_func(initial_interface, child_interface, f, i, nparts);
 		}
 
 		/* We compute the size and the footprint of the child once and
@@ -212,7 +215,7 @@ void starpu_data_unpartition(starpu_data_handle root_handle, uint32_t gathering_
 
 		for (child = 0; child < root_handle->nchildren; child++)
 		{
-			starpu_local_data_state *local = &root_handle->children[child].per_node[node];
+			struct starpu_data_replicate_s *local = &root_handle->children[child].per_node[node];
 
 			if (local->state == STARPU_INVALID) {
 				isvalid = 0; 
@@ -275,8 +278,8 @@ static void starpu_data_create_children(starpu_data_handle handle, unsigned nchi
 
 		for (node = 0; node < STARPU_MAXNODES; node++)
 		{
-			handle_child->interface[node] = calloc(1, interfacesize);
-			STARPU_ASSERT(handle->children->interface[node]);
+			handle_child->per_node[node].interface = calloc(1, interfacesize);
+			STARPU_ASSERT(handle_child->per_node[node].interface);
 		}
 	}
 	

+ 6 - 6
src/datawizard/interfaces/data_interface.c

@@ -106,8 +106,8 @@ static starpu_data_handle _starpu_data_handle_allocate(struct starpu_data_interf
 	unsigned node;
 	for (node = 0; node < STARPU_MAXNODES; node++)
 	{
-		handle->interface[node] = calloc(1, interfacesize);
-		STARPU_ASSERT(handle->interface[node]);
+		handle->per_node[node].interface = calloc(1, interfacesize);
+		STARPU_ASSERT(handle->per_node[node].interface);
 	}
 
 	return handle;
@@ -137,7 +137,7 @@ void _starpu_data_free_interfaces(starpu_data_handle handle)
 {
 	unsigned node;
 	for (node = 0; node < STARPU_MAXNODES; node++)
-		free(handle->interface[node]);
+		free(handle->per_node[node].interface);
 }
 
 struct unregister_callback_arg {
@@ -206,7 +206,7 @@ void starpu_data_unregister(starpu_data_handle handle)
 	unsigned node;
 	for (node = 0; node < STARPU_MAXNODES; node++)
 	{
-		starpu_local_data_state *local = &handle->per_node[node];
+		struct starpu_data_replicate_s *local = &handle->per_node[node];
 
 		if (local->allocated && local->automatically_allocated){
 			/* free the data copy in a lazy fashion */
@@ -232,7 +232,7 @@ void starpu_data_invalidate(starpu_data_handle handle)
 	unsigned node;
 	for (node = 0; node < STARPU_MAXNODES; node++)
 	{
-		starpu_local_data_state *local = &handle->per_node[node];
+		struct starpu_data_replicate_s *local = &handle->per_node[node];
 
 		if (local->allocated && local->automatically_allocated){
 			/* free the data copy in a lazy fashion */
@@ -254,5 +254,5 @@ unsigned starpu_get_handle_interface_id(starpu_data_handle handle)
 
 void *starpu_data_get_interface_on_node(starpu_data_handle handle, unsigned memory_node)
 {
-	return handle->interface[memory_node];
+	return handle->per_node[memory_node].interface;
 }

+ 2 - 2
src/datawizard/memalloc.c

@@ -247,7 +247,7 @@ static void reuse_mem_chunk(unsigned node, starpu_data_handle new_data, starpu_m
 	new_data->per_node[node].allocated = 1;
 	new_data->per_node[node].automatically_allocated = 1;
 
-	memcpy(&new_data->interface[node], mc->interface, old_data->ops->interface_size);
+	memcpy(&new_data->per_node[node].interface, mc->interface, old_data->ops->interface_size);
 
 	mc->data = new_data;
 	mc->data_was_deleted = 0;
@@ -378,7 +378,7 @@ starpu_mem_chunk_t _starpu_memchunk_cache_lookup(uint32_t node, starpu_data_hand
 		if (mc->footprint == footprint)
 		{
 			/* Is that a false hit ? (this is _very_ unlikely) */
-			if (_starpu_data_interface_compare(&handle->interface[node], handle->ops, mc->interface, mc->ops))
+			if (_starpu_data_interface_compare(&handle->per_node[node].interface, handle->ops, mc->interface, mc->ops))
 				continue;
 
 			/* Cache hit */

+ 1 - 1
src/drivers/gordon/driver_gordon.c

@@ -142,7 +142,7 @@ static void starpu_to_gordon_buffers(starpu_job_t j, struct gordon_ppu_job_s *go
 		gordon_job->nout = nout;
 
 		STARPU_ASSERT(handle->ops->convert_to_gordon);
-		handle->ops->convert_to_gordon(&handle->interface[memory_node],
+		handle->ops->convert_to_gordon(&handle->per_node[memory_node].interface,
 				&gordon_job->buffers[gordon_buffer],
 				&gordon_job->ss[gordon_buffer]);
 	}