Bonjour ;

je souhaite paralléliser une résolution d'un système tridiagonale A*X=B avec la librairie SCALAPACK en utilisant la fonction "PDGTSV"

On doit passer alors à chaque processus une partie de vecteurs 'dl','du' et 'd' de la matrice globale A

(The general tridiagonal matrix A is stored in tridiagonal storage mode in dl, d, and du.)

dans mon code je me sens obligé de passer un nombre d’éléments aux processus de rang 0 et de rang ( nb_procs-1) supérieur à ceux des autres processus . ce qui n'est pas possible en SCALAPACK je pense

par exemple si

dl=(1, 5 , -6 , 6, 8, 8 , 9, -14 , 5 , 0 , 3.5 , 11 , 66 , -4 , 7 , 9, 10, 33)

Et que j’ai :

le processus 0 a accès à la partie (1, 5 , -6 , 6, 8) ----> 5 éléments
le processus 1 a accès à la partie (8 , 9, -14 , 5) ----> 4 éléments
le processus 2 a accès à la partie (0 , 3.5 , 11 , 66) ----> 4 éléments
le processus 3 a accès à la partie (-4 , 7 , 9, 10, 33) : ----> 5 éléments

comment on peut distribuer ce vecteur de cette façon ?

Si j'utilise des blocs de taille 5 les processus de rang 1 et 2 n'ont accès qu’aux 4 éléments (ils n’ont pas accès à un cinquième) !

Si j'utilise des blocs de taille 4 les processus de rang 0 et 3 doivent contenir 4 éléments et je ne sais pas comment il faut faire pour distribuer les autres éléments de +

Dans SCALAPACK , la taille des blocs est fixé une fois pour toute et a la même valeur pour toutes les processus.

Merci