8 #include "PatchMgr.decl.h"
18 #include "main.decl.h"
21 #include "WorkDistrib.decl.h"
29 #define MIN_DEBUG_LEVEL 3
39 if (CkpvAccess(PatchMgr_instance) == NULL) {
40 CkpvAccess(PatchMgr_instance) =
this;
42 NAMD_bug(
"PatchMgr instanced twice on same processor!");
58 migrationCountdown = 0;
60 int numPes = CkNumPes();
61 for (
int i = 0; i < numPes; ++i ) combineMigrationMsgs[i] = 0;
67 for ( hi = hi.
begin(); hi != hi.
end(); hi++) {
71 delete [] combineMigrationMsgs;
101 if ( msg->
atom.
shared() )
NAMD_bug(
"shared message array in PatchMgr::sendOneHomePatch");
104 CProxy_PatchMgr cp(thisgroup);
105 cp[nodeId].recvMovePatches(msg);
116 for ( m = m.
begin(); m != m.
end(); m++) {
128 if ( msg->
atom.
shared() )
NAMD_bug(
"shared message array in PatchMgr::sendMovePatches");
131 CProxy_PatchMgr cp(thisgroup);
132 cp[m->nodeID].recvMovePatches(msg);
163 CProxy_PatchMgr cp(thisgroup);
164 cp[patchMap->
node(pid)].recvAtoms(msg);
181 if ( ! migrationCountdown )
185 migrationCountdown = numHomePatches;
186 combineMigrationDestPes.
resize(0);
188 for (
int i=0; i < numMsgs; i++) {
192 if ( ! combineMigrationMsgs[destNodeID] )
195 combineMigrationDestPes.
add(destNodeID);
197 combineMigrationMsgs[destNodeID]->
add(src,m[i].destPatchID,m[i].mList);
204 migrationCountdown -= 1;
206 if ( ! migrationCountdown )
208 int n = combineMigrationDestPes.
size();
209 for (
int i = 0; i < n; ++i ) {
210 int destNodeID = combineMigrationDestPes[i];
211 DebugM(3,
"Sending MigrateAtomsCombinedMsg to node " << destNodeID <<
"\n");
212 CProxy_PatchMgr cp(thisgroup);
213 cp[destNodeID].recvMigrateAtomsCombined(combineMigrationMsgs[destNodeID]);
214 combineMigrationMsgs[destNodeID] = 0;
274 msg->
replica = CmiMyPartition();
276 strcpy(msg->
key,key);
277 envelope *env = UsrToEnv(CheckpointAtomsReqMsg::pack(msg));
278 CmiSetHandler(env,recvCheckpointReq_index);
279 #if CMK_HAS_PARTITION
280 CmiInterSyncSendAndFree(CkMyPe(),remote,env->getTotalsize(),(
char*)env);
282 CmiSyncSendAndFree(CkMyPe(),env->getTotalsize(),(
char*)env);
295 int patchnode = patchMap->
node(msg->
pid);
296 if ( CkMyPe() != patchnode ) {
297 thisProxy[patchnode].recvCheckpointReq(msg);
300 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvCheckpointReq");
309 envelope *env = UsrToEnv(CheckpointAtomsMsg::pack(msg));
310 CmiSetHandler(env,recvCheckpointLoad_index);
311 #if CMK_HAS_PARTITION
312 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
314 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
334 envelope *env = UsrToEnv(CheckpointAtomsMsg::pack(msg));
335 CmiSetHandler(env,recvCheckpointStore_index);
336 #if CMK_HAS_PARTITION
337 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
339 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
361 envelope *env = UsrToEnv(CheckpointAtomsReqMsg::pack(msg));
362 CmiSetHandler(env,recvCheckpointAck_index);
363 #if CMK_HAS_PARTITION
364 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
366 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
380 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvCheckpointAck");
389 msg->
dstpe = CkMyPe();
390 envelope *env = UsrToEnv(ExchangeAtomsReqMsg::pack(msg));
391 CmiSetHandler(env,recvExchangeReq_index);
392 #if CMK_HAS_PARTITION
393 CmiInterSyncSendAndFree(CkMyPe(),src,env->getTotalsize(),(
char*)env);
395 CmiSyncSendAndFree(CkMyPe(),env->getTotalsize(),(
char*)env);
406 int patchnode = patchMap->
node(msg->
pid);
407 if ( CkMyPe() != patchnode ) {
408 thisProxy[patchnode].recvExchangeReq(msg);
411 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvExchangeReq");
418 envelope *env = UsrToEnv(ExchangeAtomsMsg::pack(msg));
419 CmiSetHandler(env,recvExchangeMsg_index);
420 #if CMK_HAS_PARTITION
421 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
423 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
445 #include
"PatchMgr.def.h"
void recvCheckpointLoad(CheckpointAtomsMsg *msg)
void recvCheckpointReq_handler(envelope *env)
SimParameters * simParameters
void sendOneHomePatch(int patchId, int nodeId)
void recvExchangeReq_handler(envelope *env)
void createHomePatch(PatchID pid, FullAtomList &a)
void sendAtoms(PatchID pid, FullAtomList &a)
void add(PatchID source, PatchID destination, MigrationList &m)
void recvExchangeMsg(ExchangeAtomsMsg *msg)
void sendExchangeReq(int pid, int src)
void recvExchangeReq(ExchangeAtomsReqMsg *msg)
#define PACK_MSG(MSGTYPE, MSGDATA)
HomePatch * homePatch(PatchID pid)
void recvCheckpointReq(int task, const char *key, int replica, int pe)
void movePatch(PatchID, NodeID)
void unregisterPatch(PatchID pid, HomePatch *pptr)
void sendCheckpointAck(int pid, int dst, int dstpe)
void recvCheckpointLoad(CheckpointAtomsMsg *msg)
ResizeArrayIter< T > end(void) const
void recvCheckpointStore(CheckpointAtomsMsg *msg)
void recvAtoms(MovePatchesMsg *msg)
void recvMigrateAtomsCombined(MigrateAtomsCombinedMsg *)
void NAMD_bug(const char *err_msg)
ResizeArray< PatchID > srcPatchID
void recvCheckpointLoad_handler(envelope *env)
LocalID localID(AtomID id)
void sendMigrationMsgs(PatchID, MigrationInfo *, int)
void setLattice(SetLatticeMsg *msg)
void recvCheckpointAck_handler(envelope *env)
static AtomMap * Object()
int add(const Elem &elem)
void sendCheckpointLoad(CheckpointAtomsMsg *msg, int dst, int dstpe)
void moveAtom(MoveAtomMsg *msg)
#define PACK_RESIZE(DATA)
void recvCheckpointAck(CheckpointAtomsReqMsg *msg)
Position apply_transform(Position data, const Transform &t) const
void recvCheckpointStore_handler(envelope *env)
static void registerPatchMgr(PatchMgr *pmgr)
Position reverse_transform(Position data, const Transform &t) const
void del(const Elem &elem)
void recvExchangeReq(int req)
void moveAllBy(MoveAllByMsg *msg)
Elem * find(const Elem &elem)
HomePatch * homePatch(PatchID pid)
void registerPatch(PatchID pid, HomePatch *pptr)
int load(const Elem &elem)
static PatchMap * Instance()
void sendCheckpointStore(CheckpointAtomsMsg *msg, int dst, int dstpe)
void recvCheckpointReq(CheckpointAtomsReqMsg *msg)
void sendCheckpointReq(int pid, int remote, const char *key, int task)
static PatchMgr * Object()
void recvExchangeMsg_handler(envelope *env)
void sendExchangeMsg(ExchangeAtomsMsg *msg, int dst, int dstpe)
void recvCheckpointStore(CheckpointAtomsMsg *msg)
ResizeArrayIter< T > begin(void) const
void recvExchangeMsg(ExchangeAtomsMsg *msg)
void recvMovePatches(MovePatchesMsg *msg)