Skip to content

[SpFFT] [package list]

SpFFT/1.1.0-cpeGNU-24.03-rocm (SpFFT-1.1.0-cpeGNU-24.03-rocm.eb)

Install with the EasyBuild-user module:

eb SpFFT-1.1.0-cpeGNU-24.03-rocm.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.1.0-cpeGNU-24.03-rocm.

EasyConfig:

# contributed by Luca Marsella (CSCS)
# adapted for LUMI-G by Peter Larsson
# Updated to version 1.0.6 by Radim Janalik (CSCS)

easyblock = 'CMakeMake'

name = 'SpFFT'
version = '1.1.0'
versionsuffix = '-rocm'

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': '24.03'}
toolchainopts = {'openmp': True, 'opt': True, 'pic': True}

source_urls = ['https://github.com/eth-cscs/%(name)s/archive']
sources = ['v%(version)s.tar.gz']
checksums = ['d4673b3135aebfa1c440723226fe976d518ff881285b3d4787f1aa8210eac81e']

builddependencies = [
    ('buildtools', '%(toolchain_version)s', '', True),
]

dependencies = [
    ('rocm',      EXTERNAL_MODULE),
    ('cray-fftw', EXTERNAL_MODULE),
]

configopts = ' '.join([
    '-DSPFFT_FFTW_LIB=FFTW',
    '-DSPFFT_GPU_BACKEND=ROCM',
    '-DSPFFT_SINGLE_PRECISION=ON',
    '-DSPFFT_MPI=ON',
    '-DSPFFT_OMP=ON',
    '-DHIP_HCC_FLAGS="--offload-arch=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]