summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Shudler <sergshu@gmail.com>2021-02-22 10:46:04 -0800
committerGitHub <noreply@github.com>2021-02-22 10:46:04 -0800
commit671f0ff32b3ee2fdf7cae71864073e974b804c23 (patch)
tree64589df8f9ca412b2f70e809a1bd777fb0fddfd3
parent0dbb90b565456a8a236728f304d9faeca609fc91 (diff)
downloadspack-671f0ff32b3ee2fdf7cae71864073e974b804c23.tar.gz
spack-671f0ff32b3ee2fdf7cae71864073e974b804c23.tar.bz2
spack-671f0ff32b3ee2fdf7cae71864073e974b804c23.tar.xz
spack-671f0ff32b3ee2fdf7cae71864073e974b804c23.zip
STRUMPACK: Add e4s testsuite-inspired smoke test (#21705)
-rw-r--r--var/spack/repos/builtin/packages/strumpack/package.py64
1 files changed, 62 insertions, 2 deletions
diff --git a/var/spack/repos/builtin/packages/strumpack/package.py b/var/spack/repos/builtin/packages/strumpack/package.py
index 27d6aca09d..d6ffad3d3c 100644
--- a/var/spack/repos/builtin/packages/strumpack/package.py
+++ b/var/spack/repos/builtin/packages/strumpack/package.py
@@ -4,6 +4,8 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
+from spack.util.environment import set_env
+from spack.util.executable import which
class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
@@ -23,6 +25,8 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
maintainers = ['pghysels']
+ test_requires_compiler = True
+
version('master', branch='master')
version('5.1.1', sha256='6cf4eaae5beb9bd377f2abce9e4da9fd3e95bf086ae2f04554fad6dd561c28b9')
version('5.0.0', sha256='bdfd1620ff7158d96055059be04ee49466ebaca8213a2fdab33e2d4571019a49')
@@ -83,6 +87,10 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
conflicts('+rocm', when='+cuda')
conflicts('+slate', when='@:5.1.1')
conflicts('+slate', when='~mpi')
+ conflicts('^openblas@0.3.6: threads=none', when='+openmp',
+ msg='STRUMPACK requires openblas with OpenMP threading support')
+ conflicts('^openblas@0.3.6: threads=pthreads', when='+openmp',
+ msg='STRUMPACK requires openblas with OpenMP threading support')
patch('intel-19-compile.patch', when='@3.1.1')
@@ -106,11 +114,14 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
'-DSTRUMPACK_BUILD_TESTS=%s' % on_off('+build_tests'),
'-DTPL_BLAS_LIBRARIES=%s' % spec['blas'].libs.joined(";"),
'-DTPL_LAPACK_LIBRARIES=%s' % spec['lapack'].libs.joined(";"),
- '-DTPL_SCALAPACK_LIBRARIES=%s' % spec['scalapack'].
- libs.joined(";"),
'-DBUILD_SHARED_LIBS=%s' % on_off('+shared')
]
+ if '+mpi' in spec:
+ args.append(
+ '-DTPL_SCALAPACK_LIBRARIES=%s' % spec['scalapack'].
+ libs.joined(";"))
+
if spec.satisfies('@:3.9.999'):
if '+mpi' in spec:
args.extend([
@@ -140,3 +151,52 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage):
format(",".join(rocm_archs)))
return args
+
+ test_data_dir = 'examples/data'
+ test_src_dir = 'test'
+
+ @run_after('install')
+ def cache_test_sources(self):
+ """Copy the example source files after the package is installed to an
+ install test subdirectory for use during `spack test run`."""
+ self.cache_extra_test_sources([self.test_data_dir, self.test_src_dir])
+
+ def _test_example(self, test_prog, test_dir, test_cmd, test_args):
+ tmpbld_dir = '{0}/_BUILD'.format(test_dir)
+ with working_dir(tmpbld_dir, create=True):
+ with open('{0}/CMakeLists.txt'.format(tmpbld_dir), 'w') as mkfile:
+ mkfile.write('cmake_minimum_required(VERSION 3.13)\n')
+ mkfile.write('project(StrumpackSmokeTest LANGUAGES CXX)\n')
+ mkfile.write('find_package(STRUMPACK REQUIRED)\n')
+ mkfile.write('add_executable({0} ../{0}.cpp)\n'.
+ format(test_prog))
+ mkfile.write('target_link_libraries({0} '.format(test_prog) +
+ 'PRIVATE STRUMPACK::strumpack)\n')
+
+ opts = self.std_cmake_args
+ opts += self.cmake_args()
+ opts += ['.']
+ self.run_test('cmake', opts, [], installed=False, work_dir='.')
+ self.run_test('make')
+ with set_env(OMP_NUM_THREADS='4'):
+ self.run_test(test_cmd, test_args, installed=False,
+ purpose='test: strumpack smoke test',
+ skip_missing=False, work_dir='.')
+ self.run_test('rm', ['-fR', tmpbld_dir])
+
+ def test(self):
+ test_dir = join_path(self.install_test_root, self.test_src_dir)
+ test_exe = 'test_sparse_seq'
+ test_exe_mpi = 'test_sparse_mpi'
+ exe_arg = ['../../examples/data/pde900.mtx']
+ if '+mpi' in self.spec:
+ test_args = ['-n', '4', test_exe_mpi]
+ test_args.extend(exe_arg)
+ mpiexe_list = ['mpirun', 'mpiexec', 'srun']
+ for mpiexe in mpiexe_list:
+ if which(mpiexe) is not None:
+ self._test_example(test_exe_mpi, test_dir,
+ mpiexe, test_args)
+ break
+ else:
+ self._test_example(test_exe, test_dir, test_exe, exe_arg)