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);
183 if ( ! migrationCountdown )
187 migrationCountdown = numHomePatches;
188 combineMigrationDestPes.
resize(0);
190 for (
int i=0; i < numMsgs; i++) {
194 if ( ! combineMigrationMsgs[destNodeID] )
197 combineMigrationDestPes.
add(destNodeID);
199 combineMigrationMsgs[destNodeID]->
add(src,m[i].destPatchID,m[i].mList);
206 migrationCountdown -= 1;
208 if ( ! migrationCountdown )
210 int n = combineMigrationDestPes.
size();
211 for (
int i = 0; i < n; ++i ) {
212 int destNodeID = combineMigrationDestPes[i];
213 DebugM(3,
"Sending MigrateAtomsCombinedMsg to node " << destNodeID <<
"\n");
214 CProxy_PatchMgr cp(thisgroup);
215 cp[destNodeID].recvMigrateAtomsCombined(combineMigrationMsgs[destNodeID]);
216 combineMigrationMsgs[destNodeID] = 0;
276 msg->
replica = CmiMyPartition();
278 strcpy(msg->
key,key);
279 envelope *env = UsrToEnv(CheckpointAtomsReqMsg::pack(msg));
280 CmiSetHandler(env,recvCheckpointReq_index);
281 #if CMK_HAS_PARTITION 282 CmiInterSyncSendAndFree(CkMyPe(),remote,env->getTotalsize(),(
char*)env);
284 CmiSyncSendAndFree(CkMyPe(),env->getTotalsize(),(
char*)env);
297 int patchnode = patchMap->
node(msg->
pid);
298 if ( CkMyPe() != patchnode ) {
299 thisProxy[patchnode].recvCheckpointReq(msg);
302 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvCheckpointReq");
311 envelope *env = UsrToEnv(CheckpointAtomsMsg::pack(msg));
312 CmiSetHandler(env,recvCheckpointLoad_index);
313 #if CMK_HAS_PARTITION 314 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
316 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
336 envelope *env = UsrToEnv(CheckpointAtomsMsg::pack(msg));
337 CmiSetHandler(env,recvCheckpointStore_index);
338 #if CMK_HAS_PARTITION 339 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
341 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
363 envelope *env = UsrToEnv(CheckpointAtomsReqMsg::pack(msg));
364 CmiSetHandler(env,recvCheckpointAck_index);
365 #if CMK_HAS_PARTITION 366 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
368 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
382 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvCheckpointAck");
391 msg->
dstpe = CkMyPe();
392 envelope *env = UsrToEnv(ExchangeAtomsReqMsg::pack(msg));
393 CmiSetHandler(env,recvExchangeReq_index);
394 #if CMK_HAS_PARTITION 395 CmiInterSyncSendAndFree(CkMyPe(),src,env->getTotalsize(),(
char*)env);
397 CmiSyncSendAndFree(CkMyPe(),env->getTotalsize(),(
char*)env);
408 int patchnode = patchMap->
node(msg->
pid);
409 if ( CkMyPe() != patchnode ) {
410 thisProxy[patchnode].recvExchangeReq(msg);
413 if ( ! hp )
NAMD_bug(
"null HomePatch pointer in PatchMgr::recvExchangeReq");
420 envelope *env = UsrToEnv(ExchangeAtomsMsg::pack(msg));
421 CmiSetHandler(env,recvExchangeMsg_index);
422 #if CMK_HAS_PARTITION 423 CmiInterSyncSendAndFree(dstpe,dst,env->getTotalsize(),(
char*)env);
425 CmiSyncSendAndFree(dstpe,env->getTotalsize(),(
char*)env);
452 #include
"PatchMgr.def.h"
void recvCheckpointLoad(CheckpointAtomsMsg *msg)
void recvCheckpointReq_handler(envelope *env)
NAMD_HOST_DEVICE Position reverse_transform(Position data, const Transform &t) const
void setHomePatchFixedAtomNum(int patchId, int numFixed)
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)
ResizeArrayIter< T > begin(void) const
void recvExchangeReq(ExchangeAtomsReqMsg *msg)
#define PACK_MSG(MSGTYPE, MSGDATA)
HomePatch * homePatch(PatchID pid)
int add(const Elem &elem)
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)
void recvCheckpointStore(CheckpointAtomsMsg *msg)
void recvAtoms(MovePatchesMsg *msg)
void recvMigrateAtomsCombined(MigrateAtomsCombinedMsg *)
NAMD_HOST_DEVICE Position apply_transform(Position data, const Transform &t) const
void NAMD_bug(const char *err_msg)
ResizeArray< PatchID > srcPatchID
void recvCheckpointLoad_handler(envelope *env)
LocalID localID(AtomID id)
int load(const Elem &elem)
void setNumFixedAtoms(int numFixed)
void sendMigrationMsgs(PatchID, MigrationInfo *, int)
void setLattice(SetLatticeMsg *msg)
void del(const Elem &elem)
void recvCheckpointAck_handler(envelope *env)
static AtomMap * Object()
void sendCheckpointLoad(CheckpointAtomsMsg *msg, int dst, int dstpe)
void moveAtom(MoveAtomMsg *msg)
#define PACK_RESIZE(DATA)
void recvCheckpointAck(CheckpointAtomsReqMsg *msg)
void recvCheckpointStore_handler(envelope *env)
static void registerPatchMgr(PatchMgr *pmgr)
Elem * find(const Elem &elem)
void recvExchangeReq(int req)
void moveAllBy(MoveAllByMsg *msg)
HomePatch * homePatch(PatchID pid)
void registerPatch(PatchID pid, HomePatch *pptr)
ResizeArrayIter< T > end(void) const
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)
void recvExchangeMsg(ExchangeAtomsMsg *msg)
void recvMovePatches(MovePatchesMsg *msg)