Hi Tao, thanks for your quickly reply.

I have read the codes of function access(PacketPtr pkt) in abstract_mem.cc.
The main difference is that, in the given function access(), the operation
is the granularity of a cache line (64-Byte, actually it is a specified
column of a whole row; while for my codes, I want to copy the whole row in
to data structure row_data (That's why I need to multiply another 64. Here
the 64 equals the parameter linesPerRowBuffer).

In other words, in the function access(), memory access is to only one
column of a row, while I want to access the entire row.

My concern is that, whether myHostAddr can point to the start address of
the row (given pkt->getAddr)?


*=======================================================================*
*uint8_t *myHostAddr = pmemAddr + (pkt->getAddr() - pkt->getAddr()
% linesPerRow)  - range.start;*
*=======================================================================*
*
*
Regards,
Shuchang

2013/1/28 Tao Zhang <[email protected]>

> Hi Shuchang,****
>
> ** **
>
> In my opinion, your code are almost correct expect that the pkt->getSize()
> does return the cacheline size (64 in byte). You don’t need to multiply
> another 64 again. ****
>
> ** **
>
> In fact, AbstractMemory has the function “access(PacketPtr pkt)” in which
> the data is also copied. You can read the code between line 352 and 372 in
> abstract_mem.cc to see how the data is copied. It does almost the same
> thing as you do. As a result, you can simply extend the  AbstractMemory and
> use the access() to make sure the data is in pkt->getPtr<uint8_t>(); What
> you only need to do is to copy this data to your raw data pointer. ****
>
> ** **
>
> -Tao****
>
> ** **
>
> *From:* [email protected] [mailto:[email protected]] *On
> Behalf Of *单书畅
> *Sent:* Sunday, January 27, 2013 6:31 AM
> *To:* [email protected]
> *Subject:* [gem5-users] question about reading out a whole DRAM row data**
> **
>
> ** **
>
> Hi all,****
>
> ** **
>
> ** **
>
> I am trying to modify the SimpleDRAM module to profile the data contents
> in phymem.****
>
> ** **
>
> In simple_dram.cc, the *docodeAddr()* function shows how to get the rank
> and the bank addresses for given request *pkt*.****
>
> I wonder, given* pkt->getAddr()*, how to calculate the row address?****
>
> It seems that, a dram row contains 64 (linesPerRow = 64) 64-Byte data
> blocks, and I want to read out the whole row data into a self-defined data
> structure ( namely row_data).****
>
> ** **
>
> The detailed codes are like this:****
>
> ** **
>
> *uint8_t *myHostAddr = pmemAddr + (pkt->getAddr() - pkt->getAddr()
> % linesPerRow)  - range.start;*****
>
> ** **
>
> *int row_size = pkt->getSize()*64;*****
>
> *uint8_t row_data[row_size];*****
>
> *memcpy(row_data, myHostAddr , row_size ); // read the whole MEM row data
> out into the array structure: row_data*****
>
> ** **
>
> ** **
>
> I am not sure whether the calculation of the row address is right. Any
> advice will be appreciated.****
>
> ** **
>
> Regards,****
>
> shuchang****
>
> ** **
>
> ** **
>
> ** **
>
> ** **
>
> _______________________________________________
> gem5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
>
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to