신호가 safely 및 MPI 응용 프로그램에서 처리 될 수있는 방법 (예 : 응용 프로그램에 런타임이 만료되어 다음 10 분 이내에 종료되어야한다고 알리는 SIGUSR1) 몇 가지 있습니다 제약 조건 :MPI 응용 프로그램에서 신호 처리/정상 종료
- 응용 프로그램을 종료하기 전에 모든 병렬/직렬 IO를 완료하십시오! 응용 프로그램이 문제
어떻게하지 않고 종료 할 수있는 모든 다른 상황에서
main()
다시 점프와 MPI_FINALIZE()
를 호출을 유지하면서 안전하게에는 교착 상태를 달성 할 수 없다? 어쨌든 프로세스가 종료 될 때까지 기다려야합니다 (멀티 스레드 응용 프로그램에서는 동일하다고 생각합니다).하지만 많은 정보를 전달하지 않고도 효율적으로 처리하는 방법은 무엇입니까? 아무도이 일을 올바르게하는 몇 가지 방법을 알고 있습니까? (우리가 신호 처리기에서 신호를 잡아와 "처리되지 않은 신호 스택"에 밀어 각 프로세스에 대해 말할 수 있습니다 :
아이디어 1 :
다음은 또는 작동하지 않을 수있는 몇 가지 생각입니다 USS) 우리는 단순히 시그널 핸들러 루틴에서 돌아온다. 그런 다음 IO 작업 전후에 특정 응용 프로그램 종료 지점이 생기며 USS의 모든 신호를 처리합니다. 예를 들어 USS에 SIGUSR1이있는 경우 각 프로세스는 종료 지점에서 종료됩니다.
- 이 아이디어는 과정이 이미이 점을 통과하고 지금 병렬 IO를 시작하는 동안 처리 한 단지, 종료 지점을 befor singnal 잡기, 여전히 교착 상태가 될 수 있다는 문제가있다. 신호에
만 마스터 프로세스 0 어획량 신호 : 공정 2에서 교착 상태에 결과 1 종료 할 프로세스는
... 아이디어 2 (종료 IO에 대한 공정 1 대기) 처리기는 다음 브로드 캐스트 메시지를 보냅니다. "모든 프로세스가 종료되었습니다!" 응용 프로그램의 특정 지점에서 모든 프로세스가 브로드 캐스트를 수신하고 main
및 MPI_FINALIZE
에 catch 된 예외가 호출됩니다.
- 출구 안전하게 발생이 방법하지만, 우리가 종료해야합니다 있는지 확인하기 위해 지속적으로 브로드 캐스트 메시지를 수신해야하는 비용 여부에 대한
고마워요!