Merge pull request #258 from epfl-scitas/packages/scalasca

Packages/scalasca
This commit is contained in:
Todd Gamblin 2015-12-31 15:27:39 -08:00
commit 7062b216b8
5 changed files with 152 additions and 207 deletions

View File

@ -1,58 +1,55 @@
# FIXME: Add copyright statement ##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
# #
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import * from spack import *
from contextlib import closing
class Cube(Package): class Cube(Package):
"""Cube the profile viewer for Score-P and Scalasca profiles. It """
displays a multi-dimensional performance space consisting Cube the profile viewer for Score-P and Scalasca profiles. It displays a multi-dimensional performance space
of the dimensions (i) performance metric, (ii) call path, consisting of the dimensions:
and (iii) system resource.""" - performance metric
- call path
- system resource
"""
homepage = "http://www.scalasca.org/software/cube-4.x/download.html" homepage = "http://www.scalasca.org/software/cube-4.x/download.html"
url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz" url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
version('4.3.3', '07e109248ed8ffc7bdcce614264a2909', version('4.3.3', '07e109248ed8ffc7bdcce614264a2909',
url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz') url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz')
version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20') version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20',
url="http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz")
version('4.3TP1', 'a2090fbc7b2ba394bd5c09ba971e237f', # TODO : add variant that builds GUI on top of Qt
url = 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz')
# Using CC as C++ compiler provides quirky workaround for a Score-P build system attempt
# to guess a matching C compiler when configuring scorep-score
backend_user_provided = """\
CC=cc
CXX=CC
F77=f77
FC=f90
#CFLAGS=-fPIC
#CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=CC
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
"""
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("vendor/common/build-config/platforms/platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("vendor/common/build-config/platforms/platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
configure_args = ["--prefix=%s" % prefix, configure_args = ["--prefix=%s" % prefix,
"--with-custom-compilers",
"--without-paraver", "--without-paraver",
"--without-gui"] "--without-gui"]
configure(*configure_args) configure(*configure_args)
make(parallel=False) make(parallel=False)
make("install", parallel=False) make("install", parallel=False)

View File

@ -1,18 +1,38 @@
# FIXME: Add copyright statement here ##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import * from spack import *
from contextlib import closing
class Opari2(Package): class Opari2(Package):
"""OPARI2 is a source-to-source instrumentation tool for OpenMP and """
hybrid codes. It surrounds OpenMP directives and runtime library OPARI2 is a source-to-source instrumentation tool for OpenMP and hybrid codes. It surrounds OpenMP directives and
calls with calls to the POMP2 measurement interface. runtime library calls with calls to the POMP2 measurement interface. OPARI2 will provide you with a new
OPARI2 will provide you with a new initialization method that allows initialization method that allows for multi-directory and parallel builds as well as the usage of pre-instrumented
for multi-directory and parallel builds as well as the usage of libraries. Furthermore, an efficient way of tracking parent-child relationships was added. Additionally, we extended
pre-instrumented libraries. Furthermore, an efficient way of OPARI2 to support instrumentation of OpenMP 3.0 tied tasks.
tracking parent-child relationships was added. Additionally, we """
extended OPARI2 to support instrumentation of OpenMP 3.0
tied tasks. """
homepage = "http://www.vi-hps.org/projects/score-p" homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz" url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz"
@ -21,47 +41,8 @@ class Opari2(Package):
url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz') url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz')
version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e') version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e')
backend_user_provided = """\
CC=cc
CXX=c++
F77=f77
FC=f90
CFLAGS=-fPIC
CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=c++
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
CFLAGS_FOR_BUILD=-fPIC
CXXFLAGS_FOR_BUILD=-fPIC
"""
mpi_user_provided = """\
MPICC=mpicc
MPICXX=mpicxx
MPIF77=mpif77
MPIFC=mpif90
MPI_CFLAGS=-fPIC
MPI_CXXFLAGS=-fPIC
"""
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
mpi_file.write(self.mpi_user_provided)
# FIXME: Modify the configure line to suit your build system here.
configure("--prefix=%s" % prefix, configure("--prefix=%s" % prefix,
"--with-custom-compilers",
"--enable-shared") "--enable-shared")
# FIXME: Add logic to build and install here
make() make()
make("install") make("install")

View File

@ -1,12 +1,35 @@
# FIXME: Add copyright ##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import * from spack import *
from contextlib import closing
import os
class Otf2(Package): class Otf2(Package):
"""The Open Trace Format 2 is a highly scalable, memory efficient event """
trace data format plus support library.""" The Open Trace Format 2 is a highly scalable, memory efficient event trace data format plus support library.
"""
homepage = "http://www.vi-hps.org/score-p" homepage = "http://www.vi-hps.org/score-p"
url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz" url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
@ -22,57 +45,11 @@ class Otf2(Package):
version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8', version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8',
url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz") url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz")
backend_user_provided = """\
CC=cc
CXX=c++
F77=f77
FC=f90
CFLAGS=-fPIC
CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=c++
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
CFLAGS_FOR_BUILD=-fPIC
CXXFLAGS_FOR_BUILD=-fPIC
"""
mpi_user_provided = """\
MPICC=cc
MPICXX=c++
MPIF77=f77
MPIFC=f90
MPI_CFLAGS=-fPIC
MPI_CXXFLAGS=-fPIC
"""
@when('@:1.2.1')
def version_specific_args(self):
return ["--with-platform=disabled", "CC=cc", "CXX=c++", "F77=f77", "F90=f90", "CFLAGS=-fPIC", "CXXFLAGS=-fPIC"]
@when('@1.3:')
def version_specific_args(self):
# TODO: figure out what scorep's build does as of otf2 1.3
return ["--with-custom-compilers"]
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
mpi_file.write(self.mpi_user_provided)
configure_args=["--prefix=%s" % prefix, configure_args=["--prefix=%s" % prefix,
"--enable-shared"] "--enable-shared",
"CFLAGS=-fPIC",
configure_args.extend(self.version_specific_args()) "CXXFLAGS=-fPIC"]
configure(*configure_args) configure(*configure_args)
make() make()
make("install") make("install")

View File

@ -1,65 +1,63 @@
# FIXME: Add copyright ##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import * from spack import *
class Scalasca(Package):
"""Scalasca is a software tool that supports the performance optimization
of parallel programs by measuring and analyzing their runtime behavior.
The analysis identifies potential performance bottlenecks - in
particular those concerning communication and synchronization - and
offers guidance in exploring their causes."""
# FIXME: add a proper url for your package's homepage here. class Scalasca(Package):
"""
Scalasca is a software tool that supports the performance optimization of parallel programs by measuring and
analyzing their runtime behavior. The analysis identifies potential performance bottlenecks - in particular those
concerning communication and synchronization - and offers guidance in exploring their causes.
"""
homepage = "http://www.scalasca.org" homepage = "http://www.scalasca.org"
url = "http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz" url = "http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz"
version('2.2.2', '2bafce988b0522d18072f7771e491ab9',
url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.2/dist/scalasca-2.2.2.tar.gz')
version('2.1', 'bab9c2b021e51e2ba187feec442b96e6', version('2.1', 'bab9c2b021e51e2ba187feec442b96e6',
url = 'http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz' ) url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz')
depends_on("mpi") depends_on("mpi")
depends_on("otf2@1.4") ##########
depends_on("cube@4.2.3") # Hard-code dependencies for Scalasca according to what stated in the release page
# The OTF2 library path should be detected automatically from SCOREP
backend_user_provided = """\ # SCALASCA 2.2.2
CC=cc depends_on("scorep@1.4:", when='@2.2.2')
CXX=c++ depends_on("cube@4.3:", when='@2.2.2')
F77=f77 # SCALASCA 2.1
FC=f90 depends_on("scorep@1.3", when='@2.1')
CFLAGS=-fPIC depends_on("cube@4.2:", when='@2.1')
CXXFLAGS=-fPIC ##########
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=c++
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
CFLAGS_FOR_BUILD=-fPIC
CXXFLAGS_FOR_BUILD=-fPIC
"""
mpi_user_provided = """\
MPICC=mpicc
MPICXX=mpicxx
MPIF77=mpif77
MPIFC=mpif90
MPI_CFLAGS=-fPIC
MPI_CXXFLAGS=-fPIC
"""
def install(self, spec, prefix): def install(self, spec, prefix):
configure_args = ["--prefix=%s" % prefix, configure_args = ["--prefix=%s" % prefix,
"--with-custom-compilers",
"--with-otf2=%s" % spec['otf2'].prefix.bin,
"--with-cube=%s" % spec['cube'].prefix.bin, "--with-cube=%s" % spec['cube'].prefix.bin,
"--enable-shared"] "--enable-shared"]
configure(*configure_args) configure(*configure_args)
make()
make("install")
# FIXME: Modify the configure line to suit your build system here.
configure("--prefix=%s" % prefix)
# FIXME: Add logic to build and install here
make() make()
make("install") make("install")

View File

@ -28,9 +28,9 @@
class Scorep(Package): class Scorep(Package):
""" """
The Score-P measurement infrastructure is a highly scalable and The Score-P measurement infrastructure is a highly scalable and easy-to-use tool suite for profiling, event
easy-to-use tool suite for profiling, event tracing, and online tracing, and online analysis of HPC applications.
analysis of HPC applications.""" """
homepage = "http://www.vi-hps.org/projects/score-p" homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz" url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz"
@ -55,15 +55,6 @@ class Scorep(Package):
depends_on("mpi") depends_on("mpi")
depends_on("papi") depends_on("papi")
def get_compiler_config_line(self):
backend_user_provided = ['CC=%s' % self.compiler.cc_names[0],
'CXX=%s' % self.compiler.cxx_names[0],
'F77=%s' % self.compiler.f77_names[0] if len(self.compiler.f77_names) else "",
'FC=%s' % self.compiler.fc_names[0] if len(self.compiler.fc_names) else "",
'CFLAGS=-fPIC %s' % self.rpath_args,
'CXXFLAGS=-fPIC %s'% self.rpath_args]
return backend_user_provided
def install(self, spec, prefix): def install(self, spec, prefix):
configure = Executable( join_path(self.stage.source_path, 'configure') ) configure = Executable( join_path(self.stage.source_path, 'configure') )
with working_dir('spack-build', create=True): with working_dir('spack-build', create=True):
@ -73,8 +64,9 @@ def install(self, spec, prefix):
"--with-cube=%s" % spec['cube'].prefix.bin, "--with-cube=%s" % spec['cube'].prefix.bin,
"--with-papi-header=%s" % spec['papi'].prefix.include, "--with-papi-header=%s" % spec['papi'].prefix.include,
"--with-papi-lib=%s" % spec['papi'].prefix.lib, "--with-papi-lib=%s" % spec['papi'].prefix.lib,
"--enable-shared"] "--enable-shared",
configure_args.extend(self.get_compiler_config_line()) "CFLAGS=-fPIC",
"CXXFLAGS=-fPIC"]
configure(*configure_args) configure(*configure_args)
make() make()
make("install") make("install")