2012-11-18 2 views
0

업데이트 : 문제가 있으며 그게 무엇인지 모릅니다. MPI_INIT와 MPI_FINALIZE가있는 테스트 프로그램이 있습니다. 나는 5 개의 서브 루틴을 포함하는 모듈을 가지고있다 : 3 개의 서브 루틴은 의존적이고, 2 개의 다른 서브 루틴과 독립적이다. 테스트 모듈의 MPI 코드를이 모듈에 넣고 싶습니다. 나는 MPI_INIT를 변수가 선언 된 모듈과 서브 루틴 앞에 놓는다. "MPI_INIT 및 MPI_FINALIZE 한 번만 호출해야"않습니다 어떻게업데이트 : 모듈 또는 모듈의 서브 루틴에 MPI를 넣어야합니까?

This statement must not appear in the specification part of a module 

포트란 프로그램, 모듈 및 서브 루틴에 영향을 미칠 : 저도 같은 오류 메시지가 오류의 시리즈를 얻을? MPI 함수와 변수를 어디에 두어야합니까? 여러 개의 독립적 인 프로그램이 있는데, 각각이 모듈의 서브 루틴을 여러 번 호출합니까?

~~~~~~~~~ 나는 병렬 처리하려는 루프를 포함하는 일련의 서브 루틴을 포함하는 모듈을 가지고 있습니다. 다른 프로그램에서 사용하는 서브 루틴은 공용입니다.

module ... 
call MPI_INIT 
subroutine 1 
... (MPI code) 
subroutine 2 
subroutine 3 
MPI_GATHERV 
call MPI_FINALIZE 
module 

각 서브 루틴 내부 : 나는 서브 루틴 외부 MPI를 정의해야 하는가?

module ... 
subroutine 1 
call MPI_INIT 
... (MPI code) 
MPI_GATHERV 
call MPI_FINALIZE 
subroutine 2 
call MPI_INIT 
... (MPI code) 
MPI_GATHERV 
call MPI_FINALIZE 
subroutine 3 
call MPI_INIT 
... (MPI code) 
MPI_GATHERV 
call MPI_FINALIZE 
module 

내가 솔루션 1. 거친 입자의 원리를 다음의 장점을 볼 수있는 프로그램이 호출하면 서브 루틴 1, 또한 서브 루틴 외부 MPI 코드를 실행합니다?

+2

예, 주 프로그램의 시작 부분에서 MPI를 초기화하고 마지막에 완료하십시오. – milancurcic

+0

답변 해 주셔서 감사합니다. – Pippi

답변

6

프로그램에서 MPI를 정확히 한 번 초기화하고 마무리해야합니다. MPI_Finalize를 호출 한 후에는 더 이상의 MPI 작업을 수행 할 수 없습니다. 이 표준은 말한다 :

MPI_FINALIZE 반환되면

, 아니 MPI 루틴 (심지어 MPI_INIT가) MPI_GET_VERSION, MPI_GET_LIBRARY_VERSION, MPI_INITIALIZED, MPI_FINALIZED를 제외하고 호출 할 수 있으며, 기능의 제약 내에서 접두사 MPI_T_ (와 어떤 기능 이 접두사는 14.3.4 절에 나와 있습니다).

(MPI3, P361, L25) MPI3 PDF

업데이트에 대한 회신이 : 당신이 코드의 선언 부분에 실행 문을 넣을 수 없습니다. MPI_Init와 MPI_Finalize에 대한 호출이 한 번만 있어야한다는 것은 실행이 정확히 의미한다는 것을 의미합니다. 귀하의 응용 프로그램이 그런 걸 읽을 수 있었다 : 당신은 당신이 프로그램의 시작 부분에서 수행 할 다양한 초기화 물건이있는 경우

program mini 
    use mpi 
    implicit none 
    integer :: iError 
    call mpi_init(iError) 
    call do_some_stuff() 
    call mpi_finalize(iError) 
end program mini 

을, 당신은 물론 모듈 서브 루틴에 결합하고 거기에 mpi_init를 호출 할 수 있습니다. 모듈에 테스트 프로그램을 사용한다면 mpi_init과 mpi_finalize를 사용하십시오. 일부 서브 루틴에서 mpi_init 및 mpi_finalize를 호출하는 예는 매우 일반적인 항목을 설정하는 데 사용하는 env_module of the treelm library에서 찾을 수 있습니다.

이 모듈의 서브 루틴을 여러 번 호출하는 여러 독립적 인 프로그램이있는 경우 어디에서 MPI 함수와 변수를 넣어야합니까?

당신은 그것을 바꿔 줄 수 있습니까? 나는 그것을 얻지 않는다. MPI 함수와 변수는 mpi 모듈에 있어야합니다. 여러 개의 독립적 인 프로그램을 호출하는 경우, 모두 mpi 모듈을 "사용해야"합니다. 독립적 인 프로그램은 MPI_Init과 MPI_Finalize를 각각 갖고있는 것이 좋습니다.어쩌면 짧은 코드 예제를 게시하고, 달성하려는 내용과 문제점을 게시 할 수 있습니다.

+0

MPI-3.0은 2 개월 밖에 지나지 않았으며 현재 MPI 구현을 지원하지 않습니다. 내년에 MPI-2.2를 인용하는 것이 좋습니다. –

+0

도움이 필요합니다! – Pippi

+0

업데이트 된 질문을 다루기 위해 제 대답이 업데이트되었습니다. – haraldkl