2017-08-27 5 views
1

Ma question est probablement de nature triviale. J'ai parallélisé un code CFD en utilisant des bibliothèques MPI et maintenant j'essaie d'étudier mon efficacité parallèle. Pour commencer, j'ai créé un cas qui fournirait des charges égales entre les rangs et un ratio constant de volume de calculs sur les données transférées. Ainsi, je m'attendrais à ce que j'augmente les rangs, tout changement d'exécution serait attribué aux retards de communication seulement. Cependant, j'ai réalisé que les sous-programmes qui n'appellent pas la communication de rang (donc ils font seulement des calculs de domaine, donc ils traitent la même charge pour tous les rangs) contribuent significativement - en fait le plus grand temps d'exécution augmente. Qu'est-ce que j'oublie ici? Cela a-t-il même un sens?L'efficacité parallèle diminue de manière incohérente

+2

Probablement le code postal qui reproduit votre problème. Vous pouvez [modifier] dans votre question. –

+0

Si votre application est liée à la mémoire, tous les rangs sur le même socket partageront la même bande passante mémoire. Cela expliquerait une baisse de l'efficacité –

+0

Désolé Cody Gray, mais je ne peux pas partager le code en raison de problème de propriété industrielle – makmarios

Répondre

0

Est-ce que cela a même un sens?

Oui!

Plus vous créez de processus (every process has a rank), plus vous atteignez la limite de capacité de votre système à exécuter des processus de manière réellement parallèle. Votre système (par exemple votre ordinateur) peut exécuter en parallèle un certain nombre de processus, lorsque cette limite est dépassée, puis certains processus attendent d'être exécutés (tous les processus ne s'exécutent donc pas en parallèle), ce qui nuit aux performances. Par exemple, en supposant qu'un ordinateur dispose de 4 cœurs et que vous créez 4 processus, chaque cœur peut exécuter un processus, ce qui nuit à vos performances en cas de communication entre les processus, le cas échéant.

Maintenant, dans le même ordinateur, vous créez 8 processus. Que va-t-il arriver?

4 des processus commenceront à s'exécuter en parallèle, mais les 4 autres attendront pour qu'un noyau soit disponible, afin qu'ils puissent fonctionner aussi. Ce n'est pas une exécution vraiment parallèle (certains processus s'exécuteront de manière linéaire). En outre, en fonction de la politique d'ordonnancement du système d'exploitation, certains processus peuvent être entrelacés, ce qui entraîne une surcharge à chaque commutateur.

+0

Pire encore, ils seront entrelacés, ce qui entraîne des frais généraux à chaque commutateur. –

+0

Ce serait la folie @MadPhysicist. J'ai mis à jour la réponse, l'aimez-vous maintenant? – gsamaras

+1

Fou comment la nature fait dat :-) –