Hi Tejasi, I tried it too and yeah it fails, not sure why... The same code works in src/mem/ruby/system/RubyMemoryControl.cc A cast into NetworkMessage has been done in places like RoutingUnit_d but that won't give you the message type. You'll have to dig in and see why the cast fails…
- Tushar On Sep 26, 2012, at 2:17 AM, tejasi pimpalkhute wrote: > Hi Tushar, > > I had resumed working on this again, so was going through your emails(please > see email below). I am still getting this error: > > gem5.debug: build/ALPHA_SE_MOESI_hammer/base/cast.hh:49: T safe_cast(U) [with > T = const MemoryMsg*, U = Message*]: Assertion `ret' failed. > Program aborted at cycle 10 > Aborted > > My code looks like this in SWallocator.cc file(I have included all the > necessary files) in the arbitrate_outports() function: > > flit_d *t_flit = m_input_unit[inport]->peekTopFlit(invc); > > MsgPtr msg_ptr = t_flit->get_msg_ptr(); > > const MemoryMsg* memMess = safe_cast<const MemoryMsg*>(msg_ptr.get()); > > physical_address_t addr = memMess->getAddress().getAddress(); > MemoryRequestType type = memMess->getType(); > > However, the typecast fails. Could you please let me know what could be the > problem here? I just want to extract the information from the flit if it is a > memory message or network message and if it is memory message, I want to know > its physical address and memory request type (e.g. read/write, etc). Can you > please suggest the correct way of getting this information from the flit? > > I appreciate your guidance. > > Thanks! > > > ---------- Forwarded message ---------- > From: Tushar Krishna <tus...@csail.mit.edu> > Date: Thu, Jan 5, 2012 at 9:09 AM > Subject: Re: Network Message and Memory Message > To: Krishna <krishna2...@gmail.com> > > > Hi Krishna, > My answers are inline. > > cheers, > Tushar > > > On 1/5/2012 9:19 AM, Krishna wrote: > Hi Tushar, > > We are trying to implement an SDRAM aware router that re-orders > packets based on their row address and bank address so as to minimize > time. > > In order to implement this, we are modifying the code in > Swallocator_d.cc where the packets are re-ordered as per priority. To > determine the priority we need the row address and bank address. So we > tried to implement the logic similar to the below function > > > void > MemoryControl::enqueue(const MsgPtr& message, int latency) > { > Time current_time = g_eventQueue_ptr->getTime(); > Time arrival_time = current_time + latency; > const MemoryMsg* memMess = safe_cast<const MemoryMsg*>(message.get()); > physical_address_t addr = memMess->getAddress().getAddress(); > MemoryRequestType type = memMess->getType(); > bool is_mem_read = (type == MemoryRequestType_MEMORY_READ); > MemoryNode thisReq(arrival_time, message, addr, is_mem_read, > !is_mem_read); > enqueueMemRef(thisReq); > } > > Here the value returned by message.get() is type-casted into MemoryMsg > and later this is used to retrieve address and type of request. > Your approach is absolutely correct. > > > We tried to implement similar logic in Swallocator_d.cc. Here the > virtual channel buffers have flits. > > flit_d *t_flit = m_input_unit[inport]->getTopFlit(invc); > MsgPtr msg_ptr = flit_d->get_msg_ptr(); > Shouldn't it be MsgPtr msg_ptr = t_flit->get_msg_ptr(); ? > > const MemoryMsg* memMess = safe_cast<const MemoryMsg*>(message.get()); > Shouldn't it be msg_ptr.get() ? > > const NetworkMessage* memMess = safe_cast<const > NetworkMessage*>(msg_ptr.get()); > > Here the code in bold line throws an assertion error, but is being > successfully type-casted into Network Message. > Didn't see anything in bold but I assume you meant the MemoryMsg* line ... > Try fixing the two things I mentioned and see if it works. It should. > > Please let us know if it is possible to retrieve address and type of > request from Network Message or any other possible way to extract the > address and memory request type information from flit. > > To summarize, we are trying to schedule input requests at a router > according to certain prioritizing criteria and store it in output port > buffers. But our prioritizing criteria needs to know certain > information from the flit (which is address and memory request type). > Please let us know if there is any way to get this information. > > > Thank You. > > > > > > > >
_______________________________________________ gem5-users mailing list gem5-users@gem5.org http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users