17 #define MIN_DEBUG_LEVEL 4    42   delete [] computePtrs;
    48   int computeCount = nComputes;
    49   for (
int i=0; i<nComputes; i++) {
    52       if (! (computePtrs[i]->cid == i)) {
    53         DebugM(4, 
"ComputeID("<<computePtrs[i]->cid<<
") != ComputeID("    58   DebugM(4, 
"Compute Count = " << computeCount << 
"\n");
    63   DebugM(4,
"Packing ComputeMap\n");
    65   msg->
put(nComputes,computeData.begin());
    70   DebugM(4,
"Unpacking ComputeMap\n");
    73   if ( old && old != nComputes ) {
    74     NAMD_bug(
"number of computes in new ComputeMap has changed!\n");
    76   computeData.resize(nComputes);
    77   msg->
get(nComputes,computeData.begin());
    81   if ( ! computePtrs ) {
    82     computePtrs = 
new Compute*[nComputes];
    83     memset(computePtrs, 0, nComputes*
sizeof(
Compute*));
    88   if ( ! computePtrs ) 
NAMD_bug(
"ComputeMap::extendPtrs() 1");
    90   nComputes = computeData.size();
    91   if ( nComputes > oldN ) {
    92     Compute **oldPtrs = computePtrs;
    93     computePtrs = 
new Compute*[nComputes];
    94     memcpy(computePtrs, oldPtrs, oldN*
sizeof(
Compute*));
    95     memset(computePtrs+oldN, 0, (nComputes-oldN)*
sizeof(
Compute*));
   103     return computeData[cid].numPids;
   109     return computeData[cid].pids[i].pid;
   114     return computeData[cid].pids[i].trans;
   121     return computeData[cid].type;
   129     return computeData[cid].partition;
   136     return computeData[cid].numPartitions;
   144   computeData.resize(500);
   145   computeData.resize(0);
   156     NAMD_bug(
"ComputeMap::storeCompute called with maxPids > numPidsAllocated");
   163   computeData.resize(nComputes);
   165   computeData[cid].node=inode;
   167   computeData[cid].type = 
type;
   171   computeData[cid].numPids = 0;
   173   #if defined(NAMD_MIC)   176     computeData[cid].directToDevice = 0;
   185   const int cid = computeData.size();
   186   computeData.resize(cid+1);
   188   computeData[cid] = computeData[src];
   190   computeData[cid].node = -1;
   198   computeData[cid].pids[computeData[cid].numPids].pid=
pid;
   199   computeData[cid].pids[computeData[cid].numPids].trans=
trans;
   200   computeData[cid].numPids++;
   206   DebugM(2,
"---------------------------------------");
   207   DebugM(2,
"---------------------------------------\n");
   209   DebugM(2,
"nComputes = " << nComputes << 
'\n');
   210   DebugM(2,
"nAllocated = " << nComputes << 
'\n');
   211   for(
int i=0; i < nComputes; i++)
   213     DebugM(2,
"Compute " << i << 
'\n');
   214     DebugM(2,
"  node = " << computeData[i].
node << 
'\n');
   216     for(
int j=0; j < computeData[i].numPids; j++)
   222     DebugM(2,
"\n---------------------------------------");
   223     DebugM(2,
"---------------------------------------\n");
   227 #ifdef MEM_OPT_VERSION   228 const char *fname = 
"computeMap.opt";
   230 const char *fname = 
"computeMap.orig";
   233   FILE *ofp = fopen(fname, 
"w");
   234   fprintf(ofp,
"---------------------------------------");
   235   fprintf(ofp,
"---------------------------------------\n");
   237   fprintf(ofp,
"nComputes = %d\n", nComputes);
   238   fprintf(ofp,
"nAllocated = %d\n", nComputes);
   239   for(
int i=0; i < nComputes; i++)
   241     fprintf(ofp,
"Compute %d\n", i);
   242     fprintf(ofp,
"  node = %d\n",computeData[i].
node);
   243     fprintf(ofp,
"  numPids = %d\n",computeData[i].
numPids);
   244         fprintf(ofp,
"  type = %d\n",computeData[i].
type);
   245     for(
int j=0; j < computeData[i].numPids; j++)
   247       fprintf(ofp,
"%d ",computeData[i].pids[j].
pid);
   251     fprintf(ofp,
"\n---------------------------------------");
   252     fprintf(ofp,
"---------------------------------------\n");
   262   static int count = 0;
   264   sprintf(f, 
"%s.%d", fname, count++);
   265   FILE *fp = fopen(f, 
"w");
   266   CmiAssert(fp != NULL);
   267   fprintf(fp, 
"%d\n", nComputes);
   268   for(
int i=0; i < nComputes; i++)
   270     fprintf(fp, 
"%d\n", computeData[i].
node);
   273   CkPrintf(
"ComputeMap has been stored in %s.\n", f);
   278   FILE *fp = fopen(fname, 
"r");
   279   CmiAssert(fp != NULL);
   281   fscanf(fp, 
"%d\n", &n);
   282   CmiAssert(n == nComputes);
   283   for(
int i=0; i < nComputes; i++)
   285     fscanf(fp, 
"%d\n", &computeData[i].
node);
   291 #if defined(NAMD_MIC)   293 void ComputeMap::setDirectToDevice(
const ComputeID cid, 
const int d) {
   294   if (cid < 0 || cid >= nComputes) {
   295     NAMD_bug(
"ComputeMap::setDirectToDevice() called with an invalid cid value");
   297   computeData[cid].directToDevice = ((d == 0) ? (0) : (1));
   300 int ComputeMap::directToDevice(
const ComputeID cid)
 const {
   301   if (cid < 0 || cid >= nComputes) {
   302     NAMD_bug(
"ComputeMap::directToDevice() called with an invalid cid value");
   304   return computeData[cid].directToDevice;
   307 #endif // defined(NAMD_MIC) 
void saveComputeMap(const char *fname)
 
static void partition(int *order, const FullAtom *atoms, int begin, int end)
 
void loadComputeMap(const char *fname)
 
MIStream * get(char &data)
 
ComputeID storeCompute(int node, int maxPids, ComputeType type, int partition=-1, int numPartitions=0)
 
void printComputeMap(void)
 
void NAMD_bug(const char *err_msg)
 
ComputeType type(ComputeID cid)
 
int numPartitions(ComputeID cid)
 
int partition(ComputeID cid)
 
static ComputeMap * Instance()
 
void newPid(ComputeID cid, int pid, int trans=13)
 
ComputeID cloneCompute(ComputeID src, int partition)
 
int numPids(ComputeID cid)
 
MOStream * put(char data)
 
int pid(ComputeID cid, int i)
 
int trans(ComputeID cid, int i)
 
void unpack(MIStream *msg)