Parallel processing 以MPI工作共享为单位的总执行时间

Parallel processing 以MPI工作共享为单位的总执行时间,parallel-processing,mpi,Parallel Processing,Mpi,我试图找到一个并行计算的总执行时间,其中n个处理器处理问题的一部分。每个处理器报告它所花费的时间。但我想知道完整问题的执行时间。我该怎么计算呢?请帮忙 代码如下所示。在这里,每个进程都报告它所花费的时间。但是总的时间是多少呢。我想这不应该是所有时间的总和,因为它们是并行运行的 #include <stdio.h> #include "mpi.h" int main(int argc,char *argv[]){ unsigned long long i, sum, upToVal;

我试图找到一个并行计算的总执行时间,其中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();
#包括
#包括“mpi.h”
int main(int argc,char*argv[]){
无符号长i,和,向上;
无符号长-长总和;
int开始、结束、大小、等级;
upToVal=10;
MPI_Init(&argc,&argv);
双t1,t2,t3,t4;
t1=MPI_Wtime();
MPI_通信大小(MPI_通信世界和大小);
MPI通信等级(MPI通信世界和等级);
开始=排名*(上行/大小)+1;
如果(排名==(大小1)){
结束=向上;
}否则{
结束=开始+(上行/大小)-1;
}
总和=0;
总和=0;

对于(i=start;我能不能请你更清楚地定义你想知道的时间,例如CPU时间与墙时间或两者之间的时间?@Zulan。我想测量墙时间。代码如下。这里每个进程报告它所花费的时间。但总时间是多少。我想它不应该是所有时间的总和,因为它们是并行运行的