Bonjour à tous,
Voila je vais présenter mon probleme.
J'ai une matrice a inverser, pour résoudre un systeme linéaire, AX=B
X etant un vecteur de taille N, typiquement N est autour de 200
A est une matrice qui est tridiagonale
Ce calcul a l'air des plus simples, mais ce n'est qu'une illusion, à savoir que j'ai en fait jusqu'a plusieurs milliers de systemes comme celui la a resoudre à chaque iteration, et que le calcul du B est assez long on va dire.
Actuellement je suis en version monoproc.
Donc pour résoudre mon systeme j'utilise les algo du Numerical, algo qui dans ce cas sont de complexité O(N)
Le "souci" est que maintenant je veux passer en version parallelle.
Actuellement j'ai "découpé" mon vecteur X en plusieurs sous vecteurs, Xi et
Chaque CPU ayant un domaine Xi. Derniere précision, chaque sous vecteur Xi à des points communs avec ses voisins.
Exemple :
X={X0,X1,X2,X3,X4,X5,X6}
CPU 0 : X={X0,X1,X2,X3}
CPU 1 : X={X3,X4,X5,X6}
J'ai deja les algo pour calculer les Bi en consequences, calculs reduisants au maximum les communications (j'ai juste besoin de transmettre les frontieres)
Je me demandais donc si une personne ici aurait un algo permettant d'eviter les communications interproc pour cette inversion.
La raison étant que le calcul de B est extrement long et que j'ai deja parallélisé ce calcul de maniere
Voir meme, soyons fou, un algo de complexité equivalente a mon algo actuel.
D'ailleur je me demandais ce qui etait le plus rentable entre, un algo de complexité superieure mais ayant un coup de communication nul et un algo plus rapide mais entrainant des communications inter proc. J'aurai tendance à dire, ca depends
Actuellement je m'oriente vers une méthode "barbare" a savoir que chaque CPU renvoie au CPU0 sa partie du domaine, CPU0 qui resoud le systeme et renvoie l'info ensuite...
Voila, toute piste est la bienvenue, merci