MPI を使用する私の小さなプログラムの時間を計ろうとしていて、出力をファイルに入れたいと思っています。
私が試しているコマンド: time --output=rt.txt mpirun -np 2 a.out
. しかし、 と のフラグは衝突しtime
て いるようです。mpirun
これがどのように機能するかについてのアイデアはありますか?
MPI を使用する私の小さなプログラムの時間を計ろうとしていて、出力をファイルに入れたいと思っています。
私が試しているコマンド: time --output=rt.txt mpirun -np 2 a.out
. しかし、 と のフラグは衝突しtime
て いるようです。mpirun
これがどのように機能するかについてのアイデアはありますか?
これ本気か ?バイナリのマニュアルページから time
時間のオプションは、コマンドラインのコマンドラインの前に表示する必要があります。COMMANDがCOMMANDに引数として渡された後のコマンドライン上のすべて
どちらtime
を使用していますか?組み込みのシェルtime
と別のバイナリがあることに注意してください。組み込みではなく、別のバイナリを使用する必要があると思います。として指定するだけです/usr/bin/time
(またはインストールされている場所)
MPI_Wtime
タイムバイナリを使用する代わりに、関数について聞いたことがありますか?アプリケーションのタイミングを調整するとMPI_Wtime
、並列ジョブ全体の実行時間のより正確な結果を生成できます。MPI_Wtime
次のように使用できます。
#include <stdio.h>
#include <mpi.h>
int main(void) {
MPI_Init(NULL, NULL);
MPI_Barrier(MPI_COMM_WORLD);
// Get the program start time after all processes have initialized and synchronized
double start_time = MPI_Wtime();
// Do parallel processing here...
sleep(1);
// Synchronize all the processes again and find out the total execution time
MPI_Barrier(MPI_COMM_WORLD);
double execution_time = MPI_Wtime() - start_time;
// Print the execution time from the root process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
if (world_rank == 0) {
printf("Execution time %lf\n", execution_time);
}
MPI_Finalize();
return 0;
}
このプログラムは、これに近いものを出力する必要があります->実行時間1.0