This file runs the entire Charm++ startup process.
The process begins with every processor finishing the Converse startup process and calling _initCharm. This routine runs almost the entire Charm++ setup process. It begins by setting up various Cpvs and subsystems.
The rank 0 processor of each node then does the Charm++ registration, by calling the various _register routines.
Now processor 0:
The other processors, however, must wait until they recieve the readonly data and all group creations. They do this by setting the _charmHandlerIdx to a special "_bufferHandler" which simply saves all normal messages into a special queue.
As the startup data (readonlies and group creations) streams into _initHandler, it counts messages until it is fully initialized, then calls _initDone to clean out the queues and resume normal operation.
Possible race conditions abound during this process, which is probably overly complex.
| void CkRestartMain | ( | const char * | dirname | ) |
| CksvDeclare | ( | UInt | , | |
| _numInitNodeMsgs | ||||
| ) |
| CkpvDeclare | ( | void * | , | |
| _currentChare | ||||
| ) |
| CkpvDeclare | ( | int | , | |
| _currentChareType | ||||
| ) |
| CkpvDeclare | ( | CkGroupID | , | |
| _currentGroup | ||||
| ) |
| CkpvDeclare | ( | void * | , | |
| _currentNodeGroupObj | ||||
| ) |
| CkpvDeclare | ( | CkGroupID | , | |
| _currentGroupRednMgr | ||||
| ) |
| CkpvDeclare | ( | GroupTable * | , | |
| _groupTable | ||||
| ) |
| CkpvDeclare | ( | GroupIDTable * | , | |
| _groupIDTable | ||||
| ) |
| CkpvDeclare | ( | CmiImmediateLockType | , | |
| _groupTableImmLock | ||||
| ) |
| CkpvDeclare | ( | UInt | , | |
| _numGroups | ||||
| ) |
| CkpvDeclare | ( | CkCoreState * | , | |
| _coreState | ||||
| ) |
| CksvDeclare | ( | UInt | , | |
| _numNodeGroups | ||||
| ) |
| CksvDeclare | ( | GroupTable * | , | |
| _nodeGroupTable | ||||
| ) |
| CksvDeclare | ( | GroupIDTable | , | |
| _nodeGroupIDTable | ||||
| ) |
| CksvDeclare | ( | CmiImmediateLockType | , | |
| _nodeGroupTableImmLock | ||||
| ) |
| CksvDeclare | ( | CmiNodeLock | , | |
| _nodeLock | ||||
| ) |
| CksvStaticDeclare | ( | PtrVec * | , | |
| _nodeBocInitVec | ||||
| ) |
| CkpvDeclare | ( | int | , | |
| _charmEpoch | ||||
| ) |
| CkpvDeclare | ( | Stats * | , | |
| _myStats | ||||
| ) |
| CkpvDeclare | ( | MsgPool * | , | |
| _msgPool | ||||
| ) |
| CkpvDeclare | ( | _CkOutStream * | , | |
| _ckout | ||||
| ) |
| CkpvDeclare | ( | _CkErrStream * | , | |
| _ckerr | ||||
| ) |
| CkpvStaticDeclare | ( | int | , | |
| _numInitsRecd | ||||
| ) |
| CkpvStaticDeclare | ( | PtrQ * | , | |
| _buffQ | ||||
| ) |
| CkpvStaticDeclare | ( | PtrVec * | , | |
| _bocInitVec | ||||
| ) |
| CpvDeclare | ( | char * | , | |
| _validProcessors | ||||
| ) |
| CpvDeclare | ( | char | , | |
| startedEvac | ||||
| ) |
| void processRaiseEvacFile | ( | char * | raiseEvacFile | ) |
Definition at line 330 of file ckevacuation.C.
References CcdCallFnAfter(), CkDecideEvacPe(), Converse::CkMyPe(), evacMsg::pe, and printf().
Referenced by _initCharm().
| static void _parseCommandLineOpts | ( | char ** | argv | ) | [inline, static] |
Definition at line 148 of file init.C.
References _defaultObjectQ, _defaultQueueing, _printCS, _printSS, _raiseEvac, _raiseEvacFile, _restartDir, _ringexit, _ringtoken, CkMemRestart(), Converse::CkMyPe(), Converse::CkNumPes(), CkRestartMain(), CmiAbort(), CmiGetArgFlagDesc(), CmiGetArgIntDesc(), CmiGetArgString(), CmiGetArgStringDesc(), CmiMyPe(), CmiPrintf(), and faultFunc.
Referenced by _initCharm().
| static void _bufferHandler | ( | void * | msg | ) | [static] |
| static void _discardHandler | ( | envelope * | env | ) | [static] |
Definition at line 210 of file init.C.
References Converse::CkMyPe(), and CmiFree().
Referenced by _CkExit(), _exitHandler(), and _initDone().
| static void _printStats | ( | void | ) | [inline, static] |
Definition at line 217 of file init.C.
References _allStats, _printCS, _printSS, Converse::CkMyPe(), Converse::CkNumPes(), Stats::combine(), Stats::getCharesCreated(), and Stats::getCharesProcessed().
Referenced by _exitHandler().
| static void _sendStats | ( | void | ) | [inline, static] |
Definition at line 264 of file init.C.
References _allocEnv(), _exitHandlerIdx, Converse::CkMyPe(), Converse::CmiSyncSendAndFree(), envelope::getTotalsize(), envelope::setSrcPe(), StatMsg, and UsrToEnv().
Referenced by _exitHandler().
| static void _exitHandler | ( | envelope * | env | ) | [static] |
Definition at line 277 of file init.C.
References _allStats, _bocHandlerIdx, _charmHandlerIdx, _discardHandler(), _exitStarted, _mainDone, _nodeBocHandlerIdx, _numStatsRecd, _printStats(), _ringexit, _ringtoken, _sendStats(), Converse::CkMyPe(), Converse::CkNumPes(), CkNumValidPes(), CmiAbort(), CmiFree(), Converse::CmiSyncBroadcastAllAndFree(), Converse::CmiSyncSend(), Converse::CmiSyncSendAndFree(), ConverseExit(), EnvToUsr(), ExitMsg, envelope::getMsgtype(), envelope::getSrcPe(), envelope::getTotalsize(), ReqStatMsg, envelope::setMsgtype(), envelope::setSrcPe(), StatMsg, and traceClose().
Referenced by _initCharm().
| static void _processBufferedBocInits | ( | void | ) | [inline, static] |
Definition at line 359 of file init.C.
References _bocHandlerIdx, _processBocInitMsg(), _processHandler(), CkUnpackMessage(), and CkVec< T >::size().
Referenced by _initDone().
| static void _processBufferedNodeBocInits | ( | void | ) | [inline, static] |
Definition at line 376 of file init.C.
References _nodeBocHandlerIdx, _processHandler(), _processNodeBocInitMsg(), CkUnpackMessage(), and CkVec< T >::size().
Referenced by _initDone().
| static void _processBufferedMsgs | ( | void | ) | [inline, static] |
Definition at line 393 of file init.C.
References _charmHandlerIdx, _infoIdx, _processHandler(), Converse::CkMyPe(), CldEnqueue(), Converse::CmiSyncSendAndFree(), envelope::getMsgtype(), envelope::getTotalsize(), envelope::isForAnyPE(), NewChareMsg, and NewVChareMsg.
Referenced by _initDone().
| static int _charmLoadEstimator | ( | void | ) | [static] |
| static void _sendTriggers | ( | void | ) | [static] |
Definition at line 415 of file init.C.
References _allocEnv(), _triggerHandlerIdx, _triggersSent, Converse::CkMyPe(), CmiFree(), CmiNodeFirst(), Converse::CmiSyncSend(), envelope::getTotalsize(), RODataMsg, and envelope::setSrcPe().
Referenced by _initDone().
| void _initDone | ( | void | ) |
Definition at line 435 of file init.C.
References _discardHandler(), _processBufferedBocInits(), _processBufferedMsgs(), _processBufferedNodeBocInits(), _sendTriggers(), _triggerHandlerIdx, _triggersSent, Converse::CkMyPe(), BGConverse::CkMyRank(), and CmiNodeBarrier().
Referenced by _initCharm(), _initHandler(), _triggerHandler(), and CkRestartMain().
| static void _triggerHandler | ( | envelope * | env | ) | [static] |
Definition at line 453 of file init.C.
References _initDone(), _numExpectInitMsgs, and CmiFree().
Referenced by _initCharm().
| static void _processROMsgMsg | ( | envelope * | env | ) | [inline, static] |
Definition at line 463 of file init.C.
References _readonlyMsgs, EnvToUsr(), and envelope::getRoIdx().
Referenced by _initCharm(), and _initHandler().
| static void _processRODataMsg | ( | envelope * | env | ) | [inline, static] |
Definition at line 468 of file init.C.
References _readonlyTable, CmiFree(), and EnvToUsr().
Referenced by _initHandler(), and _roRestartHandler().
| static void _roRestartHandler | ( | void * | msg | ) | [static] |
Definition at line 476 of file init.C.
References _numExpectInitMsgs, _processRODataMsg(), Converse::CkMyPe(), and envelope::getCount().
Referenced by _initCharm(), and _roHandler().
| static void _roHandler | ( | void * | msg | ) | [static] |
| static void _initHandler | ( | void * | msg | ) | [static] |
Definition at line 491 of file init.C.
References _initDone(), _numExpectInitMsgs, _processRODataMsg(), _processROMsgMsg(), BocInitMsg, Converse::CkMyPe(), CkUnpackMessage(), CmiAbort(), CmiMyPe(), CmiWallTimer(), envelope::getCount(), envelope::getGroupEpoch(), envelope::getGroupNum(), envelope::getMsgtype(), _ckGroupID::idx, envelope::isPacked(), NodeBocInitMsg, RODataMsg, and ROMsgMsg.
Referenced by _initCharm().
| void _CkExit | ( | void | ) |
Definition at line 535 of file init.C.
References _allocEnv(), _bocHandlerIdx, _charmHandlerIdx, _discardHandler(), _exitHandlerIdx, _exitStarted, _nodeBocHandlerIdx, Converse::CkMyPe(), Converse::CmiSyncBroadcastAllAndFree(), Converse::CmiSyncSendAndFree(), CsdScheduler(), ExitMsg, envelope::getTotalsize(), ReqStatMsg, and envelope::setSrcPe().
Referenced by CkExit(), and TraceSummaryBOC::sendSummaryBOC().
| void CkExit | ( | void | ) |
Definition at line 572 of file init.C.
References _CkExit(), _CkExitFnVec, and Converse::CkMyPe().
Referenced by _loadbalancerInit(), patchReader::abort(), TCharm::atExit(), con::CancelEvents(), CombineProjections(), CombineSummary(), FEM_Mesh::countElementsOnEdge(), CpdQuitDebug(), die(), SlabArray::doneFFT(), SlabArray::doneIFFT(), pose::exit(), TraceProjectionsBOC::finalReduction(), Main::Finish(), FORTRAN_AS_C(), FTN_NAME(), FEM_Mesh::get2ElementsOnEdge(), idaStarWorker::idaStarWorker(), lbObjects::Insert(), pvtObjects::Insert(), sim::InternalCommitPrintf(), receiver::iwaitAll(), lbObjects::lbObjects(), LV3D0_quit(), patchReader::patchReader(), main::performRefinements(), pvtObjects::pvtObjects(), main::readMesh(), AmrCoordinator::reportStats(), CkCallback::send(), CentralLB::simulationRead(), CentralLB::simulationWrite(), and AmrCoordinator::synchronise().
| static void _nullFn | ( | void * | , | |
| void * | ||||
| ) | [static] |
| void _registerLBDatabase | ( | void | ) |
Definition at line 152 of file LBDatabase.def.h.
Referenced by _initCharm(), _registerBaseLB(), _registerCentralLB(), _registerHbmLB(), _registerHybridBaseLB(), _registerHybridLB(), _registerNborBaseLB(), _registerNullLB(), and _registerWSLB().
| void _registerExternalModules | ( | char ** | argv | ) |
Referenced by _initCharm().
| void _ckModuleInit | ( | void | ) |
Definition at line 1410 of file ck.C.
References _ObjectQHandler(), _skipCldHandler(), _TokenHandler(), index_objectQHandler, index_skipCldHandler, and index_tokenHandler.
Referenced by _initCharm().
| void _loadbalancerInit | ( | ) |
Definition at line 160 of file LBDatabase.C.
References _lb_args, _lb_predict, _lb_predict_delay, _lb_predict_window, _lbtopo, LBDBRegistry::addRuntimeBalancer(), CkLBArgs::alpha(), CkLBArgs::beeta(), CkLBArgs::central_pe(), CkExit(), CkGetArgv(), Converse::CkMyPe(), BGConverse::CkMyRank(), CmiArgGroup(), CmiGetArgDoubleDesc(), CmiGetArgFlagDesc(), CmiGetArgIntDesc(), CmiGetArgStringDesc(), CmiPrintf(), CkLBArgs::debug(), LBSimulation::doSimulation, LBSimulation::dumpFile, LBSimulation::dumpStep, LBSimulation::dumpStepSize, CkLBArgs::ignoreBgLoad(), CkLBArgs::lbperiod(), lbRegistry, CkLBArgs::lbversion(), CkLBArgs::loop(), CkLBArgs::migObjOnly(), CkLBArgs::percentMovesAllowed(), CkLBArgs::printSummary(), CkLBArgs::samePeSpeed(), LBSimulation::simProcs, LBSimulation::simStep, LBSimulation::simStepSize, CkLBArgs::statsOn(), CkLBArgs::syncResume(), CkLBArgs::traceComm(), and CkLBArgs::useCpuTime().
Referenced by _initCharm().
| void initCharmProjections | ( | ) |
| void _registerInitCall | ( | CkInitCallFn | fn, | |
| int | isNodeCall | |||
| ) |
Definition at line 595 of file init.C.
References _initCallTable, InitCallTable::initNodeCalls, and InitCallTable::initProcCalls.
Referenced by CkIndex_LBDatabase::__register(), _registerBlockLB(), _registerCentralLB(), _registerCkArray(), _registerCkLocation(), _registerCkMemCheckpoint(), _registerCkMulticast(), _registerComboCentLB(), _registerComm1LB(), _registerDummyLB(), _registerEveryLB(), _registerGreedyAgentLB(), _registerGreedyCommLB(), _registerGreedyLB(), _registerGridCommLB(), _registerGridCommRefineLB(), _registerGridHybridLB(), _registerGridHybridSeedLB(), _registerGridMetisLB(), _registerHbmLB(), _registerHybridBaseLB(), _registerHybridLB(), _registerMetisLB(), _registerNeighborCommLB(), _registerNeighborLB(), _registerNullLB(), _registerOrbLB(), _registerPhasebyArrayLB(), _registerRandCentLB(), _registerRecBisectBfLB(), _registerRefineCommLB(), _registerRefineKLB(), _registerRefineLB(), _registerRefineTopoLB(), _registerRotateLB(), _registerTopoCentLB(), _registerTopoLB(), _registerTraceProjections(), _registerTraceSummary(), and _registerWSLB().
| CpvCExtern | ( | int | , | |
| cmiArgDebugFlag | ||||
| ) |
| void CpdFreeze | ( | void | ) |
Definition at line 114 of file debug-conv.c.
| void initQd | ( | ) |
Definition at line 620 of file init.C.
References _qdHandler(), _qdHandlerIdx, CmiMyRank(), and CmiRegisterHandler().
Referenced by _initCharm(), and ConverseCommonInit().
| void _initCharm | ( | int | unused_argc, | |
| char ** | argv | |||
| ) |
This is the main charm setup routine.
It's called on all processors after Converse initialization. This routine gets passed to Converse from "main.C".
The main purpose of this routine is to set up the objects and Ckpv's used during a regular Charm run. See the comment at the top of the file for overall flow.
The rank-0 processor of each node calls the translator-generated "_register" routines.
_register routines call the charm.h "CkRegister*" routines, which record function pointers and class information for all Charm entities, like Chares, Arrays, and readonlies.
There's one _register routine generated for each .ci file. _register routines *must* be called in the same order on every node, and *must not* be called by multiple threads simultaniously.
These _register calls are for the built-in Charm .ci files, like arrays and load balancing. If you add a .ci file to charm, you'll have to add a call to the _register routine here, or make your library into a "-module".
_registerExternalModules is actually generated by charmc at link time (as "moduleinit<pid>.C").
This generated routine calls the _register functions for the .ci files of libraries linked using "-module". This funny initialization is most useful for AMPI/FEM programs, which don't have a .ci file and hence have no other way to control the _register process.
CkRegisterMainModule is generated by the (unique) "mainmodule" .ci file. It will include calls to register all the .ci files.
Definition at line 641 of file init.C.
References CkIndex_Group::__idx, _allocEnv(), _allStats, _bocHandlerIdx, _bufferHandler(), _chareTable, _charmHandlerIdx, _charmLoadEstimator(), _ckAckEvac(), _ckAckEvacIdx, _ckEvacBcast(), _ckEvacBcastIdx, _ckModuleInit(), _entryTable, _exitHandler(), _exitHandlerIdx, _futuresModuleInit(), _infoFn(), _infoIdx, _initCallTable, _initDone(), _initHandler(), _initHandlerIdx, _loadbalancerInit(), _mainDone, _mainTable, _nodeBocHandlerIdx, _nullFn(), _numInitMsgs, _parseCommandLineOpts(), _processHandler(), _processROMsgMsg(), _raiseEvac, _raiseEvacFile, _readonlyMsgs, _readonlyTable, _registercharisma(), _registerCkArray(), _registerCkCallback(), _registerCkCheckpoint(), _registerCkFutures(), _registerCkMemCheckpoint(), _registerDone(), _registerExternalModules(), _registerInit(), _registerLBDatabase(), _registertempo(), _registerwaitqd(), _restartDir, _roHandler(), _roHandlerIdx, _roRestartHandler(), _roRestartHandlerIdx, _triggerHandler(), _triggerHandlerIdx, CkArgMsg::argc, CkArgMsg::argv, BGConverse::BgNodeRank(), CcdCallOnCondition(), CkAllocMsg(), CkDecideEvacPe(), CkFreeMsg(), CkMessageWatcherInit(), Converse::CkMyPe(), BGConverse::CkMyRank(), Converse::CkNumPes(), CkPackMessage(), CkRegisterChare(), CkRegisterChareInCharm(), CkRegisterEp(), CkRegisterMainModule(), CkRegisterMsg(), CkUnpackMessage(), CldRegisterEstimator(), CldRegisterInfoFn(), CmiArgGroup(), CmiCreateLock(), CmiGetArgc(), CmiMyPe(), CmiMyRank(), CmiNodeAllBarrier(), Converse::CmiSyncBroadcast(), Converse::CmiSyncBroadcastAndFree(), CmiWallTimer(), CpdFreeze(), InitCallTable::enumerateInitCalls(), EnvToUsr(), evacuate, faultFunc, envelope::getTotalsize(), initCharmProjections(), initQd(), malloc(), processRaiseEvacFile(), RODataMsg, ROMsgMsg, envelope::setMsgtype(), envelope::setRoIdx(), envelope::setSrcPe(), size, PUP::sizer::size(), traceCharmInit(), and UsrToEnv().
Referenced by BgEmulatorInit(), BgNodeStart(), fmain_(), main(), and TCHARM_Init().
| void registerExitFn | ( | CkExitFn | fn | ) |
Definition at line 971 of file init.C.
References _CkExitFnVec.
Referenced by initTraceProjectionsBOC(), and initTraceSummaryBOC().
| CksvExtern | ( | unsigned | int, |