Ism*_*aro 3 c parallel-processing time clock mpi
我有一个程序(用cannon算法计算矩阵乘法),在MPI中实现C,我设置了一个时钟来查看这个程序的TOTAL时间,总计是指所有的过程总和.
但结果我得到了每个过程的时间.
我的主要部分开头的部分代码:
clock_t begin, end;
double time_spent;
begin = clock();
/* Initializing */
MPI_Init (&argc, &argv);
Run Code Online (Sandbox Code Playgroud)
然后在我的代码结束时,我有:
MPI_Finalize();
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("\n\nTIME: %f SECONDS\n\n", time_spent);
Run Code Online (Sandbox Code Playgroud)
假设您想要的是每个流程的各个时间的总和,您需要:
MPI_Finalize(),因为您需要额外的通信;MPI_Reduce()进程#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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |