Bonjour,
J'ai une petite question de C qui me turlupine ...
Voila le problème :
j'ai un fichier ascii qui contient une chaine de caractères sur chaque ligne.
Je veux lire le fichier, enregistrer les chaines, compter combien il y en a et les répartir sur plusieurs noeuds avec MPI (il y a un gros traitement à faire par la suite).
Evidemment, je ne connais pas le nombre de ligne (qui peut être assez grand).
En fait, j'ai une solution mais elle me parait assez moche et possiblement couteuse en mémoire et CPU :
je définie un char **, je fixe une taille limite de char par ligne (disons 256) avec un #define et je pose un nombre de lignes par defaut. Je lis le fichier ligne par ligne et lorsque je dépasse mon nombre de ligne par defaut, je realloue le double de lignes (je perds en mémoire mais je m'y retrouve en CPU).
Je me retrouve donc avec un gros tableau 2D dont la fin est vide. J'ai maintenant le nombre de ligne et mon nombre de procs donc je répartir tout ca equitablement : je découpe mon tableau de N lignes en P tableaux de M lignes (P est le nombre de proc et M*P = N (je me suis débrouillé avec la divisibilité)). J'envoie la valeur de M à tous les procs (MPI_Bcast) puis son tableau de taille M à chacun (MPI_Send). Je le récupère avec MPI_Recv.
Le soucis, c'est que je recois un tableau 1D (puisque j'ai envoyé 256*M char à partir de l'adresse du premier élément).
Ce qui fait que je dois recopier mon tableau 1D recu dans un tableau 2D ...
Bon, ca marche mais c'est moche ...
Alors y a t'il un moyen plus malin ?
-----