source: trunk/Alps/src/AlpsTime.h @ 277

Last change on this file since 277 was 277, checked in by andreasw, 13 years ago

first working version with autotools

  • 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 "AlpsConfig.h"
24
25#include "CoinTime.hpp"
26
27#ifdef COIN_HAS_MPI
28# include "mpi.h"
29#endif
30
31//#############################################################################
32
33#define AlpsCpuTime CoinCpuTime
34
35//#############################################################################
36
37static inline double AlpsWallClock()
38{
39
40#ifndef COIN_HAS_MPI
41    double cpu_temp;
42#if defined(_MSC_VER) || defined(__MSVCRT__)
43    unsigned int ticksnow;        /* clock_t is same as int */
44    ticksnow = (unsigned int)clock();
45    cpu_temp = (double)((double)ticksnow/CLOCKS_PER_SEC);
46#else
47    double sys_temp;
48    struct rusage usage;
49    getrusage(RUSAGE_SELF,&usage);
50    cpu_temp = usage.ru_utime.tv_sec;
51    cpu_temp += 1.0e-6*((double) usage.ru_utime.tv_usec);
52    sys_temp = (double) usage.ru_stime.tv_sec
53        + 1.e-6 * (double) usage.ru_stime.tv_usec;
54#endif
55    return cpu_temp + sys_temp;
56#else
57    return MPI_Wtime();
58#endif
59}
60
61//#############################################################################
62
63/* A timer used to record cpu and wallclock time. */
64class AlpsTimer
65{
66 public:  /* Public for parallecl gather. */
67    /** Time limit. */
68    double limit_;
69   
70    double startCpu_;
71    double startWall_;
72    double finishCpu_;
73    double finishWall_;
74   
75    /** Cpu time. */
76    double cpu_;
77
78    /** Wall clock time. */
79    double wall_;
80   
81 public:
82    AlpsTimer(): limit_(ALPS_DBL_MAX) { reset(); }
83    AlpsTimer(double lt) : limit_(lt) { reset(); }
84    ~AlpsTimer()  {}
85
86    /** Reset. */
87    void reset() {
88        startCpu_ = 0.0;
89        startWall_ = 0.0;
90        finishCpu_ = 0.0;
91        finishWall_ = 0.0;
92        cpu_ = 0.0;
93        wall_ = 0.0;
94    }
95   
96    /** Start to count times. */
97    void start() {
98        startCpu_ = AlpsCpuTime();
99        startWall_ = AlpsWallClock();
100    }
101   
102    /** Stop timer and computing times. */
103    void stop() {
104        finishCpu_ = AlpsCpuTime();
105        finishWall_ = AlpsWallClock();
106        cpu_ = finishCpu_ - startCpu_;
107        wall_ = finishWall_ - startWall_;
108    }
109   
110    //{@
111    void setLimit(double lm) { limit_ = lm; }
112    double getLimit() const { return limit_; }
113    //@}
114
115    /** Get cpu timee. */
116    double getCpuTime() const { return cpu_; }
117
118    /** Get cpu timee. */
119    double getWallClock() const { return wall_; }
120   
121    /** Check if cpu time reach limit. */
122    bool reachCpuLimit() {
123        finishCpu_ = AlpsCpuTime();
124        if (finishCpu_ - startCpu_ > limit_) {
125            return true;
126        }
127        else {
128            return false;
129        }
130    }
131   
132    /** Check if wallclock time reach limit. */
133    bool reachWallLimit() {
134        finishWall_ = AlpsWallClock();
135        if (finishWall_ - startWall_ > limit_) {
136            return true;
137        }
138        else {
139            return false;
140        }
141    }
142};
143
144#endif
Note: See TracBrowser for help on using the repository browser.