[C] Multiplication matrice multiprocessus
Fred
-
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
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 ^^.
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 ^^.
A voir également:
- [C] Multiplication matrice multiprocessus
- Application multiplication - Télécharger - Études & Formations
- Diagonale secondaire d'une matrice - Forum C
- Excel vous ne pouvez pas modifier une partie de matrice ✓ - Forum Excel
- Vous ne pouvez pas modifier une partie de matrice - Forum Excel
- Signe multiplication clavier ✓ - Forum Windows
4 réponses
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?
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?
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
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