2009-04-15 6 views
0

J'ai codé un programme de multification de matrice mpi, qui utilise scanf("%d", &size), désigne la taille de la matrice, puis j'ai défini int matrix[size*size], mais quand je l'ai respecté, il a indiqué que la matrice n'est pas déclarée. S'il vous plaît dites-moi pourquoi, ou quel est mon problème!compilateur matriciel MPI compile err: non déclaré avec le code

Selon la suggestion d'Ed, j'ai changé la définition de la matrice en bloc if (myid == 0), mais j'ai eu la même erreur! Maintenant, je poste mon code, s'il vous plaît aidez-moi à savoir où j'ai fait des erreurs! Je vous remercie!

int size; 

int main(int argc, char* argv[]) { 

int myid, numprocs; 
int *p; 
MPI_Status status; 
int i,j,k; 
MPI_Init(&argc, &argv); 
MPI_Comm_rank(MPI_COMM_WORLD,&myid); 
MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 
if(myid == 0) 
{  
    scanf("%d", &size); 
    int matrix1[size*size]; 
    int matrix2[size*size]; 
    int matrix3[size*size]; 
    int section = size/numprocs; 
    int tail = size % numprocs; 
    srand((unsigned)time(NULL)); 
    for(i=0; i<size; i++) 
    for(j=0; j<size; j++) 
     { 
      matrix1[i*size+j]=rand()%9; 
      matrix3[i*size+j]= 0; 
      matrix2[i*size+j]=rand()%9; 
     }    
     printf("Matrix1 is: \n"); 
     for(i=0; i<size; i++) 
     {    
      for(j=0; j<size; j++) 
       { 
        printf("%3d", matrix1[i*size+j]); 
       }  
      printf("\n"); 
     }   
     printf("\n"); 
     printf("Matrix2 is: \n"); 
+0

comment reformater votre code? –

+0

hehe, j'ai essayé, mais la mise en page ne semble pas fonctionner! BTW, j'ai résolu le problème! J'ai essayé un #define MAX_SIZE 500, alors j'utilise juste une partie du tableau^u^ – Johnson

Répondre

0

Code Reformatted serait bien ...

Un problème est que vous n'avez pas déclaré la variable de taille. Un autre problème est que la notation [size] pour déclarer des tableaux n'est bonne que pour les tailles connues à la compilation. Vous voulez utiliser malloc() à la place.

+0

merci, je pense que scanf ("% d", & size) peut fonctionner à l'exécution! J'ai essayé scanf ("% d", &size); int matrice [taille]; avec succès sur mon propre ordinateur, mais sur l'environnement mpi, ça craint! C'est là que j'ai comfused! – Johnson

0

Vous n'avez pas réellement besoin de définir un MAX_SIZE si vous utilisez l'allocation de mémoire dynamique.

#include <stdio.h> 
#include <stdlib.h> 
... 
    scanf("%d", &size); 
    int *matrix1 = (int *) malloc(size*size*sizeof(int)); 
    int *matrix2 = (int *) malloc(size*size*sizeof(int)); 
    int *matrix3 = (int *) malloc(size*size*sizeof(int)); 
... 
Questions connexes