2013-07-11 4 views
1

J'ai trouvé que le temps utilisé pour MPI_scatter/MPI_gather augmentait continuellement (en quelque sorte linéairement) à mesure que le nombre de travailleurs augmentait, en particulier lorsque les travailleurs se trouvaient sur des nœuds différents.Comment améliorer la vitesse de MPI_scatter/MPI_gather?

Je pensais que MPI_scatter/MPI_gather est un processus parallèle, et je me demande ce qui conduit à l'augmentation ci-dessus? Y at-il un truc pour le rendre plus rapide, en particulier pour les travailleurs distribuant à travers les nœuds CPU? Le fonctionnement d'un MPI_Scatter/Gather varie selon les implémentations.

+3

Quelle implémentation MPI utilisez-vous? Quelle échelle (nombre de rangs et nombre de nœuds) est le travail? Quelle est l'interconnexion entre les nœuds? Combien de données sont déplacées dans la dispersion/rassemblement? –

+1

Plus important encore, augmentez-vous également la taille des données totales en augmentant le nombre de travailleurs? Si c'est le cas, le goulot d'étranglement sera finalement la bande passante d'E/S du processus racine (probablement le réseau de communication de son nœud). – Zulan

Répondre

1

Le rang racine doit transmettre une quantité fixe de données aux autres rangs. Tant que tous les rangs résident sur le même noeud de traitement, le processus est limité par la bande passante mémoire disponible. Une fois de plus, les nœuds deviennent impliqués, la bande passante du réseau, généralement beaucoup plus faible que la bande passante mémoire, devient le facteur limitant.

Le temps d'envoi d'un message est également divisé en deux parties: la latence initiale (configuration du réseau et protocole MPI) et le temps nécessaire pour transférer physiquement les bits de données réels. Comme la quantité de données est fixe, le temps de transfert physique total reste le même (tant que le type de transport et donc la bande passante restent les mêmes) mais plus de temps d'installation/latence est ajouté avec chaque nouveau rang auquel les données sont dispersées ou recueilli à partir de, donc l'augmentation linéaire du temps qu'il faut pour terminer l'opération.

1

Certaines implémentations MPI peuvent choisir d'utiliser une série de MPI_Send comme mécanisme sous-jacent. Les paramètres qui peuvent affecter le fonctionnement de MPI_Scatter sont: 1. Nombre de processus 2. Taille des données 3. Interconnect Par exemple, une application peut éviter d'utiliser une émission pour très petit nombre de rangs d'envoi/réception de données très grande .

Questions connexes