2016-12-17 1 views
0

Je compare un programme MPI avec différentes configurations de compilateur.Utilisation de l'utilitaire de temps de Linux pour mesurer les performances du programme MPI

En ce moment, j'utilise Linux de time pour le faire:

$> $(which time) mpirun -v [executable] 

Les valeurs que je reçois ok regarder en termes de ce que je pensais.

Y a-t-il des raisons pour lesquelles je devrais pas utiliser time pour cela? La mesure du temps CPU nécessaire est ici d'un intérêt majeur. Je suis conscient que l'analyse comparative sur une seule machine ne va pas nécessairement être cohérente avec ce qui se passe sur un cluster, mais c'est hors de portée.

Répondre

1

Vous devez et non d'utiliser time dans le but d'obtenir le temps CPU d'un programme MPI.

Tout d'abord, cela ne va pas fonctionner dans une configuration distribuée. Maintenant, votre question n'est pas claire si vous ciblez un seul nœud ou un cluster, mais cela n'a même pas d'importance. Une implémentation MPI peut utiliser n'importe quel mécanisme pour le lancement même sur un seul nœud. Ainsi, le temps peut inclure ou non le temps CPU des processus d'application réels.

Mais il y a plus de problèmes de conception: que signifie le temps CPU pour un programme MPI? Ce serait la somme du temps CPU de tous les processus. C'est une mauvaise métrique pour l'analyse comparative: elle ne quantifie pas l'amélioration et elle n'est pas corrélée à l'exécution globale. Par exemple, une version très déséquilibrée de votre code peut utiliser moins de temps processeur, mais plus de temps au mur qu'un temps équilibré. Ou activer l'attente occupée au lieu de bloquer peut améliorer le temps d'exécution global, mais aussi augmenter le temps CPU utilisé. Pour vraiment comprendre ce qui se passe, et quel processus utilise ce type de ressources, vous devez recourir à un proper parallel performance analysis tool.

En HPC, vous n'allez pas être budgétisé par le temps CPU mais plutôt par le temps réservé aux processeurs * walltime. Donc, si vous devez utiliser une métrique à une dimension, alors walltime est le chemin à parcourir. Maintenant, vous pouvez utiliser time mpirun ... pour obtenir cela, bien que la précision ne sera pas grande pour les applications à court terme.

+0

merci pour votre réponse détaillée! J'ai très peu d'expérience dans ce domaine, donc c'est très apprécié! – j2L4e