From 671f0ff32b3ee2fdf7cae71864073e974b804c23 Mon Sep 17 00:00:00 2001 From: Sergei Shudler Date: Mon, 22 Feb 2021 10:46:04 -0800 Subject: STRUMPACK: Add e4s testsuite-inspired smoke test (#21705) --- .../repos/builtin/packages/strumpack/package.py | 64 +++++++++++++++++++++- 1 file 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) -- cgit v1.2.3-70-g09d2