NAMD
Compute.h
Go to the documentation of this file.
1 
7 /*
8  Base class for all Compute objects. Almost an abstract
9  class except that it does do the basic patchReady()
10  countdown.
11 */
12 
13 #ifndef COMPUTE_H
14 #define COMPUTE_H
15 
16 #include "main.h"
17 #include "charm++.h"
18 
19 #include "NamdTypes.h"
20 
21 class Node;
22 class PatchMap;
23 class LocalWorkMsg;
24 
25 // Base class for various forms of Compute objects
26 // for example: <linkto class=ComputeAngles>ComputeAngles</linkto>
27 // and <linkto class=ComputeNonbondedExcl>ComputeNonbondedExcl</linkto>
28 class Compute {
29 private:
30  int patchReadyCounter;
31  int numPatches;
32  int doAtomUpdate;
33  int sequenceNumber;
34 
35 protected:
38  void enqueueWork();
39  int gbisPhase;//earlier phases have higher priority
40  int gbisPhasePriority[3];//earlier phases have higher priority
41 
42 public:
43  const ComputeID cid;
44  LDObjHandle ldObjHandle;
45 
48  int type() { return computeType; };
49 
50  virtual ~Compute();
51 
52  void setNumPatches(int n) { patchReadyCounter = numPatches = n; }
53  int getNumPatches() { return (numPatches); };
54 
55  // registers for boxes
56  virtual void initialize() {};
57  // destructor better unregister for boxes!
58 
59  virtual void atomUpdate() {};
60  virtual void patchReady(PatchID, int doneMigration, int seq);
61  virtual int noWork(); // cleans up and returns 1 if no work to do
62  virtual void doWork(); // actually does the work if noWork() returns 0
63  virtual void finishPatch(int);
64  int sequence(void) { return sequenceNumber; }
66  int getGBISPhase(void) {return gbisPhase;}
67 
68  virtual void gbisP2PatchReady(PatchID, int seq);
69  virtual void gbisP3PatchReady(PatchID, int seq);
70 
71 };
72 
73 /* For projection's usage: each compute object's work is associated
74  * with a user event in projections. This macro indicates the offset
75  * of the event ID that those compute objects' user events begin with.
76  */
77 #define TRACE_COMPOBJ_IDOFFSET 10000
78 
79 #endif
80 
void setNumPatches(int n)
Definition: Compute.h:52
virtual void gbisP3PatchReady(PatchID, int seq)
Definition: Compute.C:94
int sequence(void)
Definition: Compute.h:64
Definition: Node.h:78
int ComputeID
Definition: NamdTypes.h:183
virtual void initialize()
Definition: Compute.h:56
LDObjHandle ldObjHandle
Definition: Compute.h:44
int getGBISPhase(void)
Definition: Compute.h:66
LocalWorkMsg *const localWorkMsg
Definition: Compute.h:46
virtual void gbisP2PatchReady(PatchID, int seq)
Definition: Compute.C:84
virtual void doWork()
Definition: Compute.C:108
virtual ~Compute()
Definition: Compute.C:43
int computeType
Definition: Compute.h:36
int gbisPhasePriority[3]
Definition: Compute.h:40
int priority(void)
Definition: Compute.h:65
int PatchID
Definition: NamdTypes.h:182
virtual void finishPatch(int)
Definition: Compute.C:112
int gbisPhase
Definition: Compute.h:39
int getNumPatches()
Definition: Compute.h:53
void enqueueWork()
Definition: Compute.C:47
int type()
Definition: Compute.h:48
virtual void atomUpdate()
Definition: Compute.h:59
virtual void patchReady(PatchID, int doneMigration, int seq)
Definition: Compute.C:63
int basePriority
Definition: Compute.h:37
virtual int noWork()
Definition: Compute.C:104
Compute(ComputeID)
Definition: Compute.C:33
const ComputeID cid
Definition: Compute.h:43