web-dev-qa-db-fra.com

mpirun -np N, que se passe-t-il si N est plus grand que mon nombre de base?

Disons que j'ai un poste de travail à 4 cœurs, que ferait Linux (Ubuntu) si j'exécutais

mpirun -np 9 XXX

Q1. Est-ce que 9 va courir immédiatement ensemble, ou ils vont courir 4 après 4?

Q2. Je suppose que l’utilisation de 9 n’est pas bonne, parce que le reste 1, l’ordinateur sera confus (je ne sais pas si ça va être confus du tout, ou la "tête" de l’ordinateur décidera quel noyau parmi les 4 noyaux seront utilisés?) Ou il sera choisi au hasard. Qui décide quel noyau appeler?

Q3. Si je sens que mon cpu n'est pas mauvais et que mon bélier est correct et assez grand, mon cas n'est pas très gros. Est-ce une bonne idée pour utiliser pleinement mon unité centrale et mon bélier, que je mpirun -np 8 XXX, ou même mpirun -np 12 XXX.

Q4. Qui décide de toutes ces optimisations d'efficacité, Ubuntu, Linux, ou les cartes mères ou les processeurs?

Votre illumination serait vraiment appréciée.

5
Daniel
  1. 9 se dérouleront simultanément.
  2. Il n'y a pas de confusion pour le processus restant; mpirun planifie par ordre chronologique tour par tour, ainsi le premier noyau/nœud se verra attribuer ce processus.
  3. Vous pouvez certainement augmenter np au-delà du nombre de cœurs/nœuds physiques disponibles. Le compromis est que la surcharge augmente avec un plus grand nombre de processus que de cœurs/nœuds. Si votre code n'est pas étroitement lié au processeur (par exemple, nécessite un temps d'attente important de IO), vous devriez le faire. En fin de compte, vous ne savez pas si ce sera plus rapide jusqu'à ce que vous essayiez.
  4. MPI effectue la planification initiale, mais pour plus d'un processus par nœud, ou plus généralement (puisqu'il existe également un certain nombre d'autres processus exécutés en arrière-plan), le planificateur de noyau Linux prend le relais.

Voir cette page de manuel pour plus d'informations.

4
ish

Oui, vous devez modifier le code de manière significative pour le passer d'une application MPI à une application OpenMP ou TBB. Si votre application a déjà été développée, essayez-la et effectuez des mesures de performance avant de prendre des mesures aussi radicales.

0
Justin

9 immédiatement.

Sinon, la taille de l'univers sera incorrecte. Tous les processus doivent exister en même temps ou ne seront pas visibles pour les autres instances.

Si la mémoire de votre instance est trop importante, vous pouvez arrêter manuellement les 5 autres processus jusqu'à ce que les 4 autres aient terminé.

Cependant, si vous utilisez MPI de cette manière (uniquement pour votre ordinateur local), laissez-moi vous recommander OpenMP/tbb à la place. MPI est vraiment conçu pour distribuer l'application sur plusieurs ordinateurs du réseau ou nœuds de cluster.

0
polo