NVSHMEM and cuFFTMp

Usage

cuFFTMp is based on NVSHMEM. However, the user is not allowed to link and use NVSHMEM in its own application. This may cause crashes at application start time. This limitation will be lifted in a future release of cuFFTMp.

However, some functionalities of cuFFTMp require NVSHMEM-allocated memory. cuFFT then re-exposes a few NVSHMEM functions. Those functions exist but are not defined in the cuFFT headers.

The user interested in using those functions can define them directly, e.g., by doing

extern "C" cufftResult _cufftMpNvshmemMalloc(size_t size, void **buff);

extern "C" cufftResult _cufftMpNvshmemFree(void *buff);

The use of those functions require at least one cuFFTMp plan to be created prior to their usage and to not have been destroyed yet.

Compatibility

cuFFTMp requires all the NVSHMEM libraries to be available on the system at runtime. For instance, assume that NVSHMEM is located in /opt/nvidia/nvshmem. Then the user should define

export LD_LIBRARY_PATH="/opt/nvidia/nvshmem/lib:$LD_LIBRARY_PATH"

in the environment prior to using cuFFTMp.

Furthermore, cuFFTMp requires a specific version of NVSHMEM to be installed on the system. == indicates that an exact match is required. >=, <= indicates compatibility with a range of versions.

cuFFTMp

NVSHMEM

10.8.1 (HPC-SDK 22.5, 22.7)

>= 2.5.0, <= 2.6.0

0.0.2 (HPC-SDK 22.3)

== 2.4.1

Note that the versions of cuFFTMp and NVSHMEM included in HPC-SDK are compatible with each other.