5
私がMPIを使用する場合、私はメインプログラムを実行するときに指定されたいくつかのプロセスを持っています。しかし、私は1つのプロセスから始め、実行時にさらに必要なときに動的に決定し、より多くのプロセスをオフにしたいと考えています。それは可能でしょうか?MPIプロセスをforkで作成しますか?
そうでなければ、私は避けたいと思うMPIを再考する必要があります。
私がMPIを使用する場合、私はメインプログラムを実行するときに指定されたいくつかのプロセスを持っています。しかし、私は1つのプロセスから始め、実行時にさらに必要なときに動的に決定し、より多くのプロセスをオフにしたいと考えています。それは可能でしょうか?MPIプロセスをforkで作成しますか?
そうでなければ、私は避けたいと思うMPIを再考する必要があります。
子プロセスは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を書き直す必要があります。あるいは、別の並列化ライブラリ/ツールセット/アプローチを使用してください。 –