Последовательная основная функция MPI

Это довольно простой вопрос о MPI, но я не могу осмыслить его. У меня есть основная функция, которая вызывает другую функцию, использующую MPI. Я хочу, чтобы основная функция выполнялась последовательно, а другая функция - параллельно. Мой код выглядит следующим образом:

int main (int argc, char *argv[])
{
    //some serial code goes here
    parallel_function(arg1, arg2);
    //some more serial code goes here
}

void parallel_function(int arg1, int arg2)
{
    //init MPI and do some stuff in parallel
    MPI_Init(NULL, NULL);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    //now do some parallel stuff
    //....
    //finalize to end MPI??
    MPI_Finalize();
}

Мой код работает нормально и получает ожидаемый результат, но проблема в том, что основная функция также выполняется в отдельных процессах, и поэтому последовательный код выполняется более одного раза. Я не знаю, как это выполняется несколько раз, потому что я еще даже не вызвал MPI_Init (если я напечатаю в main перед вызовом parallel_function, я увижу несколько printf)

Как я могу остановить параллельную работу моей программы после того, как я готово?

Спасибо за ответы!

12
задан Alex Aylwin 31 January 2012 в 17:52
поделиться