首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPI总运行时间

MPI总运行时间
EN

Stack Overflow用户
提问于 2015-10-21 12:40:02
回答 2查看 2.5K关注 0票数 3

我有一个程序(用加农子算法计算矩阵乘法),在MPI中为C实现,我设置了一个时钟来查看这个程序的总时间,总我指的是所有的进程和。

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

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

代码语言:javascript
复制
 clock_t begin, end;
 double time_spent;
 begin = clock();

 /* Initializing */
 MPI_Init (&argc, &argv);

然后,在我的代码末尾,我有:

代码语言:javascript
复制
  MPI_Finalize();

  end = clock();
  time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
  printf("\n\nTIME: %f SECONDS\n\n", time_spent);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 13:11:36

假设您想要的是每个流程的单个时间之和,则需要:

  1. 在调用MPI_Finalize()之前,移动对时间结束的测量,因为您需要额外的沟通;
  2. 通过MPI_Reduce()收集单个时间以处理#0 (例如);最后
  3. 使用进程0打印这一次。

除此之外,除非您有一个令人信服的理由不这样做,否则我鼓励您使用MPI_Wtime()作为计时器,而不是某种误导的clock()计时器。

然后,代码可以如下所示:

代码语言:javascript
复制
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;
}
票数 7
EN

Stack Overflow用户

发布于 2015-10-21 12:45:19

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

如果您想要总时间,即在每个进程中花费的时间之和,然后发送主节点中每个节点的本地time_spent,执行本地time_spent的求和并打印出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33259582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档