Использование Mpi в Windows

Я установил mpi в Windows и могу использовать его библиотеки. Проблема в том, что в окнах, когда я пишу

mpiexec -n 4 proj.exe 

в командной строке он не выполняет правильных операций. 4 разных процесса используют весь файл кода отдельно. Они не ведут себя как параллельные процессы, работающие только в строках MPI_Init и MPI_Finalize. Как я могу решить эту проблему? Нельзя ли работать с MPI в Windows.

P.S. Я использую Dev C++.


person Iguramu    schedule 06.01.2010    source источник


Ответы (1)


Судя по тому, что вы сказали, MPI работает правильно, а ваши предположения неверны. В каждой реализации MPI (которую я все равно использовал) вся программа выполняется от начала до конца для каждого процесса. Функции MPI_Init и MPI_Finalize необходимы для установки и удаления структур MPI для каждого процесса, но они не определяют начало и конец параллельного выполнения. Начало параллельной секции — это первая инструкция в main, а конец — окончательный возврат.

Хорошая «шаблонная» программа для того, что вам кажется нужным, будет (также ответила в Как ускорить эту задачу с помощью MPI):

int main(int argc, char *argv[]) {
    MPI_Init(&argc, &argv);  
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);  
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);

    if (myid == 0) { // Do the serial part on a single MPI thread
        printf("Performing serial computation on cpu %d\n", myid);
        PreParallelWork();
    }

    ParallelWork();  // Every MPI thread will run the parallel work

    if (myid == 0) { // Do the final serial part on a single MPI thread
        printf("Performing the final serial computation on cpu %d\n", myid);
        PostParallelWork();
    }

    MPI_Finalize();  
    return 0;  
}  
person J Teller    schedule 18.02.2010
comment
Кроме того, если вы действительно опубликуете исходный код, возможно, мы могли бы больше помочь с тем, как заставить вашу программу MPI работать правильно. Просто основываясь на вашем очень кратком описании, вы можете пытаться использовать общую память для связи (что не работает по замыслу в MPI). - person J Teller; 18.02.2010