SpFFT/1.0.6-cpeGNU-22.08-GPU (SpFFT-1.0.6-cpeGNU-22.08-GPU.eb)
This software is archived in the LUMI-EasyBuild-contrib GitHub repository as easybuild/easyconfigs/__archive__/s/SpFFT/SpFFT-1.0.6-cpeGNU-22.08-GPU.eb. The corresponding module would be SpFFT/1.0.6-cpeGNU-22.08-GPU.
# contributed by Luca Marsella (CSCS)
# adapted for LUMI-G by Peter Larsson
easyblock = 'CMakeMake'
name = 'SpFFT'
version = '1.0.6'
versionsuffix = '-GPU'
homepage = 'https://github.com/eth-cscs/SpFFT'
whatis = [
"SpFFT - A 3D FFT library for sparse frequency domain data written in C++ "
"with support for MPI, OpenMP, CUDA and ROCm. Compiled with ROCm support"
]
description = """
SpFFT - A 3D FFT library for sparse frequency domain data written in C++ with
support for MPI, OpenMP, CUDA and ROCm. Compiled with ROCm support
Inspired by the need of some computational material science applications with
spherical cutoff data in frequency domain, SpFFT provides Fast Fourier
Transformations of sparse frequency domain data. For distributed computations
with MPI, slab decomposition in space domain and pencil decomposition in
frequency domain (sparse data within a pencil / column must be on one rank) is
used.
Design Goals:
- Sparse frequency domain input
- Reuse of pre-allocated memory
- Support for shifted indexing with centered zero-frequency
- Optional parallelization and GPU acceleration
- Unified interface for calculations on CPUs and GPUs
- Support of Complex-To-Real and Real-To-Complex transforms, where the full
hermitian symmetry property is utilized C++, C and Fortran interfaces
"""
docurls = [
'Documentation: https://spfft.readthedocs.io/en/latest/',
]
toolchain = {'name': 'cpeGNU', 'version': '22.08'}
toolchainopts = {'openmp': True, 'opt': True, 'pic': True}
source_urls = ['https://github.com/eth-cscs/%(name)s/archive']
sources = ['v1.0.6.tar.gz']
builddependencies = [
('buildtools', '%(toolchain_version)s', '', True),
('cray-fftw', EXTERNAL_MODULE),
]
# PL not enabling SPFFT_GPU_DIRECT for GPU aware MPI because I think it is only tested with Nvidia?
preconfigopts = "CXX=CC CC=cc FC=ftn && module load craype-accel-amd-gfx90a && module load rocm/5.3.3 &&"
configopts = ' -DCMAKE_BUILD_TYPE=RELEASE -DSPFFT_FFTW_LIB=FFTW -DSPFFT_GPU_BACKEND=ROCM'
configopts += ' -DSPFFT_SINGLE_PRECISION=ON -DSPFFT_MPI=ON -DSPFFT_OMP=ON -DHIP_HCC_FLAGS=\"--amdgpu-target=gfx90a\"'
sanity_check_paths = {
'files': [
'lib/libspfft.so',
'include/%(namelower)s/config.h',
'include/%(namelower)s/%(namelower)s.hpp'
],
'dirs': [],
}
moduleclass = 'lib'