Skip to content

[SpFFT] [package list]

SpFFT/1.0.6-cpeGNU-23.09-GPU (SpFFT-1.0.6-cpeGNU-23.09-GPU.eb)

Install with the EasyBuild-user module:

eb SpFFT-1.0.6-cpeGNU-23.09-GPU.eb -r
To access module help after installation and get reminded for which stacks and partitions the module is installed, use module spider SpFFT/1.0.6-cpeGNU-23.09-GPU.

EasyConfig:

# contributed by Luca Marsella (CSCS)
# adapted for LUMI-G by Peter Larsson
# Bump to the latest version and CPE version by Radim Janalik (CSCS)

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': '23.09'}
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.2.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'

[SpFFT] [package list]