[C] Multiplication matrice multiprocessus

Fermé
Fred - 28 mars 2006 à 21:51
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 4 janv. 2008 à 22:08
Bonsoir tout le monde.

J'ai un petit problème en C. Je dois créer un programme qui effectue la multiplication de deux matrices d'entiers, en utilisant plusieurs processus.
Voici le code source :

Dans le fichier Matrice.h :

typedef struct Matrice{
int nbLignes, nbColonnes;
int **matrice;
}Matrice;

**********************

Dans le fichier Matrice.c :

Matrice* Matrice_creation(int nbL, int nbC){

int i;

Matrice* tmp=(Matrice*)malloc(sizeof(Matrice));
tmp->nbLignes=nbL;
tmp->nbColonnes=nbC;
tmp->matrice=(int**)malloc(sizeof(int*)*nbL);
for(i=0;i<nbL;i++){
tmp->matrice[i]=(int*)malloc(sizeof(int)*nbC);
}
return tmp;


}

void calcul_ligne(Matrice* M1, Matrice* M2, Matrice* result, int i){
int x,y;
for(x=0;x<M2->nbLignes;x++){
for(y=0;y<M1->nbColonnes;y++){
result->matrice[i][y]+=M1->matrice[i][y]*M2->matrice[x][i];
}
}
}


*************************

Dans le fichier main.c :

(Je passe sur les fonctions de remplissage des deux matrices, qui fonctionnent bien)

int nbC1; //nombre de colonnes de la matrice 1
int nbL1; //nombre de lignes de la matrice 1
int nbC2;
int nbL2;
int i, j;
int diag;

Matrice *M1=Matrice_creation(nbL1,nbC1);
Matrice *M2=Matrice_creation(nbL1,nbC1);
Matrice *M3=Matrice_creation(nbL1,nbC1);

/* Je crée autant de processus que de lignes dans
la matrice résultat (M3). Chaque processus calcule
une ligne de la matrice */

for(i=0; i<nbL1; i++){
diag=fork();
if(diag<0)
perror("fork");
else
if(diag==0){
calcul_ligne(M1,M2,M3,i);
exit(0);
}
}

/* J'attend que tous les fils terminent leurs calculs */

for(i=0;i<nbL1;i++){
diag=wait(0);
if(diag<0)
perror("wait");
}


*********************************************************

Bon alors tout ceci se compile très bien, le problème c'est que la matrice résultat n'est constituée que de zéros au final. C'est comme si les fils faisaient bien leur travail, mais que cela n'avait aucune incidence sur la matrice M3.
Si quelqu'un voit de quoi cela peut provenir...

Merci d'avance ^^.

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
31 mars 2006 à 17:18
Salut.
J'ai peur de dire une connerie sur le fork(), mais il me semble qu'il ne garde partage pas les donnée. Donc quand un processus modifie M3, ça ne change pas M3 de l'autre processus.
Sinon, as-tu vérifier sans fork que ton programme fonctionnai correctement?
0
salut;
je veux quelqu'un qui m'aide a faire un programe qui:
_ saisit deux matrices de réels
_verifie s'elles sont différentes
_ calcul et affiche leur produit
_ retourne le maximum de la matrice produit
svp aidez moiiiiiiiiiiiiiiiiiiiiiiiii...
merci d'anvance
0
bonjour;
je veux quelqu'un qui m'aide a faire un programe qui:
_ saisit deux matrices de réels
_verifie s'elles sont différentes
_ calcul et affiche leur produit
_ retourne le maximum de la matrice produit
svp aidez moiiiiiiiiiiiiiiiiiiiiiiiii...
merci d'anvance
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
4 janv. 2008 à 22:08
va voir ici
0