5
MPI를 사용하는 경우 주 프로그램을 실행할 때 지정된 프로세스 수가 많습니다. 그러나 하나의 프로세스로 시작하고 런타임이 더 필요할 때 동적으로 결정하고 더 많은 프로세스를 포크하고자합니다. 비슷한 것이 가능합니까?fork를 사용하여 MPI 프로세스를 즉시 생성 하시겠습니까?
그렇지 않으면 나는 피하려고 아주 좋아할 MPI를 재발 명해야 할 것입니다.
MPI를 사용하는 경우 주 프로그램을 실행할 때 지정된 프로세스 수가 많습니다. 그러나 하나의 프로세스로 시작하고 런타임이 더 필요할 때 동적으로 결정하고 더 많은 프로세스를 포크하고자합니다. 비슷한 것이 가능합니까?fork를 사용하여 MPI 프로세스를 즉시 생성 하시겠습니까?
그렇지 않으면 나는 피하려고 아주 좋아할 MPI를 재발 명해야 할 것입니다.
fork()
자식 프로세스가 MPI 기능을 사용할 수 없으므로 fork()
을 사용할 수 없습니다. MPI에는 새로운 프로세스를 동적으로 생성하는 간단한 메커니즘이 있습니다. 내가 [이 질문]에 내 대답에 당신을 참조 http://www.open-mpi.org/doc/v1.4/man3/MPI_Comm_spawn.3.php
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#define NUM_SPAWNS 2
int main(int argc, char *argv[])
{
int np = NUM_SPAWNS;
int errcodes[NUM_SPAWNS];
MPI_Comm parentcomm, intercomm;
MPI_Init(&argc, &argv);
MPI_Comm_get_parent(&parentcomm);
if (parentcomm == MPI_COMM_NULL) {
MPI_Comm_spawn("spawn_example", MPI_ARGV_NULL, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes);
printf("I'm the parent.\n");
} else {
printf("I'm the spawned.\n");
}
fflush(stdout);
MPI_Finalize();
return 0;
}
[1] : 당신은
MPI_Comm_spawn
기능 또는MPI_Comm_spawn_mutliple
는 OpenMPI의 문서를 사용해야합니다. [1] : http://stackoverflow.com/questions/9683331/changing-number-of-processors-during-execution-of-the-code-in-mpis-based-paralle/9683758# 9683758 –
@HighPerformanceMark :하지만 이제 막 새로운 프로세스가 시작됩니다. 이것은 현재 프로세스의 정확한 위치 (및 설정)로부터'fork '를 쓰면 정확히 복사되지 않습니다. – bitmask
당신은 '비슷한 것입니까?'라고 물어 보았습니다. mph_comm_spawn이 비슷하다고 제안합니다. 그러나 요구 사항에 적합하지 않은 경우 MPI를 다시 작성해야 할 수도 있습니다. 또는 다른 병렬화 라이브러리/도구 세트/접근법을 사용하십시오. –