加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

简单的MPI程序示例(一)--用MPI实现计时功能

(2011-04-29 17:45:31)
标签:

杂谈

分类: 并行技术
《高性能计算之并行编程技术-MPI并行程序设计》

都志辉   
李三立   
陈渝  刘鹏

 

第7章 简单的MPI程序示例--用MPI实现计时功能

MPI提供的时间函数调用:

MPI_WTIME()
double MPI_Wtime(void)
DOUBLE PRECISION MPI_WTIME()

MPI_WTIME返回一个用浮点数表示的秒数, 它表示从过去某一时刻到调用时刻所经历的时间。这样如果需要对特定的部分进行计时,一般采取的方式是:

     double starttime, endtime;
      ...
     starttime = MPI_Wtime()
            需计时部分
     endtime = MPI_Wtime()
     printf("That tooks %f secodes\n", endtime-starttime);

另一个MPI提供的时间函数:

MPI_WTICK()
double MPI_Wtick()
DOUBLE PRECISION MPI_WTICK()

MPI_WTICK返回MPI_WTIME的精度,单位是秒,可以认为是一个时钟滴答所占用的时间。

 

下面的程序测试MPI的时间函数是否正确
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
#include "test.h"
int main( int argc, char **argv )
{
    int    err = 0;
    double t1, t2;
    double tick;
    int    i;
    MPI_Init( &argc, &argv );
    t1 = MPI_Wtime();
    t2 = MPI_Wtime();
if (t2 - t1 > 0.1 || t2 - t1 < 0.0) {

err++;

fprintf( stderr,
 "Two successive calls to MPI_Wtime gave strange results: (%f) (%f)\n",
 t1, t2 );
    }

    for (i = 0; i<10; i++) {
t1 = MPI_Wtime();
sleep(1);
t2 = MPI_Wtime();
if (t2 - t1 >= (1.0 - 0.01) && t2 - t1 <= 5.0) break;
   
if (t2 - t1 > 5.0) i = 9;

}

if (i == 10) {

fprintf( stderr,  "Timer around sleep(1) did not give 1 second; gave %f\n",t2 - t1 );
err++;

    }
tick = MPI_Wtick();

if (tick > 1.0 || tick < 0.0) {

err++;
fprintf( stderr, "MPI_Wtick gave a strange result: (%f)\n", tick );
    }
    MPI_Finalize( );
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有