MPI를 사용하는 일종의 다중 에이전트 시스템이 있습니다. 나는 주된 배우를 mpiexec -np 1 Admin.py : -np 4 Other.py
와 함께 시작한다. 각 "other.py"는 또한 하나 이상의 프로세스를 생성합니다. 계산 효율성을 위해 부모 프로세스와 동일한 프로세서 (순위)에서 스폰 된 프로세스를 갖고 싶습니다. 이것을 어떻게 할 수 있습니까? (그리고 호기심을 위해 : 1. 어디 기본적으로 양산 있습니다 2. 프로세스가 실행 위치를 확인할 수있는 방법이 있습니까??)MPI 프로세스를 생성 할 호스트 (순위) 지정
이 Other.py에 대한 나의 코드는 다음 (더 MWE)를 포함하지
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
...
icomm = MPI.COMM_SELF.Spawn(sys.executable,args["front_process.py",str(rank)],\
maxprocs=1)
Spawn에 info와 argument를 제공하면 정상적으로 스폰 된 프로세스를 넣을 위치를 제어 할 수 있습니다. 이 "정보"를 추가 할 때
myinfo = MPI.Info.Create()
myinfo.Set("host","%s" % str(rank))
icomm = MPI.COMM_SELF.Spawn(sys.executable,args=["front_process.py",str(rank)],\
maxprocs=1,info=myinfo)
그러나, MPI가 충돌 (어떤 호스트 목록이 제공되지 않을 경우 또는 로컬 호스트) All nodes which are allocated for this job are already filled.
현재 하나의 프로세서가있는 멀티 코어 시스템에서만 테스트됩니다. 하지만 정보를 제공 할 때 코드가 왜 충돌하는지 ('이 작업에 할당 된 모든 노드는 이미 채워져있다 ') 궁금해 지지만 정보를 제공하지 않을 때는 그렇지 않습니다. 모든 프로세서가 점유되어야한다 ('mpiexec -n 2 code.py'와 4 개의 스폰 된 프로세스) – user989762