source: trunk/include/AlpsTime.h @ 258

Last change on this file since 258 was 258, checked in by yanxu, 13 years ago

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1/*===========================================================================*
2 * This file is part of the Abstract Library for Parallel Search (ALPS).     *
3 *                                                                           *
4 * ALPS is distributed under the Common Public License as part of the        *
5 * COIN-OR repository (http://www.coin-or.org).                              *
6 *                                                                           *
7 * Authors: Yan Xu, SAS Institute Inc.                                       *
8 *          Ted Ralphs, Lehigh University                                    *
9 *          Laszlo Ladanyi, IBM T.J. Watson Research Center                  *
10 *          Matthew Saltzman, Clemson University                             *
11 *                                                                           *
12 *                                                                           *
13 * Copyright (C) 2001-2004, International Business Machines                  *
14 * Corporation, Lehigh University, Yan Xu, Ted Ralphs, Matthew Salzman and   *
15 * others. All Rights Reserved.                                              *
16 *===========================================================================*/
17
18#ifndef AlpsTime_
19#define AlpsTime_
20
21//#############################################################################
22
23#include "CoinTime.hpp"
24
25#ifdef ALPS_PARALLEL_MPI
26# include "mpi.h"
27#endif
28
29//#############################################################################
30
31#define AlpsCpuTime CoinCpuTime
32
33//#############################################################################
34
35static inline double AlpsWallClock()
36{
37
38#ifdef ALPS_SERIAL
39    double cpu_temp;
40#if defined(_MSC_VER) || defined(__MSVCRT__)
41    unsigned int ticksnow;        /* clock_t is same as int */
42    ticksnow = (unsigned int)clock();
43    cpu_temp = (double)((double)ticksnow/CLOCKS_PER_SEC);
44#else
45    double sys_temp;
46    struct rusage usage;
47    getrusage(RUSAGE_SELF,&usage);
48    cpu_temp = usage.ru_utime.tv_sec;
49    cpu_temp += 1.0e-6*((double) usage.ru_utime.tv_usec);
50    sys_temp = (double) usage.ru_stime.tv_sec
51        + 1.e-6 * (double) usage.ru_stime.tv_usec;
52#endif
53    return cpu_temp + sys_temp;
54#else
55    return MPI_Wtime();
56#endif
57}
58
59//#############################################################################
60
61/* A timer used to record cpu and wallclock time. */
62class AlpsTimer
63{
64 public:  /* Public for parallecl gather. */
65    /** Time limit. */
66    double limit_;
67   
68    double startCpu_;
69    double startWall_;
70    double finishCpu_;
71    double finishWall_;
72   
73    /** Cpu time. */
74    double cpu_;
75
76    /** Wall clock time. */
77    double wall_;
78   
79 public:
80    AlpsTimer(): limit_(ALPS_DBL_MAX) { reset(); }
81    AlpsTimer(double lt) : limit_(lt) { reset(); }
82    ~AlpsTimer()  {}
83
84    /** Reset. */
85    void reset() {
86        startCpu_ = 0.0;
87        startWall_ = 0.0;
88        finishCpu_ = 0.0;
89        finishWall_ = 0.0;
90        cpu_ = 0.0;
91        wall_ = 0.0;
92    }
93   
94    /** Start to count times. */
95    void start() {
96        startCpu_ = AlpsCpuTime();
97        startWall_ = AlpsWallClock();
98    }
99   
100    /** Stop timer and computing times. */
101    void stop() {
102        finishCpu_ = AlpsCpuTime();
103        finishWall_ = AlpsWallClock();
104        cpu_ = finishCpu_ - startCpu_;
105        wall_ = finishWall_ - startWall_;
106    }
107   
108    //{@
109    void setLimit(double lm) { limit_ = lm; }
110    double getLimit() const { return limit_; }
111    //@}
112
113    /** Get cpu timee. */
114    double getCpuTime() const { return cpu_; }
115
116    /** Get cpu timee. */
117    double getWallClock() const { return wall_; }
118   
119    /** Check if cpu time reach limit. */
120    bool reachCpuLimit() {
121        finishCpu_ = AlpsCpuTime();
122        if (finishCpu_ - startCpu_ > limit_) {
123            return true;
124        }
125        else {
126            return false;
127        }
128    }
129   
130    /** Check if wallclock time reach limit. */
131    bool reachWallLimit() {
132        finishWall_ = AlpsWallClock();
133        if (finishWall_ - startWall_ > limit_) {
134            return true;
135        }
136        else {
137            return false;
138        }
139    }
140};
141
142#endif
Note: See TracBrowser for help on using the repository browser.