static void *call_startfn(void *vindex) { size_t index = (size_t)vindex; #if CMK_HAS_TLS_VARIABLES && !CMK_NOT_USE_TLS_THREAD if (index<_Cmi_mynodesize) CmiStateInit(index+Cmi_nodestart, index, &Cmi_mystate); else CmiStateInit(_Cmi_mynode+CmiNumPes(),_Cmi_mynodesize,&Cmi_mystate); Cmi_state_vector[index] = &Cmi_mystate; #else CmiState state = Cmi_state_vector + index; pthread_setspecific(Cmi_state_key, state); #endif ConverseRunPE(0); #if 0 if (index<_Cmi_mynodesize) ConverseRunPE(0); /*Regular worker thread*/ else { /*Communication thread*/ CommunicationServerInit(); if (Cmi_charmrun_fd!=-1) while (1) CommunicationServer(5,COM_SERVER_FROM_SMP); } #endif return 0; }
static void *call_startfn(void *vindex) { size_t index = (size_t)vindex; #if CMK_HAS_TLS_VARIABLES && !CMK_NOT_USE_TLS_THREAD if (index<_Cmi_mynodesize) CmiStateInit(index+Cmi_nodestart, index, &Cmi_mystate); else CmiStateInit(_Cmi_mynode+CmiNumPes(),_Cmi_mynodesize,&Cmi_mystate); Cmi_state_vector[index] = &Cmi_mystate; #else CmiState state = Cmi_state_vector + index; pthread_setspecific(Cmi_state_key, state); #endif ConverseRunPE(0); if(CharmLibInterOperate) { while(1) { if(!_cleanUp) { StartInteropScheduler(); CmiNodeAllBarrier(); } else { if (CmiMyRank() == CmiMyNodeSize()) { while (1) { CommunicationServerThread(5); } } else { CsdScheduler(-1); } break; } } } #if 0 if (index<_Cmi_mynodesize) ConverseRunPE(0); /*Regular worker thread*/ else { /*Communication thread*/ CommunicationServerInit(); if (Cmi_charmrun_fd!=-1) while (1) CommunicationServer(5,COM_SERVER_FROM_SMP); } #endif return 0; }
static DWORD WINAPI call_startfn(LPVOID vindex) { int index = (int)vindex; CmiState state = Cmi_state_vector + index; if(Cmi_state_key == 0xFFFFFFFF) PerrorExit("TlsAlloc"); if(TlsSetValue(Cmi_state_key, (LPVOID)state) == 0) PerrorExit("TlsSetValue"); ConverseRunPE(0); #if 0 if (index<_Cmi_mynodesize) ConverseRunPE(0); /*Regular worker thread*/ else { /*Communication thread*/ CommunicationServerInit(); if (Cmi_charmrun_fd!=-1) while (1) CommunicationServerThread(5); } #endif return 0; }