|
@@ -26,7 +26,9 @@ unsigned starpu_block_filter_func(starpu_filter *f, data_state *root_data)
|
|
|
unsigned nchunks;
|
|
|
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 ny = blas_root->ny;
|
|
|
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);
|
|
|
|
|
|
/* 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 */
|
|
|
unsigned chunk;
|
|
@@ -48,18 +49,25 @@ unsigned starpu_block_filter_func(starpu_filter *f, data_state *root_data)
|
|
|
uint32_t child_nx =
|
|
|
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;
|
|
|
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->ny = ny;
|
|
|
local->elemsize = elemsize;
|
|
|
|
|
|
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 =
|
|
|
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;
|
|
|
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->ny = child_ny;
|
|
|
local->elemsize = elemsize;
|
|
|
|
|
|
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)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;
|
|
|
}
|
|
|
}
|
|
|
}
|