MPI.在功能中运行mpi



我想从main使用mpi运行一些功能,但我不知道它应该如何。它看起来像:

#define MAXSIZE 100
int main (int argc, char **argv) {
  int i;
  float matrixA[MAXSIZE][MAXSIZE], matrixB[MAXSIZE][MAXSIZE], matrixC[MAXSIZE][MAXSIZE];
  for(i=0;i<10;i++){
    multiply(matrixA, matrixB, matrixC);
  }
}
void multiply(float matrixA[MAXSIZE][MAXSIZE], float matrixB[MAXSIZE][MAXSIZE], float matrixC[MAXSIZE][MAXSIZE]) {
  int rank; //process rank
  int size; //number of processes
  MPI_Init(&argc, &argv); //initialize MPI operations
  MPI_Comm_rank(MPI_COMM_WORLD, &rank); //get the rank
  MPI_Comm_size(MPI_COMM_WORLD, &size); //get number of processes
  ...someoperation...
  MPI_Finalize();
}

我知道如何运行基本的MPI而不使用其他函数,但我需要这个结构。

在一个应用实例中,MPI最多只能初始化一次。因此,您提供的代码结构将无法工作。

程序的正确结构如下:

#define MAXSIZE 100
int main (int argc, char **argv) {
  int i;
  float matrixA[MAXSIZE][MAXSIZE], matrixB[MAXSIZE][MAXSIZE], matrixC[MAXSIZE][MAXSIZE];
  int rank; //process rank
  int size; //number of processes
  MPI_Init(&argc, &argv); //initialize MPI operations
  MPI_Comm_rank(MPI_COMM_WORLD, &rank); //get the rank
  MPI_Comm_size(MPI_COMM_WORLD, &size); //get number of processes
  for(i=0;i<10;i++){
    multiply(matrixA, matrixB, matrixC);
  }
  MPI_Finalize();
}
void multiply(float matrixA[MAXSIZE][MAXSIZE], float matrixB[MAXSIZE][MAXSIZE], float matrixC[MAXSIZE][MAXSIZE]) {    
  ...someoperation...
}

这可能对您有帮助。在你的程序中,有一个for循环for(i=0;i<10;i++) { multiply(matrixA, matrixB, matrixC); }我感觉你在尝试执行10次乘法。你可以把每次乘法赋给一个过程。因此,您可以使用命令mpirun -np 10 executable

最新更新