2009-04-15 3 views
0

scanf("%d", &size)을 사용하고 행렬 크기를 지정하는 mpi 행렬 다중화 프로그램을 코딩 한 다음 int matrix[size*size]을 정의했지만이를 준수하면 행렬이 선언되지 않습니다. 왜, 또는 내 문제가 뭔지 말해주세요!MPI 행렬 다중화 컴파일 오류 : 코드로 선언하지 않았습니다.

에드의 제안에 따르면 매트릭스 정의를 if (myid == 0) 블록으로 변경했지만 동일한 오류가 발생했습니다! 이제 코드를 게시하고 실수를 저지른 곳을 찾도록 도와주세요! 고맙습니다!

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

코드를 다시 포맷하는 방법은 무엇입니까? –

+0

hehe, 시도했지만 레이아웃이 작동하지 않는 것 같습니다! 나는 그 문제를 너무 멍하게 생각했다. #define MAX_SIZE 500을 시도한 다음 배열의 일부만 사용했습니다.^u^ – Johnson

답변

0

포맷 코드는

하나의 문제는 크기 변수를 선언하지 않은 것입니다 ... 좋은 것입니다. 또 다른 문제점은 배열 선언을위한 [크기] 표기법이 컴파일 타임에 알려진 크기에만 적합하다는 것입니다. 대신 malloc()을 사용하고 싶습니다.

+0

감사합니다. scanf ("% d", & size)는 런타임에 작동 할 수 있다고 생각합니다. scanf ("% d", &size); int matrix [size]; 내 컴퓨터에서 성공적으로 시도했지만 mpi 환경에서는 문제가 생겼습니다! – Johnson

0

동적 메모리 할당을 사용하는 경우 실제로 MAX_SIZE를 정의 할 필요가 없습니다.

#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)); 
...