mikeash.com: just this guy, you know?

next up previous contents
Next: Bibliography Up: Directions futures Previous: Schémas de calcul dans   Contents

Communication asynchrone

Dans l'analyse traditionnelle des applications parallèles, on considère que la communication est une étape séparée de la phase de calcul, cependant le processeur ne fait rien sauf gérer la communication. Mais il est normalement possible de communiquer et calculer au même temps quand on peut faire le calcul sur les données qui ont été déjà communiquées avant.

Dans la simulation de fluide, il y a beaucoup d'opportunités pour ce genre d'optimisation. Par exemple, dans l'étape de simulation il y a trois appels successifs à la fonction de advect sur trois ensembles de données indépendants. On pourrait alors communiquer les résultats d'un appel a cette fonction pendant que l'appel suivant fait son calcul. Si la communication est plus rapide que le calcul, on a effectivement enlevé deux phases de communication par étape de simulation. Sinon, on a effectivement enlevé deux étapes de calcul. Les autres possibilités sont la dernière communication dans la fonction de lin_solve et la dernière communication dans project. La gestion de ces communications deviendrait beaucoup plus difficile. Il faudrait analyser toutes les dépendances entre les calculs et insérer du code qui bloque l'exécution jusqu'à la fin de la communication, à chaque endroit où la communication asynchrone est utilisée. La vitesse de la simulation est très limitée par la communication, alors la possibilité de la réduire est prometteuse.

L'envoi des données au noeuds de rendu est aussi prometteuse. Les noeuds de fluide envoient les données de densité qui sont calculées à la fin de l'étape de simulation, et qui ne sont pas touchées ailleurs. Alors changer cette communication en communication asynchrone laisserait presque tout le temps d'une étape de simulation, pour transmettre ces données, et il est fort probable que cette communication deviendrait effectivement gratuite.

Le module de rendu est moins limité par le calcul. Il serait possible de décaler le rendu en introduisant une latence d'une étape d'affichage. Alors quand le rendu termine, il y aurait déjà une autre matrice prête pour commencer la prochaine étape de rendu, qui pourrait se dérouler pendant l'envoi des résultats de l'étape précédent.


next up previous contents
Next: Bibliography Up: Directions futures Previous: Schémas de calcul dans   Contents
Michael Ash 2005-09-21

Hosted at DigitalOcean.