Распределение памяти MPI - PullRequest
       4

Распределение памяти MPI

0 голосов
/ 03 января 2012

При написании кода на C / C ++ с использованием MPI, если память выделяется до вызова MPI_Init, как каждый из процессов просматривает эту память? Из тестовой программы я вижу, что иногда все в порядке, а другие - нет. Стандарт определяет это? Я не могу сказать, копируется ли выделение памяти другим процессам во время MPI_Init, если мне просто повезло, потому что все процессы «в данный момент» на одном (многоядерном) процессоре.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Да.Каждый процесс порождается во время загрузки исполняемого файла.Если какая-либо память выделяется перед вызовом MPI_Init, каждый процесс знает эти данные.Однако перед вызовом MPI_Init процессы не знают ни себя, ни друг друга.Вызов MPI_Init и MPI_Comm_world инициализирует среду MPI и возвращает MPI_Comm, который позволяет установить соединение между процессами.

1 голос
/ 03 января 2012

Спасибо, ИРО-бот!Я написал HelloWorld.cpp и проверил его;Вот копия для всех, кого это интересует.

#include <iostream>
#include "mpi.h"

int main(int argc, char* argv[])
{
    int numprocs;
    int myid = 0;
    std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);

    if(myid == 0)
        std::cout << std::endl;

    std::cout << "Hello MPI World, from process " << myid << "!! " << std::endl;

    MPI_Finalize();
    return 0;
}

Пример вывода из: mpiexec -n 4 HelloMPIWorld

Hello MPI World, из процесса 0 !!Привет Мир MPI, от процесса 0 !!Привет Мир MPI, от процесса 0 !!Привет Мир MPI, из процесса 0 !!

Привет Мир MPI, из процесса 0 !!Привет Мир MPI, из процесса 3 !!Привет Мир MPI, из процесса 1 !!Привет Мир MPI, из процесса 2 !!

...