task 6
This commit is contained in:
@@ -46,6 +46,8 @@ MPI_Comm cartesian_comm;
|
||||
int coordinates[2], dims[2] = { 0 };
|
||||
int cartesian_rank;
|
||||
|
||||
int up, down, left, right;
|
||||
int up_left, up_right, down_left, down_right;
|
||||
// END: T1b
|
||||
|
||||
// Simulation parameters: size, step count, and how often to save the state
|
||||
@@ -231,7 +233,49 @@ void get_corner_procs(void) {
|
||||
// Communicate the border between processes.
|
||||
void border_exchange(void) {
|
||||
// BEGIN: T6
|
||||
;
|
||||
|
||||
// rows
|
||||
MPI_Sendrecv(&U(0, 0), local_N, MPI_DOUBLE, up, 0,
|
||||
&U(local_M, 0), local_N, MPI_DOUBLE, down, 0,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Sendrecv(&U(local_M - 1, 0), local_N, MPI_DOUBLE, down, 1,
|
||||
&U(-1, 0), local_N, MPI_DOUBLE, up, 1,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
// columns
|
||||
MPI_Datatype column_type;
|
||||
MPI_Type_vector(local_M, 1, local_N + 2, MPI_DOUBLE, &column_type);
|
||||
MPI_Type_commit(&column_type);
|
||||
|
||||
MPI_Sendrecv(&U(0, 0), 1, column_type, left, 2,
|
||||
&U(0, local_N), 1, column_type, right, 2,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Sendrecv(&U(0, local_N - 1), 1, column_type, right, 3,
|
||||
&U(0, -1), 1, column_type, left, 3,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Type_free(&column_type);
|
||||
|
||||
// corners
|
||||
get_corner_procs();
|
||||
|
||||
MPI_Sendrecv(&U(0, 0), 1, MPI_DOUBLE, up_left, 4,
|
||||
&U(local_M, local_N), 1, MPI_DOUBLE, down_right, 4,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Sendrecv(&U(0, local_N - 1), 1, MPI_DOUBLE, up_right, 5,
|
||||
&U(local_M, -1), 1, MPI_DOUBLE, down_left, 5,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Sendrecv(&U(local_M - 1, 0), 1, MPI_DOUBLE, down_left, 6,
|
||||
&U(-1, local_N), 1, MPI_DOUBLE, up_right, 6,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
|
||||
MPI_Sendrecv(&U(local_M - 1, local_N - 1), 1, MPI_DOUBLE, down_right, 7,
|
||||
&U(-1, -1), 1, MPI_DOUBLE, up_left, 7,
|
||||
cartesian_comm, MPI_STATUS_IGNORE);
|
||||
// END: T6
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user