strumpack: make standalone test for +mpi more robust (#44943)
* strumpack: make standalone test for +mpi more robust * Comment about which MPI launcher being attempted
This commit is contained in:
parent
f3acf201c4
commit
ff144df549
@ -3,8 +3,13 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
from spack.util.environment import set_env
|
from spack.util.environment import set_env
|
||||||
|
from spack.util.executable import ProcessError
|
||||||
|
|
||||||
|
|
||||||
class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
|
class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
|
||||||
@ -205,7 +210,7 @@ def cache_test_sources(self):
|
|||||||
install test subdirectory for use during `spack test run`."""
|
install test subdirectory for use during `spack test run`."""
|
||||||
self.cache_extra_test_sources([self.test_data_dir, self.test_src_dir])
|
self.cache_extra_test_sources([self.test_data_dir, self.test_src_dir])
|
||||||
|
|
||||||
def _test_example(self, test_prog, test_cmd, test_args):
|
def _test_example(self, test_prog, test_cmd, pre_args=[]):
|
||||||
test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir)
|
test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir)
|
||||||
cmake_filename = join_path(test_dir, "CMakeLists.txt")
|
cmake_filename = join_path(test_dir, "CMakeLists.txt")
|
||||||
with open(cmake_filename, "w") as mkfile:
|
with open(cmake_filename, "w") as mkfile:
|
||||||
@ -218,9 +223,7 @@ def _test_example(self, test_prog, test_cmd, test_args):
|
|||||||
)
|
)
|
||||||
|
|
||||||
with working_dir(test_dir):
|
with working_dir(test_dir):
|
||||||
opts = self.builder.std_cmake_args
|
opts = self.builder.std_cmake_args + self.cmake_args() + ["."]
|
||||||
opts += self.cmake_args()
|
|
||||||
opts += ["."]
|
|
||||||
cmake = self.spec["cmake"].command
|
cmake = self.spec["cmake"].command
|
||||||
cmake(*opts)
|
cmake(*opts)
|
||||||
|
|
||||||
@ -229,29 +232,32 @@ def _test_example(self, test_prog, test_cmd, test_args):
|
|||||||
|
|
||||||
with set_env(OMP_NUM_THREADS="1"):
|
with set_env(OMP_NUM_THREADS="1"):
|
||||||
exe = which(test_cmd)
|
exe = which(test_cmd)
|
||||||
|
test_args = pre_args + [join_path("..", self.test_data_dir, "pde900.mtx")]
|
||||||
exe(*test_args)
|
exe(*test_args)
|
||||||
|
|
||||||
def test_sparse_seq(self):
|
def test_sparse_seq(self):
|
||||||
"""Run sequential test_sparse"""
|
"""Run sequential test_sparse"""
|
||||||
if "+mpi" in self.spec:
|
|
||||||
raise SkipTest("Package must be installed with '~mpi'")
|
|
||||||
test_exe = "test_sparse_seq"
|
test_exe = "test_sparse_seq"
|
||||||
exe_arg = [join_path("..", self.test_data_dir, "pde900.mtx")]
|
self._test_example(test_exe, test_exe)
|
||||||
self._test_example(test_exe, test_exe, exe_arg)
|
|
||||||
|
|
||||||
def test_sparse_mpi(self):
|
def test_sparse_mpi(self):
|
||||||
"""Run parallel test_sparse"""
|
"""Run parallel test_sparse"""
|
||||||
if "+mpi" not in self.spec:
|
if "+mpi" not in self.spec:
|
||||||
raise SkipTest("Package must be installed with '+mpi'")
|
raise SkipTest("Package must be installed with '+mpi'")
|
||||||
test_exe_mpi = "test_sparse_mpi"
|
test_exe_mpi = "test_sparse_mpi"
|
||||||
test_args = ["-n", "1", test_exe_mpi, join_path("..", self.test_data_dir, "pde900.mtx")]
|
mpi_args = ["-n", "1", test_exe_mpi]
|
||||||
mpiexe_list = ["srun", "mpirun", "mpiexec"]
|
|
||||||
|
mpi_bin = self.spec["mpi"].prefix.bin
|
||||||
|
mpiexe_list = ["srun", mpi_bin.mpirun, mpi_bin.mpiexec]
|
||||||
for exe in mpiexe_list:
|
for exe in mpiexe_list:
|
||||||
|
tty.info(f"Attempting to build and launch with {os.path.basename(exe)}")
|
||||||
try:
|
try:
|
||||||
self._test_example(test_exe_mpi, exe, test_args)
|
args = ["--immediate=30"] + mpi_args if exe == "srun" else mpi_args
|
||||||
|
self._test_example(test_exe_mpi, exe, args)
|
||||||
return
|
return
|
||||||
except Exception:
|
except (Exception, ProcessError) as err:
|
||||||
pass
|
tty.info(f"Skipping {exe}: {str(err)}")
|
||||||
|
|
||||||
assert False, "No MPI executable was found"
|
assert False, "No MPI executable was found"
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user