MPI 总计 运行 时间
MPI Total run time
我有一个程序(用cannon算法计算矩阵乘法),是在MPI for C中实现的,我设置了一个时钟来查看这个程序的总时间,总计是指所有过程的总和。
但是结果我得到了每个进程的时间。
我的主要代码开头的部分代码:
clock_t begin, end;
double time_spent;
begin = clock();
/* Initializing */
MPI_Init (&argc, &argv);
然后在我的代码末尾我有:
MPI_Finalize();
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("\n\nTIME: %f SECONDS\n\n", time_spent);
是的,当然你得到的是正确的。
如果要TOTAL TIME,即每个进程花费的时间总和,则发送主节点中每个节点的本地time_spent
,执行本地[=10=的总和] 在那里打印出来。
假设您想要的是每个进程的各个时间的总和,您将需要:
- 将您对结束时间的测量移到
MPI_Finalize()
,因为您需要额外的沟通;
- 通过
MPI_Reduce()
收集个人时间以处理 #0(例如);最后
- 这次用进程0打印。
除此之外,除非您有令人信服的理由不这样做,否则我鼓励您使用 MPI_Wtime()
作为计时器,而不是有点误导的 clock()
计时器。
代码可能如下所示:
int main( int *argc, char* argv[] ) {
MPI_Init( &argc, &argv );
double tbeg = MPI_Wtime();
// a lot of stuff here
// you might want a barrier here...
// MPI_Barrier( MPI_COMM_WORLD );
double elapsedTime = MPI_Wtime() - tbeg;
double totalTime;
MPI_Reduce( &elapsedTime, &totalTime, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );
if ( rank == 0 ) {
printf( "Total time spent in seconds id %f\n", totalTime );
}
MPI_Finalize();
return 0;
}
我有一个程序(用cannon算法计算矩阵乘法),是在MPI for C中实现的,我设置了一个时钟来查看这个程序的总时间,总计是指所有过程的总和。
但是结果我得到了每个进程的时间。
我的主要代码开头的部分代码:
clock_t begin, end;
double time_spent;
begin = clock();
/* Initializing */
MPI_Init (&argc, &argv);
然后在我的代码末尾我有:
MPI_Finalize();
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("\n\nTIME: %f SECONDS\n\n", time_spent);
是的,当然你得到的是正确的。
如果要TOTAL TIME,即每个进程花费的时间总和,则发送主节点中每个节点的本地time_spent
,执行本地[=10=的总和] 在那里打印出来。
假设您想要的是每个进程的各个时间的总和,您将需要:
- 将您对结束时间的测量移到
MPI_Finalize()
,因为您需要额外的沟通; - 通过
MPI_Reduce()
收集个人时间以处理 #0(例如);最后 - 这次用进程0打印。
除此之外,除非您有令人信服的理由不这样做,否则我鼓励您使用 MPI_Wtime()
作为计时器,而不是有点误导的 clock()
计时器。
代码可能如下所示:
int main( int *argc, char* argv[] ) {
MPI_Init( &argc, &argv );
double tbeg = MPI_Wtime();
// a lot of stuff here
// you might want a barrier here...
// MPI_Barrier( MPI_COMM_WORLD );
double elapsedTime = MPI_Wtime() - tbeg;
double totalTime;
MPI_Reduce( &elapsedTime, &totalTime, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );
if ( rank == 0 ) {
printf( "Total time spent in seconds id %f\n", totalTime );
}
MPI_Finalize();
return 0;
}