performances numpy and FFTW
Bonjour,
J'essaie de scaler du code python (python2.7 ou python3 de manière indifférenciée), qui utilise deux sortes de routines numpy
- la multiplication d'arrays "point par point" (ie l'array C[i,j]=A[i,j]B[i,j])
- la transformée de Fourier discrète.
Sur ma machine, numpy est compilée contre OpenBlas, et ces taches se font en multiprocessing de manière transparente.
Sur le cluster, par contre, meme la fft n'utilise qu'un coeur.
Un autre paquet python qui fait de la fft en multiprocessing est FFTW. J'ai donc décidé de comparer les performances.
Voilà les temps de calcul pour la meme entrée, une array 2D d'environ 6.5M d'entrées complex64
numpy.fft.fft2: 1.631 secs.
scipy.fftpack.fft2: 1.161 secs.
pyfftw.interfaces.scipy_fftpack.fft2: 28.119 secs.
pyfftw.interfaces.numpy_fft.fft2: 28.808 secs.
pyfftw.FFTW: 28.128 secs.
pyfftw.builders: 27.078 secs.
J'observe les memes différences de performance en complex128.
Je peux monitorer l'exécution: numpy et scipy n'utilisent qu'un coeur. Les routines pyfftw utilisent plusieurs coeurs (j'ai laissé jusque 10 coeurs)... mais sont beaucoup plus lentes.
Pourquoi les routines numpy n'utilisent-elles qu'un coeur ?
Pourquoi pyfftw est-il si lent ?
Alix