in astra-sim-alibabacloud/astra-sim/system/Sys.cc [2012:2102]
void Sys::handleEvent(void* arg) {
if (arg == nullptr) {
return;
}
BasicEventHandlerData* ehd = (BasicEventHandlerData*)arg;
Sys* node = ehd->node;
EventType event = ehd->event;
MockNcclLog* NcclLog = MockNcclLog::getInstance();
if (event == EventType::CallEvents) {
NcclLog->writeLog(NcclLogLevel::DEBUG," Sys::handleEvent EventType::CallEvents");
node->iterate();
delete ehd;
} else if (event == EventType::RendezvousSend) {
RendezvousSendData* rsd = (RendezvousSendData*)ehd;
rsd->send->call(EventType::General, nullptr);
delete rsd;
} else if (event == EventType::RendezvousRecv) {
RendezvousRecvData* rrd = (RendezvousRecvData*)ehd;
rrd->recv->call(EventType::General, nullptr);
delete rrd;
} else if (event == EventType::PacketReceived) {
RecvPacketEventHadndlerData* rcehd = (RecvPacketEventHadndlerData*)ehd;
StreamBaseline* owner = static_cast<StreamBaseline*>(rcehd->owner);
owner->consume(rcehd);
delete rcehd;
} else if (event == EventType::PacketSent) {
SendPacketEventHandlerData* sendhd = (SendPacketEventHandlerData*)ehd;
NcclLog->writeLog(NcclLogLevel::DEBUG,"packet sent, sender id: %d, node id: %d",sendhd->senderNodeId,node->id);
#ifdef NS3_MTP
Sys::sysCriticalSection cs;
#endif
#ifdef PHY_MTP
Sys::sysCriticalSection cs;
#endif
if(all_generators[sendhd->senderNodeId]== nullptr){
#ifdef NS3_MTP
cs.ExitSection();
#endif
#ifdef PHY_MTP
cs.ExitSection();
#endif
goto SEND_HANDLER_END;
}
if (node->pending_sends.find(
std::make_pair(sendhd->receiverNodeId, sendhd->tag)) ==
node->pending_sends.end() ||
node->pending_sends[std::make_pair(sendhd->receiverNodeId, sendhd->tag)]
.size() == 0) {
node->is_there_pending_sends[std::make_pair(
sendhd->receiverNodeId, sendhd->tag)] = false;
if(node->event_queue.find(Sys::boostedTick())==node->event_queue.end())
if ((node->finished_workloads == 1 && node->event_queue.size() == 0 && node->pending_sends.size() == 0) ||
node->initialized == false) {
delete node;
}
#ifdef NS3_MTP
cs.ExitSection();
#endif
#ifdef PHY_MTP
cs.ExitSection();
#endif
} else {
SimSendCaller* simSendCaller =
node->pending_sends[std::make_pair(sendhd->receiverNodeId, sendhd->tag)]
.front();
node->pending_sends[std::make_pair(sendhd->receiverNodeId, sendhd->tag)]
.pop_front();
if(node->pending_sends[std::make_pair(sendhd->receiverNodeId, sendhd->tag)].size() == 0)
node->pending_sends.erase(std::make_pair(sendhd->receiverNodeId, sendhd->tag));
#ifdef NS3_MTP
cs.ExitSection();
#endif
#ifdef PHY_MTP
cs.ExitSection();
#endif
simSendCaller->call(EventType::General, nullptr);
}
SEND_HANDLER_END: delete sendhd;
}else if(event==EventType::PacketSentFinshed){
AstraSim::SendPacketEventHandlerData* ehd = (AstraSim::SendPacketEventHandlerData*) arg;
if(ehd->owner!=nullptr)
ehd->owner->sendcallback(ehd);
}
}