2012-01-03 3 views
0

MPI를 사용하여 C/C++에서 코드를 작성할 때 MPI_Init이 호출되기 전에 메모리가 할당되면 각 프로세스에서 해당 메모리를 어떻게 볼 수 있습니까? 테스트 프로그램에서 가끔은 괜찮은 것이고 그렇지 않은 것을 볼 수 있습니다. 표준이 이것을 정의합니까? 모든 프로세스가 '단일'(멀티 코어) CPU에 있기 때문에 운이 좋았다면 MPI_Init 중에 메모리 할당이 다른 프로세스로 복사되었는지 알 수 없습니다.MPI 메모리 할당

+0

MPI_Init에는 복사가 없어야합니다. MPI_Init을 호출하기 전에 각 프로세스는 동일한 메모리를 할당하므로 모두가이를 볼 수 있어야합니다. – milancurcic

+0

나는 그것이 내가 이해하지 못하는 것 같아요. MPI_Init을 위해서, 다른 프로세스도 존재합니까? 그렇지 않다면 MPI_Init이 메모리를 'master'(id = 0) 프로세스에만 할당하기 전에 메모리를 할당합니까? – Jess

+0

예. MPI_Init을 호출하지 않고 hello world 프로그램을 작성하고이를 병렬로 실행함으로써 이것을 테스트 할 수 있습니다. 독립적 인 프로세스를 생성하고 각각 "hello"라고 말할 것입니다. MPI_Init을 호출하면 프로세스 사이에 링크를 만들고 (예 : 내 ID 란 무엇인가) 자신이 누구인지 말할 수있는 환경 (MPI_Comm)이 설정됩니다. – milancurcic

답변

2

예. 각 프로세스는 실행 가능한로드 타임에 생성됩니다. MPI_Init 호출 전에 메모리가 할당되면 각 프로세스는 해당 데이터를 알고 있습니다. 그러나 MPI_Init이 호출되기 전에 프로세스는 자신이나 서로를 인식하지 못합니다. MPI_Init과 MPI_Comm_world를 호출하면 MPI 환경이 초기화되고 MPI_Comm이 반환되므로 프로세스간에 연결을 설정할 수 있습니다.

1

고마워요. IRO-bot! 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

안녕하세요 MPI 세계, 공정 0 ~ !! Hello MPI World, 프로세스 0에서 !! Hello MPI World, 프로세스 0에서 !! Hello MPI World, 프로세스 0에서 !!

Hello MPI World, 프로세스 0에서 !! 안녕 MPI 월드, 프로세스 3에서 !! Hello MPI World, 프로세스 1에서 !! Hello MPI World, 프로세스 2에서 !!