likwid: Add variant for Nvidia GPU profiling feature (#20337)
This commit is contained in:
parent
f0b7be8263
commit
8fd4719291
@ -35,14 +35,17 @@ class Likwid(Package):
|
||||
patch('https://github.com/RRZE-HPC/likwid/commit/d2d0ef333b5e0997d7c80fc6ac1a473b5e47d084.patch', sha256='636cbf40669261fdb36379d67253be2b731cfa7b6d610d232767d72fbdf08bc0', when='@4.3.4')
|
||||
patch('https://github.com/RRZE-HPC/likwid/files/5341379/likwid-lua5.1.patch.txt', sha256='bc56253c1e3436b5ba7bf4c5533d0391206900c8663c008f771a16376975e416', when='@5.0.2^lua@5.1')
|
||||
variant('fortran', default=True, description='with fortran interface')
|
||||
variant('cuda', default=False, description='with Nvidia GPU profiling support')
|
||||
|
||||
# NOTE: There is no way to use an externally provided hwloc with Likwid.
|
||||
# The reason is that the internal hwloc is patched to contain extra
|
||||
# functionality and functions are prefixed with "likwid_".
|
||||
# Note: extra functionality was included in upstream hwloc
|
||||
|
||||
depends_on('lua', when='@:4')
|
||||
depends_on('lua@5.2:', when='@5:5.0.1')
|
||||
depends_on('lua', when='@5.0.2:')
|
||||
depends_on('cuda', when='@5: +cuda')
|
||||
|
||||
# TODO: check
|
||||
# depends_on('gnuplot', type='run')
|
||||
@ -56,6 +59,13 @@ def patch(self):
|
||||
filter_file('^#!/usr/bin/perl -w', '#!/usr/bin/env perl', *files)
|
||||
filter_file('^#!/usr/bin/perl', '#!/usr/bin/env perl', *files)
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
if "+cuda" in self.spec:
|
||||
libs = find_libraries('libcupti', root=self.spec['cuda'].prefix,
|
||||
shared=True, recursive=True)
|
||||
for lib in libs.directories:
|
||||
env.append_path('LD_LIBRARY_PATH', lib)
|
||||
|
||||
@run_before('install')
|
||||
def filter_sbang(self):
|
||||
# Filter sbang before install so Spack's sbang hook can fix it up
|
||||
@ -107,15 +117,35 @@ def install(self, spec, prefix):
|
||||
'FORTRAN_INTERFACE = true',
|
||||
'config.mk')
|
||||
if self.compiler.name == 'gcc':
|
||||
filter_file('ifort', 'gfortran',
|
||||
join_path('make', 'include_GCC.mk'))
|
||||
filter_file('-module', '-I', join_path('make',
|
||||
'include_GCC.mk'))
|
||||
makepath = join_path('make', 'include_GCC.mk')
|
||||
filter_file('ifort', 'gfortran', makepath)
|
||||
filter_file('-module', '-I', makepath)
|
||||
else:
|
||||
filter_file('^FORTRAN_INTERFACE .*',
|
||||
'FORTRAN_INTERFACE = false',
|
||||
'config.mk')
|
||||
|
||||
if "+cuda" in self.spec:
|
||||
filter_file('^NVIDIA_INTERFACE.*',
|
||||
'NVIDIA_INTERFACE = true',
|
||||
'config.mk')
|
||||
filter_file('^BUILDAPPDAEMON.*',
|
||||
'BUILDAPPDAEMON = true',
|
||||
'config.mk')
|
||||
cudainc = spec['cuda'].prefix.include
|
||||
filter_file('^CUDAINCLUDE.*',
|
||||
'CUDAINCLUDE = {0}'.format(cudainc),
|
||||
'config.mk')
|
||||
cuptihead = HeaderList(find(spec['cuda'].prefix, 'cupti.h',
|
||||
recursive=True))
|
||||
filter_file('^CUPTIINCLUDE.*',
|
||||
'CUPTIINCLUDE = {0}'.format(cuptihead.directories[0]),
|
||||
'config.mk')
|
||||
else:
|
||||
filter_file('^NVIDIA_INTERFACE.*',
|
||||
'NVIDIA_INTERFACE = false',
|
||||
'config.mk')
|
||||
|
||||
if spec.satisfies('^lua'):
|
||||
filter_file('^#LUA_INCLUDE_DIR.*',
|
||||
'LUA_INCLUDE_DIR = {0}'.format(
|
||||
|
Loading…
Reference in New Issue
Block a user