Ich versuche, eine Beschleunigung für eine Python-Implementierung zu bekommen, die ich vor einiger Zeit geschrieben habe und entschied mich dafür, f2py zu verwenden. Ich teste gerade einige Sachen und denke, dass ich Hilfe brauche, damit FFTW3 funktioniert. Für einen ersten Test, schrieb ich die folgenden Subroutinen:Wie verlinke ich mit FFTW3 in f2py?
subroutine initFFT(planF, a, res, n)
implicit none
include "fftw3.f"
integer, INTENT(IN) :: n
complex(KIND=8), dimension(n) :: a, res
integer(KIND=8), intent(OUT) :: planF
call dfftw_plan_dft(planF, 1, n, a, res, FFTW_FORWARD, FFTW_MEASURE)
end subroutine initFFT
subroutine operation(a, res, n, planF)
implicit none
INCLUDE 'fftw3.f'
integer :: n
integer(KIND=8) :: planF
complex(KIND=8), dimension(n), intent(IN) :: a
complex(KIND=8), dimension(n), intent(OUT) :: res
call dfftw_execute_dft(planF, a, res)
end subroutine operation
Getestet habe ich diese mit einem einfachen Hauptprogramm
program test
implicit none
integer, parameter :: n = 3
integer(KIND=8) :: planF
complex(KIND=8), dimension(n) :: res, a
call initFFT(planF, a, res, n)
a = (/ 1., 1., 1./)
call operation(a, res, n, planF)
end program test
und kompiliert mit
gfortran -o ftest myFun.f90 -L/usr/lib -lfftw3 -I/usr/include
Alles funktionierte und korrekte Ergebnisse zurückgegeben. Jetzt habe ich versucht, dies in der folgenden Art und Weise mit f2py zu verwenden:
f2py -c myFun.f90 -m modf --f90flags="-L/usr/lib -lfftw3 -I/usr/include"
Das Problem ist, dass ich die folgende Fehlermeldung erhalten, wenn ich versuche, das erstellte Modul in Python (mit Import modf) zu importieren:
Import Error: modf.so undefined symbol: dfftw_execute_dft_
Ich habe schon einige Zeit mit Google verbracht, aber irgendwie habe ich noch nichts Nützliches gefunden. Hat jemand eine Idee, wie man das löst?
BTW die dfftw * Verfahren für 'Doppel precision' Argumente definiert sind. Die hässliche "Art = 8" ist nicht garantiert kompatibel damit. –
Danke, ja in der Produktion Code Ich habe es als 'Double Precision' - immer noch an das" alte "Format obwohl .. – rammelmueller