Skip to content

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

Edited by Matthieu Boileau
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information