|
@@ -44,10 +44,8 @@ int niter = NITER_DEF;
|
|
|
|
|
|
/* Returns the MPI node number where data indexes index is */
|
|
|
int my_distrib(int x, int y, int nb_nodes) {
|
|
|
- /* Cyclic distrib */
|
|
|
+ /* Block distrib */
|
|
|
return ((int)(x / sqrt(nb_nodes) + (y / sqrt(nb_nodes)) * sqrt(nb_nodes))) % nb_nodes;
|
|
|
- // /* Linear distrib */
|
|
|
- // return x / sqrt(nb_nodes) + (y / sqrt(nb_nodes)) * X;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -67,18 +65,18 @@ static void parse_args(int argc, char **argv)
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
|
{
|
|
|
- int rank, size, x, y, loop;
|
|
|
+ int my_rank, size, x, y, loop;
|
|
|
int value=0, mean=0;
|
|
|
unsigned matrix[X][Y];
|
|
|
starpu_data_handle data_handles[X][Y];
|
|
|
|
|
|
starpu_init(NULL);
|
|
|
- starpu_mpi_initialize_extended(&rank, &size);
|
|
|
+ starpu_mpi_initialize_extended(&my_rank, &size);
|
|
|
parse_args(argc, argv);
|
|
|
|
|
|
for(x = 0; x < X; x++) {
|
|
|
for (y = 0; y < Y; y++) {
|
|
|
- matrix[x][y] = (rank+1)*10 + value;
|
|
|
+ matrix[x][y] = (my_rank+1)*10 + value;
|
|
|
value++;
|
|
|
mean += matrix[x][y];
|
|
|
}
|
|
@@ -88,13 +86,14 @@ int main(int argc, char **argv)
|
|
|
for(x = 0; x < X; x++) {
|
|
|
for (y = 0; y < Y; y++) {
|
|
|
int mpi_rank = my_distrib(x, y, size);
|
|
|
- if (mpi_rank == rank) {
|
|
|
- //fprintf(stderr, "[%d] Owning data[%d][%d]\n", rank, x, y);
|
|
|
+ if (mpi_rank == my_rank) {
|
|
|
+ //fprintf(stderr, "[%d] Owning data[%d][%d]\n", my_rank, x, y);
|
|
|
starpu_variable_data_register(&data_handles[x][y], 0, (uintptr_t)&(matrix[x][y]), sizeof(unsigned));
|
|
|
}
|
|
|
- else if (rank == mpi_rank+1 || rank == mpi_rank-1) {
|
|
|
+ else if (my_rank == my_distrib(x+1, y, size) || my_rank == my_distrib(x-1, y, size)
|
|
|
+ || my_rank == my_distrib(x, y+1, size) || my_rank == my_distrib(x, y-1, size)) {
|
|
|
/* I don't own that index, but will need it for my computations */
|
|
|
- //fprintf(stderr, "[%d] Neighbour of data[%d][%d]\n", rank, x, y);
|
|
|
+ //fprintf(stderr, "[%d] Neighbour of data[%d][%d]\n", my_rank, x, y);
|
|
|
starpu_variable_data_register(&data_handles[x][y], -1, (uintptr_t)NULL, sizeof(unsigned));
|
|
|
}
|
|
|
else {
|
|
@@ -126,9 +125,9 @@ int main(int argc, char **argv)
|
|
|
starpu_shutdown();
|
|
|
|
|
|
if (display) {
|
|
|
- fprintf(stdout, "[%d] mean=%d\n", rank, mean);
|
|
|
+ fprintf(stdout, "[%d] mean=%d\n", my_rank, mean);
|
|
|
for(x = 0; x < X; x++) {
|
|
|
- fprintf(stdout, "[%d] ", rank);
|
|
|
+ fprintf(stdout, "[%d] ", my_rank);
|
|
|
for (y = 0; y < Y; y++) {
|
|
|
fprintf(stdout, "%3d ", matrix[x][y]);
|
|
|
}
|