Предположим, что моя программа (назовем ее prog_A
) начинается как один процесс MPI. И позже я хочу, чтобы программа prog_A
была создана n
MPI обрабатывает (назовем их prog_B
), используя MPI_Comm_spawn
с теми же аргументами, которые я передал prog_A
.Передача не-NULL argv в MPI_Comm_spawn
Например, если я бегу prog_A
с аргументами 200 100 10
mpiexec -n 1 prog_A 200 100 10
Я хочу prog_B
быть теми же argments 200 100 10
.
Как я могу это сделать? Я попробовал следующее, но это не сработает.
char ** newargv = new char*[3];//create new argv for childs
newargv[0] = new char[50];
newargv[1] = new char[50];
newargv[2] = new char[50];
strcpy(newargv[0],argv[1]);//copy argv to newargv
strcpy(newargv[1],argv[2]);
strcpy(newargv[2],argv[3]);
MPI_Comm theother;
MPI_Init(&argc, &argv);
MPI_Comm_spawn("prog_B",newargv,numchildprocs,
MPI_INFO_NULL, 0, MPI_COMM_SELF, &theother,
MPI_ERRCODES_IGNORE);
MPI_Finalize();
Что означает «это не работает»? Есть ли сообщение об ошибке? Это крушение? Он висит? –
Является ли 'prog_B' в том же каталоге? –
@WesleyBland Prog_A падает при вызове MPI_Comm_spawn. да ... они находятся в одном каталоге. –