SLATE is a distributed, GPU-accelerated, dense linear algebra library targetting current and upcoming high-performance computing (HPC) systems. It is developed as part of the U.S. Department of Energy Exascale Computing Project (ECP).
MPI has really always been required. The attempt to make MPI stubs for a non-MPI compile is not maintainable — stubs would have to act exactly like an MPI library with 1 process, including things like broadcasts, reductions, data types, and getting wtime. Using stubs is explicitly prohibited by xSDK to avoid collisions. Consider an MPI application that links with a non-MPI SLATE — which MPI_Send is used, the stub or the real one?
Similarly, OpenMP is required, and having OpenMP stubs for functions like omp_get_max_threads() is prohibited by xSDK. (It would be feasible to make a single-threaded library without OpenMP, ignoring omp pragmas and defining appropriate wrappers around omp functions—not stubs—but that hardly seems useful.)
MPI has really always been required. The attempt to make MPI stubs for a non-MPI compile is not maintainable — stubs would have to act exactly like an MPI library with 1 process, including things like broadcasts, reductions, data types, and getting wtime. Using stubs is explicitly prohibited by xSDK to avoid collisions. Consider an MPI application that links with a non-MPI SLATE — which
MPI_Send
is used, the stub or the real one?Similarly, OpenMP is required, and having OpenMP stubs for functions like
omp_get_max_threads()
is prohibited by xSDK. (It would be feasible to make a single-threaded library without OpenMP, ignoring omp pragmas and defining appropriate wrappers aroundomp
functions—not stubs—but that hardly seems useful.)