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

Reply via email to