|
@@ -23,7 +23,7 @@ void func_cpu(void *descr[], __attribute__ ((unused)) void *_args)
|
|
|
int node;
|
|
|
int rank;
|
|
|
|
|
|
- starpu_codelet_unpack_args(_args, &node);
|
|
|
+ starpu_codelet_unpack_args(_args, &node);
|
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
|
FPRINTF(stderr, "Expected node: %d - Actual node: %d\n", node, rank);
|
|
|
|
|
@@ -34,7 +34,7 @@ struct starpu_codelet mycodelet_r_w =
|
|
|
{
|
|
|
.where = STARPU_CPU,
|
|
|
.cpu_funcs = {func_cpu, NULL},
|
|
|
- .nbuffers = 2,
|
|
|
+ .nbuffers = 2,
|
|
|
.modes = {STARPU_R, STARPU_W}
|
|
|
};
|
|
|
|
|
@@ -42,7 +42,7 @@ struct starpu_codelet mycodelet_rw_r =
|
|
|
{
|
|
|
.where = STARPU_CPU,
|
|
|
.cpu_funcs = {func_cpu, NULL},
|
|
|
- .nbuffers = 2,
|
|
|
+ .nbuffers = 2,
|
|
|
.modes = {STARPU_RW, STARPU_R}
|
|
|
};
|
|
|
|
|
@@ -50,7 +50,7 @@ struct starpu_codelet mycodelet_rw_rw =
|
|
|
{
|
|
|
.where = STARPU_CPU,
|
|
|
.cpu_funcs = {func_cpu, NULL},
|
|
|
- .nbuffers = 2,
|
|
|
+ .nbuffers = 2,
|
|
|
.modes = {STARPU_RW, STARPU_RW}
|
|
|
};
|
|
|
|
|
@@ -58,7 +58,7 @@ struct starpu_codelet mycodelet_w_r =
|
|
|
{
|
|
|
.where = STARPU_CPU,
|
|
|
.cpu_funcs = {func_cpu, NULL},
|
|
|
- .nbuffers = 2,
|
|
|
+ .nbuffers = 2,
|
|
|
.modes = {STARPU_W, STARPU_R}
|
|
|
};
|
|
|
|
|
@@ -66,16 +66,16 @@ struct starpu_codelet mycodelet_r_r =
|
|
|
{
|
|
|
.where = STARPU_CPU,
|
|
|
.cpu_funcs = {func_cpu, NULL},
|
|
|
- .nbuffers = 2,
|
|
|
+ .nbuffers = 2,
|
|
|
.modes = {STARPU_R, STARPU_R}
|
|
|
};
|
|
|
|
|
|
int main(int argc, char **argv)
|
|
|
{
|
|
|
- int ret, rank, size, err, node;
|
|
|
- int x0=32, x1=23;
|
|
|
- starpu_data_handle_t data_handlesx0;
|
|
|
- starpu_data_handle_t data_handlesx1;
|
|
|
+ int ret, rank, size, err, node;
|
|
|
+ int x0=32, x1=23;
|
|
|
+ starpu_data_handle_t data_handlesx0;
|
|
|
+ starpu_data_handle_t data_handlesx1;
|
|
|
|
|
|
ret = starpu_init(NULL);
|
|
|
STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
|
|
@@ -86,88 +86,88 @@ int main(int argc, char **argv)
|
|
|
|
|
|
if (rank != 0 && rank != 1) goto end;
|
|
|
|
|
|
- if (rank == 0)
|
|
|
+ if (rank == 0)
|
|
|
{
|
|
|
- starpu_variable_data_register(&data_handlesx0, 0, (uintptr_t)&x0, sizeof(x0));
|
|
|
- starpu_data_set_rank(data_handlesx0, rank);
|
|
|
+ starpu_variable_data_register(&data_handlesx0, 0, (uintptr_t)&x0, sizeof(x0));
|
|
|
+ starpu_data_set_rank(data_handlesx0, rank);
|
|
|
starpu_data_set_tag(data_handlesx0, 0);
|
|
|
- starpu_variable_data_register(&data_handlesx1, -1, (uintptr_t)NULL, sizeof(int));
|
|
|
- starpu_data_set_rank(data_handlesx1, 1);
|
|
|
+ starpu_variable_data_register(&data_handlesx1, -1, (uintptr_t)NULL, sizeof(int));
|
|
|
+ starpu_data_set_rank(data_handlesx1, 1);
|
|
|
starpu_data_set_tag(data_handlesx1, 1);
|
|
|
- }
|
|
|
- else if (rank == 1)
|
|
|
+ }
|
|
|
+ else if (rank == 1)
|
|
|
{
|
|
|
- starpu_variable_data_register(&data_handlesx1, 0, (uintptr_t)&x1, sizeof(x1));
|
|
|
- starpu_data_set_rank(data_handlesx1, rank);
|
|
|
+ starpu_variable_data_register(&data_handlesx1, 0, (uintptr_t)&x1, sizeof(x1));
|
|
|
+ starpu_data_set_rank(data_handlesx1, rank);
|
|
|
starpu_data_set_tag(data_handlesx1, 1);
|
|
|
- starpu_variable_data_register(&data_handlesx0, -1, (uintptr_t)NULL, sizeof(int));
|
|
|
- starpu_data_set_rank(data_handlesx0, 0);
|
|
|
+ starpu_variable_data_register(&data_handlesx0, -1, (uintptr_t)NULL, sizeof(int));
|
|
|
+ starpu_data_set_rank(data_handlesx0, 0);
|
|
|
starpu_data_set_tag(data_handlesx0, 0);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
node = starpu_data_get_rank(data_handlesx1);
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_w,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_w,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_R, data_handlesx0, STARPU_W, data_handlesx1,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
node = starpu_data_get_rank(data_handlesx0);
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_r,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_r,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_RW, data_handlesx0, STARPU_R, data_handlesx1,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_RW, data_handlesx0, STARPU_RW, data_handlesx1,
|
|
|
0);
|
|
|
- assert(err == -EINVAL);
|
|
|
+ assert(err == -EINVAL);
|
|
|
|
|
|
node = 1;
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_RW, data_handlesx0, STARPU_RW, data_handlesx1, STARPU_EXECUTE_ON_NODE, node,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
node = 0;
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_rw_rw,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_RW, data_handlesx0, STARPU_RW, data_handlesx1, STARPU_EXECUTE_ON_NODE, node,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
node = 0;
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_r,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_r,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_R, data_handlesx0, STARPU_R, data_handlesx1, STARPU_EXECUTE_ON_NODE, node,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
- /* Here the value specified by the property STARPU_EXECUTE_ON_NODE is
|
|
|
- going to overwrite the node even though the data model clearly specifies
|
|
|
- which node is going to execute the codelet */
|
|
|
+ /* Here the value specified by the property STARPU_EXECUTE_ON_NODE is
|
|
|
+ going to overwrite the node even though the data model clearly specifies
|
|
|
+ which node is going to execute the codelet */
|
|
|
node = 0;
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_w,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_r_w,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_R, data_handlesx0, STARPU_W, data_handlesx1, STARPU_EXECUTE_ON_NODE, node,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
- /* Here the value specified by the property STARPU_EXECUTE_ON_NODE is
|
|
|
- going to overwrite the node even though the data model clearly specifies
|
|
|
- which node is going to execute the codelet */
|
|
|
+ /* Here the value specified by the property STARPU_EXECUTE_ON_NODE is
|
|
|
+ going to overwrite the node even though the data model clearly specifies
|
|
|
+ which node is going to execute the codelet */
|
|
|
node = 0;
|
|
|
- err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_w_r,
|
|
|
+ err = starpu_mpi_insert_task(MPI_COMM_WORLD, &mycodelet_w_r,
|
|
|
STARPU_VALUE, &node, sizeof(node),
|
|
|
STARPU_W, data_handlesx0, STARPU_R, data_handlesx1, STARPU_EXECUTE_ON_NODE, node,
|
|
|
0);
|
|
|
- assert(err == 0);
|
|
|
+ assert(err == 0);
|
|
|
|
|
|
fprintf(stderr, "Waiting ...\n");
|
|
|
- starpu_task_wait_for_all();
|
|
|
+ starpu_task_wait_for_all();
|
|
|
starpu_data_unregister(data_handlesx0);
|
|
|
starpu_data_unregister(data_handlesx1);
|
|
|
|