Rewrite the implementation to be thread safe.
Backends
clFFT
The library is thread safe. link
FFTW3
Only fftw_execute_* functions are thread safe. All other functions should be guarded with a global mutex. link
cuFFT
The library is thread safe. link
Intel MKL
The library is thread safe. link
hipFFT
Probably thread safe, the docs do not specify, however there are some git commits refering thread safety.
PocketFFT
Thread safe, the only part that could potentially not be thread safe, could be the cache, but we do not use it.
rocFFT
Probably thread safe, the docs do not specify, however there are some git commits refering thread safety.
vkFFT
"VkFFT should be thread-safe, apart from the locale changes in sprintf, where you have to manage locale from outside VkFFT on multithreaded systems." - Tolmachev Dmitrii, link
GPU Backends
CUDA
The library is thread safe. link
HIP
It probably is thread safe as it copies the behaviour of CUDA.
OpenCL
The library is thread safe. link
Multi-process backends
MPI
We can find out at runtime by MPI_Query_thread. link
Rewrite the implementation to be thread safe.
Backends
clFFTThe library is thread safe. link
FFTW3Only
fftw_execute_*functions are thread safe. All other functions should be guarded with a global mutex. linkcuFFTThe library is thread safe. link
Intel MKLThe library is thread safe. link
hipFFTProbably thread safe, the docs do not specify, however there are some git commits refering thread safety.
PocketFFTThread safe, the only part that could potentially not be thread safe, could be the cache, but we do not use it.
rocFFTProbably thread safe, the docs do not specify, however there are some git commits refering thread safety.
vkFFT"VkFFT should be thread-safe, apart from the locale changes in sprintf, where you have to manage locale from outside VkFFT on multithreaded systems." - Tolmachev Dmitrii, link
GPU Backends
CUDAThe library is thread safe. link
HIPIt probably is thread safe as it copies the behaviour of CUDA.
OpenCLThe library is thread safe. link
Multi-process backends
MPIWe can find out at runtime by
MPI_Query_thread. link