Commit fabb1c42 by Lorenz Huedepohl Committed by Andreas Marek

### Loop over all possible domain decompositions

```We got reports from a user that there were troubles with certain domain
decompositions. So far the tests only looked at (approximately) square
decompositions in column-major process order.

Now, a new class of tests loops over all possible decompositions
(row * col) for a given number of total tasks.

So far, we can not confirm that there are any problems, all
possibilities work as expected.```
parent 939020cc
 ... @@ -29,12 +29,19 @@ test_type_flag = { ... @@ -29,12 +29,19 @@ test_type_flag = { "solve_tridiagonal" : "-D__SOLVE_TRIDIAGONAL", "solve_tridiagonal" : "-D__SOLVE_TRIDIAGONAL", } } for m, g, t, p, d, s in product(sorted(matrix_flag.keys()), layout_flag = { "all_layouts" : "-DTEST_ALL_LAYOUTS", "square" : "" } for m, g, t, p, d, s, l in product( sorted(matrix_flag.keys()), sorted(gpu_flag.keys()), sorted(gpu_flag.keys()), sorted(test_type_flag.keys()), sorted(test_type_flag.keys()), sorted(prec_flag.keys()), sorted(prec_flag.keys()), sorted(domain_flag.keys()), sorted(domain_flag.keys()), sorted(solver_flag.keys())): sorted(solver_flag.keys()), sorted(layout_flag.keys())): #todo: decide what tests we actually want #todo: decide what tests we actually want if(m == "analytic" and (g == 1 or t != "eigenvectors" or p == "single" or d == "complex")): if(m == "analytic" and (g == 1 or t != "eigenvectors" or p == "single" or d == "complex")): ... @@ -59,6 +66,9 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()), ... @@ -59,6 +66,9 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()), elif kernel == "all_kernels": elif kernel == "all_kernels": extra_flags.append("-DTEST_ALL_KERNELS") extra_flags.append("-DTEST_ALL_KERNELS") if layout_flag[l]: extra_flags.append(layout_flag[l]) if (p == "single"): if (p == "single"): if (d == "real"): if (d == "real"): print("if WANT_SINGLE_PRECISION_REAL") print("if WANT_SINGLE_PRECISION_REAL") ... @@ -68,7 +78,12 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()), ... @@ -68,7 +78,12 @@ for m, g, t, p, d, s in product(sorted(matrix_flag.keys()), raise Exception("Oh no!") raise Exception("Oh no!") endifs += 1 endifs += 1 name = "test_{0}_{1}_{2}_{3}{4}{5}{6}".format(d, p, t, s, "" if kernel == "nokernel" else "_" + kernel, "_gpu" if g else "", "_analytic" if m == "analytic" else "") name = "test_{0}_{1}_{2}_{3}{4}{5}{6}{7}".format( d, p, t, s, "" if kernel == "nokernel" else "_" + kernel, "_gpu" if g else "", "_analytic" if m == "analytic" else "", "_all_layouts" if l == "all_layouts" else "") print("noinst_PROGRAMS += " + name) print("noinst_PROGRAMS += " + name) print("check_SCRIPTS += " + name + ".sh") print("check_SCRIPTS += " + name + ".sh") print(name + "_SOURCES = test/Fortran/test.F90") print(name + "_SOURCES = test/Fortran/test.F90") ... ...
 ... @@ -1176,7 +1176,7 @@ module elpa_impl ... @@ -1176,7 +1176,7 @@ module elpa_impl !> \param nrows_c number of rows of local (sub) matrix c !> \param nrows_c number of rows of local (sub) matrix c !> \param ncols_c number of columns of local (sub) matrix c !> \param ncols_c number of columns of local (sub) matrix c !> \param error optional argument, error code which can be queried with elpa_strerr !> \param error optional argument, error code which can be queried with elpa_strerr subroutine elpa_hermitian_multiply_d (self,uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, & subroutine elpa_hermitian_multiply_d (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, & c, nrows_c, ncols_c, error) c, nrows_c, ncols_c, error) use iso_c_binding use iso_c_binding use elpa1_auxiliary_impl use elpa1_auxiliary_impl ... ...
 ... @@ -66,7 +66,7 @@ int main(int argc, char** argv) { ... @@ -66,7 +66,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -138,7 +138,7 @@ int main(int argc, char** argv) { ... @@ -138,7 +138,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -65,7 +65,7 @@ int main(int argc, char** argv) { ... @@ -65,7 +65,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -134,7 +134,7 @@ int main(int argc, char** argv) { ... @@ -134,7 +134,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -66,7 +66,7 @@ int main(int argc, char** argv) { ... @@ -66,7 +66,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -138,7 +138,7 @@ int main(int argc, char** argv) { ... @@ -138,7 +138,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -65,7 +65,7 @@ int main(int argc, char** argv) { ... @@ -65,7 +65,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -135,7 +135,7 @@ int main(int argc, char** argv) { ... @@ -135,7 +135,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -151,7 +151,7 @@ int main(int argc, char** argv) { ... @@ -151,7 +151,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -143,7 +143,7 @@ int main(int argc, char** argv) { ... @@ -143,7 +143,7 @@ int main(int argc, char** argv) { #ifdef WITH_MPI #ifdef WITH_MPI my_mpi_comm_world = MPI_Comm_c2f(MPI_COMM_WORLD); my_mpi_comm_world = MPI_Comm_c2f(MPI_COMM_WORLD); #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { ... @@ -68,7 +68,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -148,7 +148,7 @@ int main(int argc, char** argv) { ... @@ -148,7 +148,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -67,7 +67,7 @@ int main(int argc, char** argv) { ... @@ -67,7 +67,7 @@ int main(int argc, char** argv) { int np_cols, np_rows, np_colsStart; int np_cols, np_rows, np_colsStart; int my_blacs_ctxt, nprow, npcol, my_prow, my_pcol; int my_blacs_ctxt, my_prow, my_pcol; int mpierr; int mpierr; ... @@ -143,7 +143,7 @@ int main(int argc, char** argv) { ... @@ -143,7 +143,7 @@ int main(int argc, char** argv) { #else #else my_mpi_comm_world = 1; my_mpi_comm_world = 1; #endif #endif set_up_blacsgrid_f(my_mpi_comm_world, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(my_mpi_comm_world, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); if (myid == 0) { if (myid == 0) { printf("\n"); printf("\n"); ... ...
 ... @@ -97,7 +97,7 @@ int main(int argc, char** argv) { ... @@ -97,7 +97,7 @@ int main(int argc, char** argv) { int mpi_comm; int mpi_comm; /* blacs */ /* blacs */ int my_blacs_ctxt, sc_desc[9], info, nprow, npcol; int my_blacs_ctxt, sc_desc[9], info; /* The Matrix */ /* The Matrix */ MATRIX_TYPE *a, *as, *z; MATRIX_TYPE *a, *as, *z; ... @@ -136,7 +136,7 @@ int main(int argc, char** argv) { ... @@ -136,7 +136,7 @@ int main(int argc, char** argv) { #else #else mpi_comm = 0; mpi_comm = 0; #endif #endif set_up_blacsgrid_f(mpi_comm, &my_blacs_ctxt, &np_rows, &np_cols, &nprow, &npcol, &my_prow, &my_pcol); set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, &my_blacs_ctxt, &my_prow, &my_pcol); set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info); set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info); /* allocate the matrices needed for elpa */ /* allocate the matrices needed for elpa */ ... ...
 ... @@ -166,8 +166,8 @@ program test_complex2 ... @@ -166,8 +166,8 @@ program test_complex2 ! consistent (i.e. 0<=my_prow
 ... @@ -165,8 +165,8 @@ program test_real2 ... @@ -165,8 +165,8 @@ program test_real2 ! consistent (i.e. 0<=my_prow
 ... @@ -166,8 +166,8 @@ program test_complex2 ... @@ -166,8 +166,8 @@ program test_complex2 ! consistent (i.e. 0<=my_prow
 ... @@ -165,8 +165,8 @@ program test_real2 ... @@ -165,8 +165,8 @@ program test_real2 ! consistent (i.e. 0<=my_prow
 ... @@ -174,8 +174,8 @@ program test_complex_double_precision ... @@ -174,8 +174,8 @@ program test_complex_double_precision ! consistent (i.e. 0<=my_prow
 ... @@ -138,8 +138,8 @@ program test_cholesky ... @@ -138,8 +138,8 @@ program test_cholesky ! consistent (i.e. 0<=my_prow
 ... @@ -173,8 +173,8 @@ program test_complex_gpu_version_double_precision ... @@ -173,8 +173,8 @@ program test_complex_gpu_version_double_precision ! consistent (i.e. 0<=my_prow
 ... @@ -138,8 +138,8 @@ program test_invert_trm ... @@ -138,8 +138,8 @@ program test_invert_trm ! consistent (i.e. 0<=my_prow
 ... @@ -132,8 +132,8 @@ program test_transpose_multiply ... @@ -132,8 +132,8 @@ program test_transpose_multiply ! consistent (i.e. 0<=my_prow
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!