MPI. Запуск MPI в функции - PullRequest
2 голосов
/ 09 июля 2011

Я хочу запустить некоторую функцию, используя mpi из main, но я не знаю, как это должно быть. Похоже:

#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 без использования других функций, но мне нужна эта конструкция.

Ответы [ 2 ]

8 голосов
/ 10 июля 2011

В экземпляре приложения 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...
}
1 голос
/ 29 июля 2012

Это может быть полезно для вас. В вашей программе есть цикл for for(i=0;i<10;i++) { multiply(matrixA, matrixB, matrixC); } Я чувствую, что вы пытаетесь выполнить умножение 10 раз. Вы можете назначить каждое умножение одному процессу. Так что вы можете использовать команду,Исполняемый файл mpirun -np 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...