我试图找到并行计算的总执行时间,其中n个处理器正在处理问题的某些部分。每个处理器报告它所花费的时间。但我想知道完整问题的执行时间。我该如何计算呢,请帮忙。
代码如下。在这里,每个过程都会报告它所花费的时间。但是总体时间是多少。因为我猜它不应该是所有时间的总和,因为它们是并行运行的
#include <stdio.h>
#include "mpi.h"
int main(int argc,char *argv[]){
unsigned long long i, sum, upToVal;
unsigned long long sumTotal;
int start, end, size, rank;
upToVal = 10;
MPI_Init(&argc,&argv);
double t1, t2,t3,t4;
t1 = MPI_Wtime();
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
start = rank*(upToVal/size) + 1;
if(rank==(size-1)){
end = upToVal;
}else{
end = start + (upToVal/size)-1;
}
sum = 0;
sumTotal=0;
for(i=start; i<= end; i++){
sum = sum +i;
}
MPI_Reduce (&sum, &sumTotal, 1, MPI_LONG_LONG, MPI_SUM, 0,MPI_COMM_WORLD );
printf("\nRank: %d, sum: %lld, sumTotal: %lld\n", rank, sum, sumTotal);
t2=MPI_Wtime();
t3=t2-t1;
printf( "Elapsed time is %f\n", t3 );
MPI_Finalize();
}