Browse Source

Clean up other filters.

Cédric Augonnet 15 years ago
parent
commit
e5d825e471
2 changed files with 41 additions and 20 deletions
  1. 25 10
      src/datawizard/interfaces/blas_filters.c
  2. 16 10
      src/datawizard/interfaces/csr_filters.c

+ 25 - 10
src/datawizard/interfaces/blas_filters.c

@@ -26,7 +26,9 @@ unsigned starpu_block_filter_func(starpu_filter *f, data_state *root_data)
 	unsigned nchunks;
 	unsigned nchunks;
 	uint32_t arg = f->filter_arg;
 	uint32_t arg = f->filter_arg;
 
 
-	starpu_blas_interface_t *blas_root = &root_data->interface[0].blas;
+	starpu_blas_interface_t *blas_root =
+		starpu_data_get_interface_on_node(root_data, 0);
+
 	uint32_t nx = blas_root->nx;
 	uint32_t nx = blas_root->nx;
 	uint32_t ny = blas_root->ny;
 	uint32_t ny = blas_root->ny;
 	size_t elemsize = blas_root->elemsize;
 	size_t elemsize = blas_root->elemsize;
@@ -35,8 +37,7 @@ unsigned starpu_block_filter_func(starpu_filter *f, data_state *root_data)
 	nchunks = STARPU_MIN(nx, arg);
 	nchunks = STARPU_MIN(nx, arg);
 
 
 	/* first allocate the children data_state */
 	/* first allocate the children data_state */
-	root_data->children = calloc(nchunks, sizeof(data_state));
-	STARPU_ASSERT(root_data->children);
+	starpu_data_create_children(root_data, nchunks);
 
 
 	/* actually create all the chunks */
 	/* actually create all the chunks */
 	unsigned chunk;
 	unsigned chunk;
@@ -48,18 +49,25 @@ unsigned starpu_block_filter_func(starpu_filter *f, data_state *root_data)
 		uint32_t child_nx = 
 		uint32_t child_nx = 
 			STARPU_MIN(chunk_size, (size_t)nx - (size_t)chunk*chunk_size);
 			STARPU_MIN(chunk_size, (size_t)nx - (size_t)chunk*chunk_size);
 
 
+		starpu_data_handle chunk_handle =
+			starpu_data_get_child(root_data, chunk);
+
 		unsigned node;
 		unsigned node;
 		for (node = 0; node < MAXNODES; node++)
 		for (node = 0; node < MAXNODES; node++)
 		{
 		{
-			starpu_blas_interface_t *local = &root_data->children[chunk].interface[node].blas;
+			starpu_blas_interface_t *local = 
+				starpu_data_get_interface_on_node(chunk_handle, node);
 
 
 			local->nx = child_nx;
 			local->nx = child_nx;
 			local->ny = ny;
 			local->ny = ny;
 			local->elemsize = elemsize;
 			local->elemsize = elemsize;
 
 
 			if (root_data->per_node[node].allocated) {
 			if (root_data->per_node[node].allocated) {
-				local->ptr = root_data->interface[node].blas.ptr + offset;
-				local->ld = root_data->interface[node].blas.ld;
+				starpu_blas_interface_t *local_root =
+					starpu_data_get_interface_on_node(root_data, node);
+
+				local->ptr = local_root->ptr + offset;
+				local->ld = local_root->ld;
 			}
 			}
 		}
 		}
 	}
 	}
@@ -92,20 +100,27 @@ unsigned starpu_vertical_block_filter_func(starpu_filter *f, data_state *root_da
 		size_t child_ny = 
 		size_t child_ny = 
 			STARPU_MIN(chunk_size, (size_t)ny - (size_t)chunk*chunk_size);
 			STARPU_MIN(chunk_size, (size_t)ny - (size_t)chunk*chunk_size);
 
 
+		starpu_data_handle chunk_handle =
+			starpu_data_get_child(root_data, chunk);
+
 		unsigned node;
 		unsigned node;
 		for (node = 0; node < MAXNODES; node++)
 		for (node = 0; node < MAXNODES; node++)
 		{
 		{
-			starpu_blas_interface_t *local = &root_data->children[chunk].interface[node].blas;
+			starpu_blas_interface_t *local =
+				starpu_data_get_interface_on_node(chunk_handle, node);
 
 
 			local->nx = nx;
 			local->nx = nx;
 			local->ny = child_ny;
 			local->ny = child_ny;
 			local->elemsize = elemsize;
 			local->elemsize = elemsize;
 
 
 			if (root_data->per_node[node].allocated) {
 			if (root_data->per_node[node].allocated) {
+				starpu_blas_interface_t *local_root =
+					starpu_data_get_interface_on_node(root_data, node);
+
 				size_t offset = 
 				size_t offset = 
-					(size_t)chunk*chunk_size*root_data->interface[node].blas.ld*elemsize;
-				local->ptr = root_data->interface[node].blas.ptr + offset;
-				local->ld = root_data->interface[node].blas.ld;
+					(size_t)chunk*chunk_size*local_root->ld*elemsize;
+				local->ptr = local_root->ptr + offset;
+				local->ld = local_root->ld;
 			}
 			}
 		}
 		}
 	}
 	}

+ 16 - 10
src/datawizard/interfaces/csr_filters.c

@@ -23,23 +23,25 @@ unsigned starpu_vertical_block_filter_func_csr(starpu_filter *f, data_state *roo
 	unsigned nchunks;
 	unsigned nchunks;
 	uint32_t arg = f->filter_arg;
 	uint32_t arg = f->filter_arg;
 
 
-	uint32_t nrow = root_data->interface[0].csr.nrow;
-	size_t elemsize = root_data->interface[0].csr.elemsize;
-	uint32_t firstentry = root_data->interface[0].csr.firstentry;
+	starpu_csr_interface_t *root_interface =
+		starpu_data_get_interface_on_node(root_data, 0);
+
+	uint32_t nrow = root_interface->nrow;
+	size_t elemsize = root_interface->elemsize;
+	uint32_t firstentry = root_interface->firstentry;
 
 
 	/* we will have arg chunks */
 	/* we will have arg chunks */
 	nchunks = STARPU_MIN(nrow, arg);
 	nchunks = STARPU_MIN(nrow, arg);
 	
 	
 	/* first allocate the children data_state */
 	/* first allocate the children data_state */
-	root_data->children = calloc(nchunks, sizeof(data_state));
-	STARPU_ASSERT(root_data->children);
+	starpu_data_create_children(root_data, nchunks);
 
 
 	/* actually create all the chunks */
 	/* actually create all the chunks */
 	uint32_t chunk_size = (nrow + nchunks - 1)/nchunks;
 	uint32_t chunk_size = (nrow + nchunks - 1)/nchunks;
 
 
 	/* XXX */
 	/* XXX */
 	STARPU_ASSERT(root_data->per_node[0].allocated);
 	STARPU_ASSERT(root_data->per_node[0].allocated);
-	uint32_t *rowptr = root_data->interface[0].csr.rowptr;
+	uint32_t *rowptr = root_interface->rowptr;
 
 
 	unsigned chunk;
 	unsigned chunk;
 	for (chunk = 0; chunk < nchunks; chunk++)
 	for (chunk = 0; chunk < nchunks; chunk++)
@@ -52,10 +54,14 @@ unsigned starpu_vertical_block_filter_func_csr(starpu_filter *f, data_state *roo
 
 
 		uint32_t local_nnz = rowptr[first_index + child_nrow] - rowptr[first_index]; 
 		uint32_t local_nnz = rowptr[first_index + child_nrow] - rowptr[first_index]; 
 
 
+		starpu_data_handle chunk_handle =
+			starpu_data_get_child(root_data, chunk);
+
 		unsigned node;
 		unsigned node;
 		for (node = 0; node < MAXNODES; node++)
 		for (node = 0; node < MAXNODES; node++)
 		{
 		{
-			starpu_csr_interface_t *local = &root_data->children[chunk].interface[node].csr;
+			starpu_csr_interface_t *local = 
+				starpu_data_get_interface_on_node(chunk_handle, node);
 
 
 			local->nnz = local_nnz;
 			local->nnz = local_nnz;
 			local->nrow = child_nrow;
 			local->nrow = child_nrow;
@@ -63,9 +69,9 @@ unsigned starpu_vertical_block_filter_func_csr(starpu_filter *f, data_state *roo
 			local->elemsize = elemsize;
 			local->elemsize = elemsize;
 
 
 			if (root_data->per_node[node].allocated) {
 			if (root_data->per_node[node].allocated) {
-				local->rowptr = &root_data->interface[node].csr.rowptr[first_index];
-				local->colind = &root_data->interface[node].csr.colind[local_firstentry];
-				float *nzval = (float *)(root_data->interface[node].csr.nzval);
+				local->rowptr = &local->rowptr[first_index];
+				local->colind = &local->colind[local_firstentry];
+				float *nzval = (float *)(local->nzval);
 				local->nzval = (uintptr_t)&nzval[local_firstentry];
 				local->nzval = (uintptr_t)&nzval[local_firstentry];
 			}
 			}
 		}
 		}