La signification de $ time lors de l'utilisation du traitement parallèle sur un cluster scientifique?

Je dirige mon programme de différences finies sur un groupe scientifique de mon école. Le programme utilise openmpi pour paralléliser le code.

Quand le programme en série je reçois:

real    78m40.592s
user    78m34.920s
sys     0m0.999s

Quand je l'utilise avec des processeurs de 8 mpi, j'ai:

real    12m45.929s
user    101m9.271s
sys     0m29.735s

Quand je l'exécute avec des processeurs 16 mpi, j'ai:

real    4m46.936s
user    37m30.000s
sys     0m1.150s

Donc, ma question est la suivante: si l'heure de l'utilisateur est le temps CPU total, alors pourquoi les heures de l'utilisateur sont si différentes les unes des autres pour différents nombres de processeurs?

Merci,

Anthony G.

2
Voir les réponses ici: stackoverflow.com/questions/20094547/& hellip; Pour les programmes MPI, utilisez mpi_wtime()
ajouté l'auteur High Performance Mark, source

2 Réponses

En série, votre code s'exécute en 78m40s et real et user sont presque identiques.

Lorsque vous exécutez avec 8 processus, que je suppose que tous s'exécutent sur la même machine (noeud), le temps total de processeur est 101m9. Il est beaucoup plus grand, je suppose que vous avez rencontré soit une surcharge du nœud ou une surconsommation de mémoire. Mais comme vous utilisez 8 cœurs, le temps total de l'horloge murale est 101m9/8 = 12m45. Vous pourriez essayer de relancer ce test et observer ce qui se passe.

Lorsque vous exécutez 16 processus, que je supposerais être distribués sur deux nœuds, le temps réel est de 4m46, soit environ 78m40/16. Mais le temps réel est le temps CPU cumulé de tous les traitements en cours sur le même noeud que mpirun ; la commande time n'a aucun moyen de connaître les processus mpi s'exécutant sur d'autres nœuds; 37m30 est d'environ 78m40/2.

3
ajouté
Je n'ai pas réalisé que l'heure de l'utilisateur était juste pour un noeud. Votre réponse a été vraiment utile. J'ai re-couru une partie de mon code et le (temps d'utilisateur) * (# noeuds) est arrivé à peu près le même pour toutes les configurations de processeur.
ajouté l'auteur Anthony, source
J'ai écrit ce que je pensais des résultats dans mon rapport. Lien vers le rapport
ajouté l'auteur Anthony, source
"Il est beaucoup plus grand, je suppose que vous avez rencontré soit une surcharge du nœud ou une surconsommation de mémoire." Je dirais qu'il a plutôt rencontré Loi d'Amdahl .
ajouté l'auteur Hristo Iliev, source
@HristoIliev c'est ce que je pensais au début mais ensuite j'ai vu le deuxième exemple avec 16 échelles de coeurs presque parfaitement, donc ça devrait aussi évoluer avec 8 procs. Et OP confirme de nouveaux temps plus proches de la mise à l'échelle linéaire qu'initialement rapporté (voir commentaire ci-dessus).
ajouté l'auteur damienfrancois, source

Il y a généralement deux notions différentes de temps sur un système informatique.

  1. Heure de l'horloge murale (appelons-la T): C'est l'heure qui se passe sur votre montre lorsque votre programme est en cours d'exécution.
  2. Temps processeur (appelons-le C): c'est le temps cumulé que tous les processeurs travaillant sur votre programme ont passé à exécuter votre code.

Pour un code parallèle idéal s'exécutant sur les processeurs P, T = C/P. Cela signifie que si vous exécutez le code sur huit processeurs, le code est huit fois plus rapide, mais le travail a été distribué à huit processeurs, qui doivent tous s'exécuter pendant C/P secondes/minutes.

In reality, there's often overhead in the execution. With MPI, you've got communication overhead. This usually cause a situation where T>C/P. The higher T becomes, the less efficient the parallel code is.

Un système d'exploitation comme Linux peut vous dire plus de choses que l'heure de l'horloge murale. Il signale généralement l'heure de l'utilisateur et du système. L'heure de l'utilisateur est l'heure du processeur (pas exactement, mais la fermeture raisonnable pour l'instant) que l'application passe dans votre code. L'heure du système est l'heure du noyau Linux.

À votre santé,         -Michael

2
ajouté