2016-11-04 16 views
0

ソート時間を計算するMPIプログラムがあります。私はmpirun -np 2 mpiSortでそれを実行します。だから、これは私に2つのプロセスによるソート時間を与えます。同じMPIプログラムを複数回実行する方法

ソーティング時間を平均5回取得したいと考えています。どのように自動的にそれを行うのですか?

mpiSortプログラムでループを実行するとします。実際には5回(x 2回)= 10回実行されます。

編集:mpiSortは並行して並べ替えを行います。基本的には、私はmpirun -np 2 mpiSortを5回入力しないでしようとしています。私は4つのコア、8つのコアに対して同じことをしたいので。

答えて

0

mpirun -np 5 mpiSortを使用して5つのコアで実行し、末尾にMPI_gatherを追加できます。ソートコードは実際にMPIを使用していますか(つまり、最初にMPI_initを呼び出していますか?)。あなたがいると仮定すると、あなたはtimeは、各プロセスが時間をソートしている削減、

# include <mpi.h> 
#include <iostream> 
using namespace std; 

int main (int argc, char *argv[]) 
{ 

    int ierr, rank, nprocs, root=0; 
    double time, buf; 
    ierr = MPI_Init (&argc, &argv); 
    ierr = MPI_Comm_rank (MPI_COMM_WORLD, &rank); 
    ierr = MPI_Comm_size (MPI_COMM_WORLD, &nprocs); 
    time = 0.5; 
    ierr = MPI_Reduce (&time, &buf, 1, MPI_DOUBLE_PRECISION, 
          MPI_SUM, root, MPI_COMM_WORLD); 
    if (rank == root){ 
     buf = buf/nprocs; 
     cout << buf << "\n"; 
    } 

    MPI_Finalize (); 

} 

で終わりに5つのコアと単純に平均的に実行することができます。

+0

はい、MPI_initが最初です。私はあなたのコードが別のシングルコアで5回、または5つのコアで一度にソートすると思いますか?しかし、私はソート時間を2回のコアで5回行いたいと思っています。 – lucahuy

+0

申し訳ありませんが、わかりませんが、これを明確にするために最小限のコードを投稿できますか?彼らは並行して並べ替えるのですか? MPIを使用すると、各コアはMPIコマンドを使用して通信可能になり、同時に別のインスタンスとして実行されます。上記のコードは5つの別々のインスタンスのソートをモデル化しています(時間= 0.5を関数に置き換えます)。これは5つのコアで同時に実行され、その後5つすべての平均を得るために通信されます。 –

+0

'mpirun -np 2 mpiSort'を5回実行して、実行可能ファイルの平均時間を取るのはなぜですか? MPI実行可能ファイル全体が、 'mpirun -np'で指定したコア数で同時に実行されることに注意してください。 –

0

ループに入れて行く方法です。 endTime = MPI_Wtime()という10個の値があるので、私は混乱していました。私はルートプロセスから5個だけを使用しました。彼のMPI_Reduceコードの@EdSmithのおかげで、正しい計算時間はMPI_Reduceを使って2つのプロセスの平均です。

MPI_Init(&argc, &argv); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
MPI_Comm_size(MPI_COMM_WORLD, &nProcs); 

for (int run=0; run<5; run++) { 
    ... 
    endTime = MPI_Wtime(); 
    totalTime = endTime - startTime; 
    MPI_Reduce (&totalTime, &workTime, 1, MPI_DOUBLE_PRECISION, MPI_SUM, root, MPI_COMM_WORLD); 
    if (rank == root) { 
    paraTime = workTime/nProcs; 
    } 
    ... 
} 

MPI_Finalize(); 
関連する問題