00001
00005
00006 #ifndef LBOBJ_H
00007 #define LBOBJ_H
00008
00009 #include "lbdb.h"
00010
00011 class LBDB;
00012
00013 class LBObj
00014 {
00015 friend class LBDB;
00016
00017 public:
00018 LBObj(LBDB *_parentDB, const LDObjHandle &_h, void *usr_ptr = NULL, CmiBool _migratable=CmiTrue, CmiBool _asyncArrival = CmiFalse) {
00019 data.handle = _h;
00020 data.migratable = _migratable;
00021 data.asyncArrival = _asyncArrival;
00022 Clear();
00023
00024
00025
00026
00027 userData = usr_ptr;
00028 parentDB = _parentDB;
00029
00030
00031 startWTime = -1.0;
00032 lastWallTime = .0;
00033 #if CMK_LB_CPUTIMER
00034 startCTime = -1.0;
00035 lastCpuTime = .0;
00036 #endif
00037 }
00038
00039 ~LBObj() { };
00040
00041 #if 0
00042 LBObj(LBDB *_parentDB, LDOMHandle _omhandle, LDObjid _id,
00043 void *_userData = 0, CmiBool _migratable=CmiTrue) {
00044 parentDB = _parentDB;
00045
00046
00047
00048 migratable = _migratable;
00049 registered = CmiFalse;
00050 };
00051
00052 void DepositHandle(const LDObjHandle &_h) {
00053
00054
00055 data.handle = _h;
00056
00057 data.migratable = migratable;
00058 data.cpuTime = 0.;
00059 data.wallTime = 0.;
00060 registered = CmiTrue;
00061 };
00062 #endif
00063
00064 void Clear(void);
00065
00066 void IncrementTime(LBRealType walltime, LBRealType cputime);
00067 inline void StartTimer(void) {
00068 startWTime = CkWallTimer();
00069 #if CMK_LB_CPUTIMER
00070 startCTime = CkCpuTimer();
00071 #endif
00072 }
00073 inline void StopTimer(LBRealType* walltime, LBRealType* cputime) {
00074 if (startWTime >= 0.0) {
00075 const double endWTime = CkWallTimer();
00076 *walltime = endWTime - startWTime;
00077 #if CMK_LB_CPUTIMER
00078 const double endCTime = CkCpuTimer();
00079 *cputime = endCTime - startCTime;
00080 #else
00081 *cputime = *walltime;
00082 #endif
00083 }
00084 else {
00085 *walltime = *cputime = 0.0;
00086 }
00087 }
00088
00089 inline void getTime(LBRealType *w, LBRealType *c) {
00090 *w = data.wallTime;
00091 #if CMK_LB_CPUTIMER
00092 *c = data.cpuTime;
00093 #else
00094 *c = *w;
00095 #endif
00096 }
00097
00098 inline void setTiming(LBRealType cputime)
00099 {
00100 data.wallTime = cputime;
00101 #if CMK_LB_CPUTIMER
00102 data.cpuTime = cputime;
00103 #endif
00104 }
00105
00106 inline LDOMHandle &parentOM() { return data.handle.omhandle; }
00107 inline const LDObjHandle &GetLDObjHandle() const { return data.handle; }
00108 inline void SetMigratable(CmiBool mig) { data.migratable = mig; }
00109 inline void UseAsyncMigrate(CmiBool async) { data.asyncArrival = async; }
00110 inline LDObjData &ObjData() { return data; };
00111 inline void lastKnownLoad(LBRealType *w, LBRealType *c) {
00112 *w = lastWallTime;
00113 #if CMK_LB_CPUTIMER
00114 *c = lastCpuTime;
00115 #else
00116 *c = *w;
00117 #endif
00118 }
00119 inline void *getUserData() { return userData; }
00120 private:
00121
00122 LBDB* parentDB;
00123 void *userData;
00124
00125
00126 LDObjData data;
00127
00128 double startWTime;
00129 LBRealType lastWallTime;
00130 #if CMK_LB_CPUTIMER
00131 double startCTime;
00132 LBRealType lastCpuTime;
00133 #endif
00134
00135 };
00136
00137 #endif
00138