2013-04-10 2 views
0

나는 MPI 프로그램 (Fortran, MPICH)을 갖고 있는데,이 스크립트는 자신의 MPI 프로그램을 (mpirun을 사용하여) 시작합니다. 지금까지, if(system_num .eq. root_system_num)에 쉘 (system) 명령을 싸서 하나의 MPI 프로세스 만 스크립트를 실행합니다. 그러나 일련의 HYDU_create_process 오류가 발생합니다.MPI 프로세스에서 MPI 프로세스를 호출하는 스크립트 호출하기

MPI_Comm_spawn을 사용했지만 "MPI는 시작 프로그램이 셸 스크립트이고 셸 스크립트가 MPI_INIT을 호출하는 프로그램을 시작하면 어떻게되는지 말하지 않습니다"라는 경고가 있습니다. 따라서 이상적인 것 같지 않습니다. .

몇 가지 포인트 :

  • 에서 모든 호출 프로그램과 상호 작용할 필요가 없습니다 쉘 스크립트에서 호출 된 프로그램. 호출 프로그램은 프로세스가 완료 될 때까지 기다려야합니다.
  • 쉘 스크립트를 별도의 실행 파일로 변환하는 쉬운 방법은 없습니다 (많은 환경 변수 설정 등).
  • MPICH 및 Open MPI 모두에 이상적입니다.

방법이 있습니까?

답변

1

MPICH의 경우 불행히도 MPI_Comm_spawn을 사용하는 것이 가장 좋습니다. 유일한 다른 옵션은 중첩 된 MPI 프로그램을 호출하기 전에 쉘 스크립트에서 unset이어야하는 모든 구현 종속적 인 버전 종속 환경 변수를 파악하는 것입니다. (MPICH에 대한) 일부 예 변수는 PMI_RANKPMI_PORT이 포함됩니다 :

분명히
% mpiexec -n 1 env | egrep '^PMI|^HYD' 
HYDI_CONTROL_FD=8 
PMI_RANK=0 
PMI_FD=7 
PMI_SIZE=1 

, 다른 변수는 열기 MPI 또는 MPICH2/MPICH의 다른 버전 twiddled해야합니다.

+0

그래, 나는 MPI_Comm_spawn쪽으로 기울어 져있다. 하지만 이제 코드 자체가 파일을 구문 분석하기 전에 어떤 환경 변수가 있어야 하는지를 추출하기 위해 모든 종류의 파일을 구문 분석해야합니다. Fortran에서 읽을 수 있도록 고안된 파일들, 이제 필자는 그것을하기 위해 쉘 스크립트를 준비해야합니다. –