J'utilise FFTW 3.1.2 avec Fortran pour effectuer des FFT réelles à complexes et complexes à réelles. Cela fonctionne parfaitement sur un fil.Multi-thread FFTW 3.1.2 sur un ordinateur à mémoire partagée
Malheureusement, j'ai quelques problèmes lorsque j'utilise le FFTW multi-thread sur un ordinateur à mémoire partagée 32 CPU. J'ai deux plans, un pour 9 FFT réel à complexe et un pour 9 FFT complexe à réel (taille de chaque champ réel: 512 * 512). J'utilise Fortran et je compilent (en utilisant ifort
) mon code reliant aux bibliothèques suivantes:
-lfftw3f_threads -lfftw3f -lm -lguide -lpthread -mp
Le programme semble compiler correctement et la fonction sfftw_init_threads
retourne une valeur entière non nulle, généralement 65527.
Cependant, même si le programme fonctionne parfaitement, il est plus lent avec 2 ou plus de threads qu'avec un. Une commande top
indique une charge CPU étrange supérieure à 100% (et beaucoup plus grande que n_threads * 100). Une commande htop
montre qu'un processeur (disons le numéro 1) fonctionne à 100% de la charge sur le programme, tandis que tous les autres processeurs, y compris numéro 1, travaillent sur ce même programme, à une charge de 0% , 0% de mémoire et 0 TIME.
Si quelqu'un a une idée de ce qui se passe ici ... merci beaucoup!