MPI 矩阵乘法编译错误:未用代码声明

发布于 2024-07-17 01:09:57 字数 1260 浏览 7 评论 0原文

我编写了一个 mpi 矩阵乘法程序,它使用 scanf("%d", &size) 指定矩阵大小,然后我定义了 int matrix[size*size] ,但是当我编译它时,它报告矩阵未声明。 请告诉我原因,或者我的问题是什么!

根据Ed的建议,我将矩阵定义更改为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");

I coded a mpi matrix multification program, which use scanf("%d", &size), designate matrix size, then I defined int matrix[size*size], but when I complied it, it reported that matrix is undeclared. Please tell me why, or what my problem is!

According Ed's suggestion, I changed the matrix definition to if(myid == 0) block, but got the same err! Now I post my code, please help me find out where I made mistakes! thank you!

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");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一页 2024-07-24 01:09:57

重新格式化的代码会很好...

一个问题是您还没有声明 size 变量。 另一个问题是,声明数组的 [size] 表示法仅适用于编译时已知的大小。 您想使用 malloc() 来代替。

Reformatted code would be nice...

One problem is that you haven't declared the size variable. Another problem is that the [size] notation for declaring arrays is only good for sizes that are known at compile time. You want to use malloc() instead.

旧时浪漫 2024-07-24 01:09:57

如果使用动态内存分配,实际上不需要定义 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));
...

You don't actually need to define a MAX_SIZE if you use dynamic memory allocation.

#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));
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文