From 2a20943f9b7ba4f32b09619d3f6efe2b1879a1cd Mon Sep 17 00:00:00 2001 From: s1913388 <77328790+s1913388@users.noreply.github.com> Date: Mon, 2 Aug 2021 15:40:43 +0800 Subject: [PATCH] Optimised Cloverleaf3D (#24920) --- .../builtin/packages/cloverleaf3d/package.py | 98 +++++++++++-------- 1 file changed, 57 insertions(+), 41 deletions(-) diff --git a/var/spack/repos/builtin/packages/cloverleaf3d/package.py b/var/spack/repos/builtin/packages/cloverleaf3d/package.py index 56de6ac5ee..eb81f13111 100644 --- a/var/spack/repos/builtin/packages/cloverleaf3d/package.py +++ b/var/spack/repos/builtin/packages/cloverleaf3d/package.py @@ -6,59 +6,78 @@ class Cloverleaf3d(MakefilePackage): """Proxy Application. CloverLeaf3D is 3D version of the - CloverLeaf mini-app. CloverLeaf is a mini-app that solves - the compressible Euler equations on a Cartesian grid, - using an explicit, second-order accurate method. + CloverLeaf mini-app. CloverLeaf is a mini-app that solves + the compressible Euler equations on a Cartesian grid, + using an explicit, second-order accurate method. """ homepage = "http://uk-mac.github.io/CloverLeaf3D/" - url = "http://downloads.mantevo.org/releaseTarballs/miniapps/CloverLeaf3D/CloverLeaf3D-1.0.tar.gz" + url = "http://downloads.mantevo.org/releaseTarballs/miniapps/CloverLeaf3D/CloverLeaf3D-1.0.tar.gz" - tags = ['proxy-app'] + tags = ["proxy-app"] - version('1.0', sha256='78d591728c61bdfd6175b3930df7652e09ed04fbcd01b3fc86fb2aa0f237a8ef') + maintainers = ["s1913388"] - variant('openacc', default=False, description='Enable OpenACC Support') + version( + "1.0", sha256="78d591728c61bdfd6175b3930df7652e09ed04fbcd01b3fc86fb2aa0f237a8ef" + ) - depends_on('mpi') + variant("opencl", default=False, description="Enable OpenCL Support") + + variant("openacc", default=False, description="Enable OpenACC Support") + + depends_on("mpi") @property def type_of_build(self): - build = 'ref' + build = "ref" - if '+openacc' in self.spec: - build = 'OpenACC' + if "+opencl" in self.spec: + build = "OpenCL" + elif "+openacc" in self.spec: + build = "OpenACC" return build @property def build_targets(self): targets = [ - 'MPI_COMPILER={0}'.format(self.spec['mpi'].mpifc), - 'C_MPI_COMPILER={0}'.format(self.spec['mpi'].mpicc), - '--directory=CloverLeaf3D_{0}'.format(self.type_of_build) + "MPI_COMPILER={0}".format(self.spec["mpi"].mpifc), + "C_MPI_COMPILER={0}".format(self.spec["mpi"].mpicc), + "--directory=CloverLeaf3D_{0}".format(self.type_of_build), ] - if '%gcc' in self.spec: - targets.append('COMPILER=GNU') - targets.append('FLAGS_GNU=') - targets.append('CFLAGS_GNU=') - elif '%cce' in self.spec: - targets.append('COMPILER=CRAY') - targets.append('FLAGS_CRAY=') - targets.append('CFLAGS_CRAY=') - elif '%intel' in self.spec: - targets.append('COMPILER=INTEL') - targets.append('FLAGS_INTEL=') - targets.append('CFLAGS_INTEL=') - elif '%pgi' in self.spec: - targets.append('COMPILER=PGI') - targets.append('FLAGS_PGI=') - targets.append('CFLAGS_PGI=') - elif '%xl' in self.spec: - targets.append('COMPILER=XLF') - targets.append('FLAGS_XLF=') - targets.append('CFLAGS_XLF=') + if "%gcc" in self.spec: + targets.append("COMPILER=GNU") + targets.append("FLAGS_GNU=-O3 -funroll-loops") + targets.append("CFLAGS_GNU=-O3 -funroll-loops") + targets.append("OMP_GNU=-fopenmp") + elif "%cce" in self.spec: + targets.append("COMPILER=CRAY") + targets.append("FLAGS_CRAY=") + targets.append("CFLAGS_CRAY=") + elif "%intel" in self.spec: + targets.append("COMPILER=INTEL") + targets.append("FLAGS_INTEL=") + targets.append("CFLAGS_INTEL=") + elif "%pgi" in self.spec: + targets.append("COMPILER=PGI") + targets.append("FLAGS_PGI=") + targets.append("CFLAGS_PGI=") + elif "%xl" in self.spec: + targets.append("COMPILER=XLF") + targets.append("FLAGS_XLF=") + targets.append("CFLAGS_XLF=") + elif "%arm" in self.spec: + targets.append("COMPILER=ARM") + targets.append("FLAGS_ARM=-O3 -funroll-loops") + targets.append("CFLAGS_ARM=-O3 -funroll-loops") + targets.append("OMP_ARM=-fopenmp") + elif "%nvhpc" in self.spec: + targets.append("COMPILER=NVHPC") + targets.append("FLAGS_NVHPC=-O3 -fast") + targets.append("CFLAGS_NVHPC=-O3 -fast") + targets.append("OMP_NVHPC=-mp=multicore") return targets @@ -67,11 +86,8 @@ def install(self, spec, prefix): mkdirp(prefix.bin) mkdirp(prefix.doc.samples) - install('README.md', prefix.doc) + install("README.md", prefix.doc) - install('CloverLeaf3D_{0}/clover_leaf'.format(self.type_of_build), - prefix.bin) - install('CloverLeaf3D_{0}/clover.in'.format(self.type_of_build), - prefix.bin) - install('CloverLeaf3D_{0}/*.in'.format(self.type_of_build), - prefix.doc.samples) + install("CloverLeaf3D_{0}/clover_leaf".format(self.type_of_build), prefix.bin) + install("CloverLeaf3D_{0}/clover.in".format(self.type_of_build), prefix.bin) + install("CloverLeaf3D_{0}/*.in".format(self.type_of_build), prefix.doc.samples)