▶ 计时器函数 MPI_Wtime() 以及头文件 timer.h 中的宏函数 GET_TIME(),类似 time.h 中函数 clock() 的用法。注意 函数 clock() 记录的是CPU时间(包含用户代码,库函数,系统调用耗时,不包括空闲等待时间),而 MPI_Wtime() 和 GET_TIME()记录的是墙上时间(在 CPU 时间的基础上包括了空闲等待时间)。

● MPI_Wtime() 使用范例

  1. {
  2. const int globalSize = ;
  3. int globalDataInt[globalSize], i, comSize, comRank, sumInt;
  4. double time;
  5.  
  6. MPI_Init(&argc, &argv);
  7. MPI_Comm_size(MPI_COMM_WORLD, &comSize);
  8. MPI_Comm_rank(MPI_COMM_WORLD, &comRank);
  9.  
  10. if (comRank == )
  11. for (i = ; i < globalSize; globalDataInt[i] = i, i++);
  12.  
  13. time = MPI_Wtime(); // 开始计时
  14. MPI_Bcast(globalDataInt, globalSize, MPI_DOUBLE, , MPI_COMM_WORLD);
  15. for (i = sumInt = ; i < globalSize; sumInt += globalDataInt[i++]);
  16. time = MPI_Wtime() - time; // 终止计时
  17.  
  18. printf("Size = %d, rank = %d, resultInt = %d, time = %f ms\n", comSize, comRank, sumInt, time * );
  19. MPI_Finalize();
  20. return ;
  21. }

● 输出结果:

  1. D:\Code\MPI\MPIProjectTemp\x64\Debug>mpiexec -n -l MPIProjectTemp.exe
  2. []Size = , rank = , resultInt = , time = 0.497859 ms
  3. []Size = , rank = , resultInt = , time = 0.466163 ms
  4. []Size = , rank = , resultInt = , time = 0.459093 ms
  5. []Size = , rank = , resultInt = , time = 0.442270 ms
  6. []Size = , rank = , resultInt = , time = 0.385950 ms
  7. []Size = , rank = , resultInt = , time = 0.437638 ms
  8. []Size = , rank = , resultInt = , time = 0.574171 ms
  9. []Size = , rank = , resultInt = , time = 0.542719 ms

● GET_TIME() 使用范例

  1. #include <stdio.h>
  2. #include "timer.h"
  3. #include <mpi.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. const int globalSize = ;
  8. int globalDataInt[globalSize], i, comSize, comRank, sumInt;
  9. double timeStart,timeEnd;
  10.  
  11. MPI_Init(&argc, &argv);
  12. MPI_Comm_size(MPI_COMM_WORLD, &comSize);
  13. MPI_Comm_rank(MPI_COMM_WORLD, &comRank);
  14.  
  15. if (comRank == )
  16. for (i = ; i < globalSize; globalDataInt[i] = i, i++);
  17.  
  18. GET_TIME(timeStart); // 开始计时
  19. MPI_Bcast(globalDataInt, globalSize, MPI_DOUBLE, , MPI_COMM_WORLD);
  20. for (i = sumInt = ; i < globalSize; sumInt += globalDataInt[i++]);
  21. GET_TIME(timeEnd); // 终止计时
  22.  
  23. printf("Size = %d, rank = %d, resultInt = %d, time = %f ms\n", comSize, comRank, sumInt, (timeEnd - timeStart) * );
  24. MPI_Finalize();
  25. return ;
  26. }

● timer.h 的主要内容,我的 time.h 中没有结构体 struct timeval,无法运行上面的代码

  1. #ifndef _TIMER_H_
  2. #define _TIMER_H_
  3.  
  4. #include <time.h>
  5.  
  6. // 注意参数 now 是 double 类型而不是 double* 类型
  7. #define GET_TIME(now) {struct timeval t; gettimeofday(&t, NULL); now = t.tv_sec + t.tv_usec/1000000.0; }
  8.  
  9. #endif

MPI 计时器函数 MPI_Wtime()的更多相关文章

  1. MPI聚合函数

    MPI聚合通信 MPI_Barrier int MPI_Barrier( MPI_Comm comm ); 所有在该通道的函数都执行完后,才开始其他步骤. 0进程在状态T1调用MPI_Barrier函 ...

  2. MPI初学-安装及OpenMPI函数说明

    一.Mac下OpenMPI的安装 所用电脑:MacBook Pro,OSX 10.11.2 从openmpi官网下载相应版本:OpenMPI 1.8下载 解压文件 双击解压或者tar zxvf ope ...

  3. MPI编程简单介绍

    第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...

  4. MPI编程简述

    第三章MPI计划 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植. 一般来讲,并行机不一定在各处理器之间共享存 ...

  5. MPI编程简介[转]

    原文地址http://blog.csdn.net/qinggebuyao/article/details/8059300 3.1 MPI简介 多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存 ...

  6. MPI小例子

    MPI示例 MPI时间函数测试 #include<stdio.h> #include<mpi.h> #include<stdlib.h> #include<t ...

  7. MPI 学习笔记

    目录 MPI学习笔记 MPI准备 概述 前置知识补充 环境部署 1.修改IP及主机名 2.关闭防火墙 3.实现免密码SSH登录 4.配置MPI运行环境 5.测试 程序的执行 编译语句 运行语句 MPI ...

  8. MPI简谈

    MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...

  9. (转)C#精确时间计时器

    原文地址:http://blog.sina.com.cn/s/blog_699d3f1b01012vgb.html 1 调用WIN API中的GetTickCount [DllImport(" ...

随机推荐

  1. spring boot: 热部署spring-boot-devtools

    spring boot: 热部署spring-boot-devtools 1引入spring-boot-devtools依赖包 <!-- spring boot devtools 热部署 --& ...

  2. Autofac Mvc注入

    private void DependencyInjection() { var builder = new ContainerBuilder(); builder.RegisterControlle ...

  3. EF大数据批量添加性能问题

    前几天做一个批量发消息的功能,因为要向消息表中批量写入数据,用的EF框架的插入方法:不用不知道,一用吓一跳:就10000条数据就耗时好几分钟,对应追求用户体验的我来说这是极不能容忍的,后来改为拼接SQ ...

  4. linux三尖刀

    序 我们都知道,一个可执行程序的基本的生命过程是如此的: (编辑)源文件--->(编译)目标文件--->(链接)可执行文件--->(调试排错)稳定执行 所以,在这个过程中,我们很容易 ...

  5. CentOS下安装docker,docker-compose

    1.查看系统发行版本: lsb_release -a 2.安装docker:Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行 ...

  6. jQuery实现鼠标经过图片预览大图效果

    jQuery:是一种客户端的技术,它的诞生的理由是:write less,do more(写更少的代码,做更多的事情). 因此,我们可以借助jQuery来实现一些很酷炫的效果,相比于javaScrip ...

  7. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

  8. Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介

    ADO.NET技术主要包括Connection.Command.DataReader.DataAdapter.DataSet和DataTable等6个对象,下面对这6个对象进行简单的介绍:(1)Con ...

  9. [CF321E]Ciel and Gondolas&&[BZOJ5311]贞鱼

    codeforces bzoj description 有\(n\)个人要坐\(k\)辆车.如果第\(i\)个人和第\(j\)个人同坐一辆车,就会产生\(w_{i,j}\)的代价. 求最小化代价.\( ...

  10. ppt修改默认字体

      首先,在文本框中输入文字,选中文字设置为自己需要的效果,比如文字字体设置为微软雅黑,大小设置为24,颜色设置为水绿色.   鼠标移动到到输入文本框的边上,此时鼠标形状会变成十字形,单击右键,在弹出 ...