11 #define TINYLOAD 0.0005
15 int nPatches,
int nPes,
int nNbs) :
17 processorArray, nComps,
26 void AlgNbor::strategy()
29 double startTime = CmiWallTimer();
39 if (
processors[mype].available ==
false)
return;
50 avgload /= (nNbors+1);
52 if (myload <= avgload)
return;
54 CmiPrintf(
"[%d]:Myload: %f, avrage load: %f. \n", mype, myload, avgload);
68 double goodSize[3][3];
77 goodCompute[i][j] = 0;
84 if (
processors[mype].computeSet.hasElements() == 0)
break;
90 int nPatches, nProxies, badForComm;
93 if ( c->
load > goodSize[nPatches][nProxies] ) {
94 goodSize[nPatches][nProxies] = c->
load;
95 goodCompute[nPatches][nProxies] = c;
96 goodP[nPatches][nProxies] = p;
107 if (goodCompute[2][0]) {
109 assign(goodCompute[2][0], goodP[2][0]);
111 }
else if (goodCompute[1][1]) {
113 assign(goodCompute[1][1], goodP[1][1]);
115 }
else if (goodCompute[0][2]) {
117 assign(goodCompute[0][2], goodP[0][2]);
119 }
else if (goodCompute[1][0]) {
121 assign(goodCompute[1][0], goodP[1][0]);
123 }
else if (goodCompute[0][1]) {
125 assign(goodCompute[0][1], goodP[0][1]);
127 }
else if (goodCompute[0][0]) {
129 assign(goodCompute[0][0], goodP[0][0]);
132 iout <<
iINFO <<
"AlgNbor: No receiver found" <<
"\n" <<
endi;
136 lightProcessors->
remove(bestP);
248 CmiPrintf(
"AlgNbor finish time: %f.\n", CmiWallTimer()-startTime);
BlockLoad::TempStorage load
std::ostream & iINFO(std::ostream &s)
AlgNbor(int pe, computeInfo *computeArray, patchInfo *patchArray, processorInfo *processorArray, int nComps, int nPatches, int nPes, int nNbs)
void assign(computeInfo *c, processorInfo *pRec)
void insert(InfoRecord *)
processorInfo * processors
void numAvailable(computeInfo *c, processorInfo *p, int *nPatches, int *nProxies, int *isBadForCommunication)
static Units next(Units u)
void deAssign(computeInfo *c, processorInfo *pRec)
InfoRecord * next(Iterator *)
infostream & endi(infostream &s)
InfoRecord * iterator(Iterator *)
const char * strategyName