本文整理汇总了C++中CkVec::length方法的典型用法代码示例。如果您正苦于以下问题:C++ CkVec::length方法的具体用法?C++ CkVec::length怎么用?C++ CkVec::length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CkVec
的用法示例。
在下文中一共展示了CkVec::length方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: new
// generate migrate message from stats->from_proc and to_proc
LBMigrateMsg * CentralLB::createMigrateMsg(LDStats* stats)
{
int i;
CkVec<MigrateInfo*> migrateInfo;
for (i=0; i<stats->n_objs; i++) {
LDObjData &objData = stats->objData[i];
int frompe = stats->from_proc[i];
int tope = stats->to_proc[i];
if (frompe != tope) {
// CkPrintf("[%d] Obj %d migrating from %d to %d\n",
// CkMyPe(),obj,pe,dest);
MigrateInfo *migrateMe = new MigrateInfo;
migrateMe->obj = objData.handle;
migrateMe->from_pe = frompe;
migrateMe->to_pe = tope;
migrateMe->async_arrival = objData.asyncArrival;
migrateInfo.insertAtEnd(migrateMe);
}
}
int migrate_count=migrateInfo.length();
LBMigrateMsg* msg = new(migrate_count,CkNumPes(),CkNumPes(),0) LBMigrateMsg;
msg->n_moves = migrate_count;
for(i=0; i < migrate_count; i++) {
MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
msg->moves[i] = *item;
delete item;
migrateInfo[i] = 0;
}
return msg;
}
示例2: getLBAllocFn
LBAllocFn getLBAllocFn(const char *name) {
char *ptr = strpbrk((char *)name, ":,");
int slen = ptr-name;
for (int i=0; i<lbtables.length(); i++)
if (0==strncmp(name, lbtables[i].name, slen)) return lbtables[i].afn;
return NULL;
}
示例3: search
LBCreateFn search(const char *name) {
char *ptr = strpbrk((char *)name, ":,");
int slen = ptr!=NULL?ptr-name:strlen(name);
for (int i=0; i<lbtables.length(); i++)
if (0==strncmp(name, lbtables[i].name, slen)) return lbtables[i].cfn;
return NULL;
}
示例4: displayLBs
void displayLBs()
{
CmiPrintf("\nAvailable load balancers:\n");
for (int i=0; i<lbtables.length(); i++) {
LBDBEntry &entry = lbtables[i];
if (entry.shown) CmiPrintf("* %s: %s\n", entry.name, entry.help);
}
CmiPrintf("\n");
}
示例5: receiveParticles
// Function that receives a set of particles and updates the
// forces of them into the local set
void Patch::receiveParticles(CkVec<Particle> &updates) {
updateCount++;
for( int i=0; i < updates.length(); i++) {
incomingParticles.push_back(updates[i]);
}
// if all the incoming particle updates have been received, we must check
// whether to proceed with next step
if(updateCount == numNbrs ) {
updateCount = 0;
incomingFlag = true;
checkNextStep();
}
}
示例6: neighbor
/*
* Now define the taskGraphArray that actually handles doing all that work.
*/
taskGraphArray::taskGraphArray(
CkVec<CkArrayIndex> deps,
taskGraphSolver *data,
CkCallback returnResults
) : Waiting() {
// Set some state variables
ReturnResults = returnResults;
Self = data;
isSolved = false;
// Save everything I need to know about
DepsCount = deps.length();
DepsData = new taskGraphSolver*[DepsCount];
DepsReceived = 0;
// Ask everyone I depend on for their data
CProxy_taskGraphArray neighbor(thisArrayID);
for ( int i = 0 ; i < DepsCount ; i++ ) {
neighbor(deps[i]).requestData(thisIndexMax);
}
// If we're waiting on nothing we're solved
tryToSolve();
}
示例7: Strategy
//.........这里部分代码省略.........
item->Id = i;
objs.insert(item);
}
int objs_here = myStats.obj_data_sz;
do {
// if (objs_here <= 1) break; // For now, always leave 1 object
InfoRecord* p;
InfoRecord* obj;
// Get the lightest-loaded processor
p = procs.deleteMin();
if (p == 0) {
// CkPrintf("[%d] No destination PE found!\n",CkMyPe());
break;
}
// Get the biggest object
bool objfound = false;
do {
obj = objs.deleteMax();
if (obj == 0) break;
objload = load_factor * obj->load;
double new_p_load = p->load + objload;
double my_new_load = myload - objload;
// If we're vacating, the biggest object is always good.
// Otherwise, only take it if it doesn't produce overload
if (vacate || new_p_load < my_new_load) {
objfound = true;
} else {
// This object is too big, so throw it away
// CkPrintf("[%d] Can't move object w/ load %f to proc %d load %f %f\n",
// CkMyPe(),obj->load,p->Id,p->load,avgload);
delete obj;
}
} while (!objfound);
if (!objfound) {
// CkPrintf("[%d] No suitable object found!\n",CkMyPe());
break;
}
const int me = CkMyPe();
// Apparently we can give this object to this processor
if (_lb_args.debug())
CkPrintf("[%d] Obj %d of %d migrating from %d to %d\n",
CkMyPe(),obj->Id,myStats.obj_data_sz,me,p->Id);
MigrateInfo* migrateMe = new MigrateInfo;
migrateMe->obj = myStats.objData[obj->Id].handle;
migrateMe->from_pe = me;
migrateMe->to_pe = p->Id;
migrateInfo.insertAtEnd(migrateMe);
objs_here--;
// We may want to assign more to this processor, so lets
// update it and put it back in the heap
p->load += objload;
myload -= objload;
procs.insert(p);
// This object is assigned, so we delete it from the heap
delete obj;
} while(vacate || myload > avgload);
// Now empty out the heaps
InfoRecord* p;
while (NULL!=(p=procs.deleteMin()))
delete p;
InfoRecord* obj;
while (NULL!=(obj=objs.deleteMax()))
delete obj;
}
// Now build the message to actually perform the migrations
int migrate_count=migrateInfo.length();
// if (migrate_count) {
// CkPrintf("PE %d: Sent away %d of %d objects\n",
// CkMyPe(),migrate_count,myStats.obj_data_sz);
// }
LBMigrateMsg* msg = new(migrate_count,CkNumPes(),CkNumPes(),0) LBMigrateMsg;
msg->n_moves = migrate_count;
for(i=0; i < migrate_count; i++) {
MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
msg->moves[i] = *item;
delete item;
migrateInfo[i] = 0;
}
return msg;
#else
return NULL;
#endif
}
示例8: Strategy
//.........这里部分代码省略.........
neighbors[i].load = stats[i].total_walltime - stats[i].idletime;
neighbors[i].difference = new int[dimension];
topo->get_processor_coordinates(neighbors[i].id, destProc);
topo->coordinate_difference(myProc, destProc, neighbors[i].difference);
}
delete[] destProc;
}
if(_lb_debug2) {
CkPrintf("[%d] Building obj heap...\n", CkMyPe() );
}
// My objects: build heaps
maxHeap objs(myStats.n_objs);
double totalObjLoad=0.0;
for(i=0; i < myStats.n_objs; i++) {
InfoRecord* item = new InfoRecord;
item->load = myStats.objData[i].wallTime;
totalObjLoad += item->load;
item->Id = i;
objs.insert(item);
}
if(_lb_debug2) {
CkPrintf("[%d] Beginning distributing objects...\n", CkMyPe() );
}
// for each object
while(objs.numElements()>0) {
InfoRecord* obj;
obj = objs.deleteMax();
int bestDest = -1;
for(i = 0; i < n_nbrs; i++)
if(neighbors[i].load +obj->load < myload - obj->load && (bestDest==-1 || neighbors[i].load < neighbors[bestDest].load)) {
double dotsum=0;
int j;
for(j=0; j<dimension; j++) dotsum += (commcenter[obj->Id][j] * neighbors[i].difference[j]);
if(myload - avgload < totalObjLoad || dotsum>0.5 || (dotsum>0 && objs.numElements()==0) || commamount[obj->Id]==0) {
bestDest = i;
}
}
// Best place for the object
if(bestDest != -1) {
if(_lb_debug1) {
CkPrintf("[%d] Obj[%d] will move to Proc[%d]\n", CkMyPe(), obj->Id, neighbors[bestDest].id);
}
//Migrate it
MigrateInfo* migrateMe = new MigrateInfo;
migrateMe->obj = myStats.objData[obj->Id].handle;
migrateMe->from_pe = myStats.from_pe;
migrateMe->to_pe = neighbors[bestDest].id;
migrateInfo.insertAtEnd(migrateMe);
//Modify loads
myload -= obj->load;
neighbors[bestDest].load += obj->load;
}
totalObjLoad -= obj->load;
delete obj;
}
if(_lb_debug2) {
CkPrintf("[%d] Clearing Up...\n", CkMyPe());
}
for(i=0; i<n_nbrs; i++) {
delete[] neighbors[i].difference;
}
delete[] neighbors;
delete[] myProc;
for(i=0;i<myStats.n_objs;i++) {
delete[] commcenter[i];
}
delete[] commcenter;
delete[] commamount;
}
if(_lb_debug2) {
CkPrintf("[%d] Generating result...\n", CkMyPe());
}
// Now build the message to actually perform the migrations
int migrate_count=migrateInfo.length();
// if (migrate_count > 0) {
// CkPrintf("PE %d migrating %d elements\n",CkMyPe(),migrate_count);
// }
LBMigrateMsg* msg = new(migrate_count,CkNumPes(),CkNumPes(),0) LBMigrateMsg;
msg->n_moves = migrate_count;
for(i=0; i < migrate_count; i++) {
MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
msg->moves[i] = *item;
delete item;
migrateInfo[i] = 0;
}
return msg;
#else
return NULL;
#endif
}
示例9: CmiAssert
LBMigrateMsg * HybridBaseLB::createMigrateMsg(LDStats* stats)
{
#if CMK_LBDB_ON
int i;
LevelData *lData = levelData[currentLevel];
CkVec<MigrateInfo*> migrateInfo;
// stats contains all objects that belong to this group
// outObjs contains objects that are migrated out
for (i=0; i<stats->n_objs; i++) {
LDObjData &objData = stats->objData[i];
int frompe = stats->from_proc[i];
int tope = stats->to_proc[i];
CmiAssert(tope != -1);
if (frompe != tope) {
// CkPrintf("[%d] Obj %d migrating from %d to %d\n",
// CkMyPe(),obj,pe,dest);
#if 0
// delay until a summary is printed
if (frompe == lData->nChildren) {
frompe = -1;
CmiAssert(tope != -1 && tope != lData->nChildren);
}
else
frompe = lData->children[frompe];
if (tope != -1) {
CmiAssert(tope < lData->nChildren);
tope = lData->children[tope];
}
#endif
MigrateInfo *migrateMe = new MigrateInfo;
migrateMe->obj = objData.handle;
migrateMe->from_pe = frompe;
migrateMe->to_pe = tope;
migrateMe->async_arrival = objData.asyncArrival;
migrateInfo.insertAtEnd(migrateMe);
}
else
CmiAssert(frompe != lData->nChildren);
}
// merge outgoing objs
CkVec<MigrationRecord> &outObjs = lData->outObjs;
for (i=0; i<outObjs.size(); i++) {
MigrateInfo *migrateMe = new MigrateInfo;
migrateMe->obj = outObjs[i].handle;
migrateMe->from_pe = outObjs[i].fromPe;
migrateMe->to_pe = -1;
// migrateMe->async_arrival = objData.asyncArrival;
migrateInfo.insertAtEnd(migrateMe);
}
// construct migration message
int migrate_count=migrateInfo.length();
DEBUGF(("[%d] level: %d has %d migrations. \n", CkMyPe(), currentLevel, migrate_count));
// ignore avail_vector, etc for now
//LBMigrateMsg * msg = new(migrate_count,count,count,0) LBMigrateMsg;
LBMigrateMsg * msg = new(migrate_count,0,0,0) LBMigrateMsg;
msg->level = currentLevel;
msg->n_moves = migrate_count;
for(i=0; i < migrate_count; i++) {
MigrateInfo* item = (MigrateInfo*) migrateInfo[i];
msg->moves[i] = *item;
delete item;
migrateInfo[i] = 0;
DEBUGF(("[%d] obj (%d %d %d %d) migrate from %d to %d\n", CkMyPe(), item->obj.objID().id[0], item->obj.objID().id[1], item->obj.objID().id[2], item->obj.objID().id[3], item->from_pe, item->to_pe));
}
if (_lb_args.printSummary()) printSummary(stats, stats->nprocs());
// translate relative pe number to its real number
for(i=0; i < migrate_count; i++) {
MigrateInfo* move = &msg->moves[i];
if (move->to_pe != -1) {
if (move->from_pe == lData->nChildren) {
// an object from outside group
move->from_pe = -1;
CmiAssert(move->to_pe != -1 && move->to_pe != lData->nChildren);
}
else
move->from_pe = lData->children[move->from_pe];
CmiAssert(move->to_pe < lData->nChildren);
move->to_pe = lData->children[move->to_pe];
}
}
return msg;
#else
return NULL;
#endif
}