找不到 mpi 函数声明和定义的正确位置

could not find right place for mpi function declaration and definition

我喜欢用广播的方式实现一个MPI程序。我从教科书上找到了一些广播方法的代码块,并尝试修改我的 this code.

#include <stdio.h>
#include <math.h>
#include<mpi.h>
double sum(int n);

int main(void){

      double local_sum, total_sum;
      int source;
      int local_n;

      MPI_Init(NULL,NULL);
      MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
      MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);

      void Get_input(int my_rank, int comm_sz, int *n){
              if(my_rank==0){
                    printf("Enter the value for n:");
                    scanf("%d",n);
           }
      MPI_Bcast(n,1,MPI_INT,0,MPI_COMM_WORLD);
 }
 local_n= n/comm_sz;
 local_sum=sum(local_n);
 if ( my_rank != 0) {
        MPI_Send (&local_sum , 1, MPI_DOUBLE , 0, 0, MPI_COMM_WORLD ) ;
  }

    else{
                total_sum = local_sum;
                for(source=1;source<comm_sz;source++){
                MPI_Recv (&local_sum , 1, MPI_DOUBLE , source , 0, MPI_COMM_WORLD , MPI_STATUS_IGNORE ) ;
               total_sum+=local_sum;
          }
   }
  if(my_rank==0){
           printf("Sum is=%lf",total_sum);
           printf("\n");
  }
  MPI_Finalize();
  return 0;

}

 double sum(int n){
      int i;
      double cal_sum=0;
      for (i =0;i <= n;i++) {
             cal_sum = cal_sum + 4*(pow (-1, i))/((2*i)+1);
     }
     return cal_sum;
 }

现在我得到这样的错误:

mpi_sumB.c: In function ‘main’:
mpi_sumB.c:13:34: error: ‘my_rank’ undeclared (first use in this function)
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
                              ^
mpi_sumB.c:13:34: note: each undeclared identifier is reported only once for each function it appears in
mpi_sumB.c:14:35: error: ‘comm_sz’ undeclared (first use in this function)
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);
                               ^
mpi_sumB.c:25:12: error: ‘n’ undeclared (first use in this function)
local_n= n/comm_sz;

现在很明显我得到了这个错误,因为我知道我在哪里写下 void Get_input(int my_rank, int comm_sz, int *n) 可能这不是这个函数的正确位置。但是我没有得到任何明确的指导,我需要在哪里定义这个函数。

感谢您的帮助

编辑:我不是在寻找 C 编程语法或嵌套函数。这是一个用 c 实现的 mpi 程序,更具体地说是广播问题。我想知道一般在mpi程序中我们需要在哪里定义广播。

I would like to know generally in mpi program where we need to define broadcasting.

应用程序的上下文很重要。如果您需要广播,比如配置信息(例如,在您的情况下,输入大小),您需要在您的领先排名(例如 rank 0)具有相应信息后进行广播。因此,您可以在之后立即调用 MPI_Bcast

如果你问的是定义函数的地方,即在 main 之前还是在 main 之后。没关系。文件中函数的顺序是任意的。将函数一放在文件的顶部,将函数二放在底部,反之亦然。警告:为了让一个函数“看到”(使用)另一个函数,函数的“原型”必须在使用前在文件中看到。 See this.