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.
mpirun
planifie par ordre chronologique tour par tour, ainsi le premier noyau/nœud se verra attribuer ce processus.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.Voir cette page de manuel pour plus d'informations.
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.
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.