00001
00007 #ifndef COMPUTEMGR_H
00008 #define COMPUTEMGR_H
00009
00010 #include "charm++.h"
00011 #include "main.h"
00012 #include <new>
00013
00014 #include "NamdTypes.h"
00015 #include "BOCgroup.h"
00016
00017 #include "ResizeArray.h"
00018
00019 #include "GlobalMaster.h"
00020 #include "GlobalMasterServer.h"
00021 #include "ComputeMgr.decl.h"
00022
00023 class Compute;
00024 class ComputeMap;
00025 class CkQdMsg;
00026
00027 class ComputeGlobal;
00028 class ComputeGlobalConfigMsg;
00029 class ComputeGlobalDataMsg;
00030 class ComputeGlobalResultsMsg;
00031
00032 class ComputeDPME;
00033 class ComputeDPMEDataMsg;
00034 class ComputeDPMEResultsMsg;
00035 class ComputeConsForceMsg;
00036
00037 class ComputeEwald;
00038 class ComputeEwaldMsg;
00039
00040 class ComputeNonbondedCUDA;
00041 class NonbondedCUDASlaveMsg;
00042
00043 class ComputeNonbondedWorkArrays;
00044
00045 class ComputeMgr : public BOCclass
00046 {
00047 public:
00048
00049 ComputeMgr();
00050 ~ComputeMgr();
00051 void createComputes(ComputeMap *map);
00052 void updateComputes(int,CkGroupID);
00053 void updateComputes2(CkQdMsg *);
00054 void updateComputes3();
00055 void splitComputes();
00056 void splitComputes2(CkQdMsg *);
00057 void updateLocalComputes();
00058 void updateLocalComputes2(CkQdMsg *);
00059 void updateLocalComputes3();
00060 void updateLocalComputes4(CkQdMsg *);
00061 void updateLocalComputes5();
00062 void doneUpdateLocalComputes();
00063
00064 void sendComputeGlobalConfig(ComputeGlobalConfigMsg *);
00065 void recvComputeGlobalConfig(ComputeGlobalConfigMsg *);
00066 void sendComputeGlobalData(ComputeGlobalDataMsg *);
00067 void recvComputeGlobalData(ComputeGlobalDataMsg *);
00068 void sendComputeGlobalResults(ComputeGlobalResultsMsg *);
00069 void recvComputeGlobalResults(ComputeGlobalResultsMsg *);
00070
00071 void sendComputeDPMEData(ComputeDPMEDataMsg *);
00072 void recvComputeDPMEData(ComputeDPMEDataMsg *);
00073 void sendComputeDPMEResults(ComputeDPMEResultsMsg *, int);
00074 void recvComputeDPMEResults(ComputeDPMEResultsMsg *);
00075
00076 void sendComputeEwaldData(ComputeEwaldMsg *);
00077 void recvComputeEwaldData(ComputeEwaldMsg *);
00078 void sendComputeEwaldResults(ComputeEwaldMsg *);
00079 void recvComputeEwaldResults(ComputeEwaldMsg *);
00080
00081 void recvComputeConsForceMsg(ComputeConsForceMsg *);
00082
00083
00084 ComputeGlobal *computeGlobalObject;
00085
00086 void sendYieldDevice(int pe);
00087 void recvYieldDevice(int pe);
00088 void sendBuildCudaForceTable();
00089 void recvBuildCudaForceTable();
00090 void sendCreateNonbondedCUDASlave(int,int);
00091 void recvCreateNonbondedCUDASlave(NonbondedCUDASlaveMsg *);
00092 void sendNonbondedCUDASlaveReady(int,int,int,int);
00093 void recvNonbondedCUDASlaveReady(int,int,int);
00094 void sendNonbondedCUDASlaveEnqueue(ComputeNonbondedCUDA *c, int,int,int,int);
00095
00096 private:
00097 void createCompute(ComputeID, ComputeMap *);
00098
00099 GlobalMasterServer *masterServerObject;
00100 ComputeDPME *computeDPMEObject;
00101
00102 ComputeEwald *computeEwaldObject;
00103
00104 ComputeNonbondedCUDA *computeNonbondedCUDAObject;
00105
00106 ComputeNonbondedWorkArrays *computeNonbondedWorkArrays;
00107
00108 int skipSplitting;
00109 int updateComputesCount;
00110 int updateComputesReturnEP;
00111 CkGroupID updateComputesReturnChareID;
00112
00113 ResizeArray<int> computeFlag;
00114 };
00115
00116 #endif
00117