ludvigak / FINUFFT.jl

Julia interface to the nonuniform FFT library FINUFFT
Other
33 stars 9 forks source link

Thread-safety #28

Closed jkrimmer closed 3 years ago

jkrimmer commented 3 years ago

Although the finufft_jll is built with thread-safety in mind, we still have to call one of the nufft-methods once before running multiple threads each requiring the library to prevent a segfault. I guess this issue could be fixed by calling the finufft library once while the package is loaded. But maybe there is a more elegant option to fix this problem?

MWE leading to a segfault:

julia> using FINUFFT

julia> x = rand(100); c = rand(ComplexF64,100);

julia> Threads.@threads for k in 1:8
       nufft1d1(x, c, -1, 1e-10, 100);
       end

Please submit a bug report with steps to reproduce this fault, and any error messages that follow (in their entirety). Thanks.
Exception: EXCEPTION_ACCESS_VIOLATION at 0x70684b68 -- search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
in expression starting at REPL[3]:1
search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
fftw_mkplan_d at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
fftw_mkplan_d at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
fftw_mkplan_d at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
fftw_mkplan_d at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
search0.isra.13 at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
mkplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
.text at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
fftw_mkapiplan at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
.text at C:\Users\mv6955\.julia\artifacts\bf7c8150c03037fb2fa33ec629071e4d377e422a\bin\libfftw3-3.dll (unknown line)
finufft_makeplan at C:\Users\mv6955\.julia\artifacts\8dcc8b4f6e304280280e5a86a98dfd610a9216bf\bin\libfinufft.dll (unknown line)
finufft1d1 at C:\Users\mv6955\.julia\artifacts\8dcc8b4f6e304280280e5a86a98dfd610a9216bf\bin\libfinufft.dll (unknown line)
nufft1d1! at C:\Users\mv6955\.julia\packages\FINUFFT\EEFSZ\src\FINUFFT.jl:506
nufft1d1 at C:\Users\mv6955\.julia\packages\FINUFFT\EEFSZ\src\FINUFFT.jl:256 [inlined]
nufft1d1 at C:\Users\mv6955\.julia\packages\FINUFFT\EEFSZ\src\FINUFFT.jl:255
unknown function (ip: 000000001f81dba9)
macro expansion at .\REPL[3]:2 [inlined]
#2#threadsfor_fun at .\threadingconstructs.jl:81
#2#threadsfor_fun at .\threadingconstructs.jl:48
unknown function (ip: 000000001f81d1a3)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1690 [inlined]
start_task at /cygdrive/c/buildbot/worker/package_win64/build/src\task.c:705
Allocations: 775621 (Pool: 775360; Big: 261); GC: 1

This behavior is not related to Windows 10 and can also be reproduced on Fedora.