check that nmpi divides n_global

This commit is contained in:
Bryce Allen
2022-10-24 11:32:49 -04:00
parent 88e2d23c7f
commit c9a375df4a
2 changed files with 17 additions and 9 deletions

View File

@@ -193,6 +193,12 @@ int main(int argc, char** argv)
MPI_Comm_size(MPI_COMM_WORLD, &world_size); MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
if (n_global % world_size != 0) {
printf("%d nmpi (%d) must be divisor of domain size (%d), exiting\n",
world_rank, world_size, n_global);
exit(1);
}
const int n_local = n_global / world_size; const int n_local = n_global / world_size;
const int n_local_with_ghost = n_local + 2 * n_bnd; const int n_local_with_ghost = n_local + 2 * n_bnd;

View File

@@ -138,6 +138,12 @@ int main(int argc, char **argv) {
MPI_Comm_size(MPI_COMM_WORLD, &world_size); MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
if (n_global % world_size != 0) {
printf("%d nmpi (%d) must be divisor of domain size (%d), exiting\n",
world_rank, world_size, n_global);
exit(1);
}
const int n_local = n_global / world_size; const int n_local = n_global / world_size;
const int n_local_with_ghost = n_local + 2 * n_bnd; const int n_local_with_ghost = n_local + 2 * n_bnd;
@@ -176,7 +182,7 @@ int main(int argc, char **argv) {
} }
// fill boundary points on ends // fill boundary points on ends
if (world_rank == 1) { if (world_rank == 0) {
for (int i = 0; i < n_bnd; i++) { for (int i = 0; i < n_bnd; i++) {
double xtmp = (i - n_bnd) * dx; double xtmp = (i - n_bnd) * dx;
h_y(i) = fn_x_cubed(xtmp); h_y(i) = fn_x_cubed(xtmp);
@@ -190,30 +196,26 @@ int main(int argc, char **argv) {
} }
gt::copy(h_y, d_y); gt::copy(h_y, d_y);
// gt::synchronize();
clock_gettime(CLOCK_MONOTONIC, &start); clock_gettime(CLOCK_MONOTONIC, &start);
boundary_exchange(MPI_COMM_WORLD, world_size, world_rank, d_y, n_bnd); boundary_exchange(MPI_COMM_WORLD, world_size, world_rank, d_y, n_bnd);
// gt::synchronize();
clock_gettime(CLOCK_MONOTONIC, &end); clock_gettime(CLOCK_MONOTONIC, &end);
seconds = ((end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) * 1.0e-9); seconds = ((end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) * 1.0e-9);
printf("%d/%d exchange time %0.4f\n", world_rank, world_size, seconds); printf("%d/%d exchange time %0.4f\n", world_rank, world_size, seconds);
d_dydx_numeric = stencil1d_5(d_y, stencil5) * scale; d_dydx_numeric = stencil1d_5(d_y, stencil5) * scale;
// gt::synchronize();
gt::copy(d_dydx_numeric, h_dydx_numeric); gt::copy(d_dydx_numeric, h_dydx_numeric);
// gt::synchronize();
/* /*
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
printf("{0} l {1}\n{0} l {2}\n", world_rank, h_dydx_actual(i), printf("%d la %f\n%d ln %f\n", world_rank, h_dydx_actual(i),
h_dydx_numeric(i)); world_rank, h_dydx_numeric(i));
} }
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
int idx = n_local - 1 - i; int idx = n_local - 1 - i;
printf("{0} r {1}\n{0} r {2}\n", world_rank, h_dydx_actual(idx), printf("%d ra %f\n%d rn %f\n", world_rank, h_dydx_actual(idx),
h_dydx_numeric(idx)); world_rank, h_dydx_numeric(idx));
} }
*/ */