00001
00007
00008
00009
00010
00011
00012
00013 #ifndef COMPUTE_H
00014 #define COMPUTE_H
00015
00016 #include "main.h"
00017 #include "charm++.h"
00018
00019 #include "NamdTypes.h"
00020
00021 class Node;
00022 class PatchMap;
00023 class LocalWorkMsg;
00024
00025
00026
00027
00028 class Compute {
00029 private:
00030 int patchReadyCounter;
00031 int numPatches;
00032 int doAtomUpdate;
00033 int sequenceNumber;
00034
00035 protected:
00036 int computeType;
00037 int basePriority;
00038 void enqueueWork();
00039 int gbisPhase;
00040 int gbisPhasePriority[3];
00041
00042 public:
00043 const ComputeID cid;
00044 LDObjHandle ldObjHandle;
00045
00046 LocalWorkMsg *const localWorkMsg;
00047 Compute(ComputeID);
00048 int type() { return computeType; };
00049
00050 virtual ~Compute();
00051
00052 void setNumPatches(int n) { patchReadyCounter = numPatches = n; }
00053 int getNumPatches() { return (numPatches); };
00054
00055
00056 virtual void initialize() {};
00057
00058
00059 virtual void atomUpdate() {};
00060 virtual void patchReady(PatchID, int doneMigration, int seq);
00061 virtual int noWork();
00062 virtual void doWork();
00063 int sequence(void) { return sequenceNumber; }
00064 int priority(void) { return basePriority+gbisPhasePriority[gbisPhase-1]; }
00065 int getGBISPhase(void) {return gbisPhase;}
00066
00067 virtual void gbisP2PatchReady(PatchID, int seq);
00068 virtual void gbisP3PatchReady(PatchID, int seq);
00069
00070 };
00071
00072
00073
00074
00075
00076 #define TRACE_COMPOBJ_IDOFFSET 10000
00077
00078 #endif
00079