void BGQTorusManager::populateLocalNodes() { if(CmiNumPartitions() == 1) return; CmiLock(bgq_lock); if(bgq_isLocalSet) { CmiUnlock(bgq_lock); return; } if(bgq_localNodes == NULL) bgq_localNodes = (int *)malloc(CmiNumNodesGlobal()*sizeof(int)); CmiAssert(bgq_localNodes != NULL); for(int i = 0; i < CmiNumNodesGlobal(); i++) bgq_localNodes[i] = -1; for(int i = 0; i < CmiNumNodes(); i++) { int a, b, c, d, e, t; int global; rankToCoordinates(CmiNodeFirst(i), a, b, c, d, e, t); global = CmiNodeOf(coordinatesToRank(a, b, c, d, e, t)); bgq_localNodes[global] = i; } bgq_isLocalSet = 1; CmiUnlock(bgq_lock); }
int ScriptTcl::Tcl_numReplicas(ClientData, Tcl_Interp *interp, int argc, char **) { if ( argc > 1 ) { Tcl_SetResult(interp,"no arguments needed",TCL_VOLATILE); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewIntObj(CmiNumPartitions())); return TCL_OK; }
static int replica_hash(const char *key) { unsigned int hash = 0; while (*key) { hash *= 73; hash += *key++; } return hash % CmiNumPartitions(); }