MPI总运行时间

时间:2015-10-21 12:40:03

标签: c time parallel-processing mpi clock

我有一个程序(用cannon算法计算矩阵乘法),在MPI中用C实现,我设置了一个时钟来查看该程序的TOTAL时间,总计是指所有的过程总和。

但结果我得到了每个过程的时间。

我的主要部分开头的部分代码:

 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);

2 个答案:

答案 0 :(得分:6)

假设您想要的是每个流程的个别时间总和,您需要:

  1. 在调用MPI_Finalize()之前移动您的结束时间,因为您需要额外的通信;
  2. 通过MPI_Reduce()收集个别时间以处理#0(例如);最后
  3. 此时使用流程0打印。
  4. 除此之外,除非您有其他令人信服的理由,否则我建议您使用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;
    }
    

答案 1 :(得分:0)

是的,当然你得到的是正确的。

如果你想要TOTAL TIME,即每个进程花费的时间总和,那么发送主节点中每个节点的本地time_spent,执行本地time_spent'的求和在那里打印出来。