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
