-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/1422/
-----------------------------------------------------------

(Updated Jan. 17, 2013, 2:13 p.m.)


Review request for Default.


Changes
-------

A major update to the way response packets are limited. If there are not enough 
cache ports, response packets are buffered in the port (cache side) and are 
sent to the processor next cycle.


Description
-------

I made some changes to O3 to model the bandwidth between O3 and L1. By 
bandwidth I mean the number of requests and responses sent or received each 
cycle (not the amount of data transferred). Before putting a patch online, I 
would like to get your feedback on it.
Here is what I did to model cache ports for O3. I limit both the number of 
requests sent by O3 and the number of responses received by O3.

For REQUESTS:
I have a separate read requests (loads) counter and a separate write requests 
(stores) counter.
LOADS: O3 limits the number of read requests sent each cycle to the number of 
defined cache read ports.
STORES: Similarly, O3 limits the number of write requests sent each cycle to 
the number of defined cache write ports.
Note that no matter how many ports are defined, we have only a single actual 
cache port used for all read and write requests. So just like the current gem5 
code, only one dcachePort is defined in the code. However, I limit the number 
of requests to the number of cache ports defined in parameters.

For RESPONSES:
LOADS: I limit the number of load responses received each cycle to the number 
of cache read ports. Once O3 reaches its load response limit, the next load 
response in this cycle is rejected and the cache port is blocked until next 
cycle. Note that blocking the cache port also inhibits the O3 from receiving 
write responses which is not a correct thing, but I don't have any control on 
blocking read and write responses separately.
STORES: same as above

I tried to avoid details such as split packets, pending packets, etc, to give a 
brief overview. I don't believe what I implemented is the best way to model 
cache ports here, so your feedback would be appreciated. What Steve mentioned 
seems a more concrete way to implement it, but lack of my knowledge about bus 
code in gem5 pushed me toward modifying the O3 code.


Diffs (updated)
-----

  src/cpu/base_dyn_inst.hh UNKNOWN 
  src/cpu/o3/O3CPU.py UNKNOWN 
  src/cpu/o3/iew_impl.hh UNKNOWN 
  src/cpu/o3/inst_queue.hh UNKNOWN 
  src/cpu/o3/inst_queue_impl.hh UNKNOWN 
  src/cpu/o3/lsq.hh UNKNOWN 
  src/cpu/o3/lsq_impl.hh UNKNOWN 
  src/cpu/o3/lsq_unit.hh UNKNOWN 
  src/cpu/o3/lsq_unit_impl.hh UNKNOWN 
  src/mem/cache/BaseCache.py UNKNOWN 
  src/mem/cache/base.hh UNKNOWN 
  src/mem/cache/base.cc UNKNOWN 
  src/mem/cache/cache.hh UNKNOWN 
  src/mem/cache/cache_impl.hh UNKNOWN 
  src/mem/packet_queue.hh UNKNOWN 
  src/mem/packet_queue.cc UNKNOWN 
  src/mem/port.hh UNKNOWN 
  src/mem/port.cc UNKNOWN 
  src/sim/clocked_object.hh UNKNOWN 

Diff: http://reviews.gem5.org/r/1422/diff/


Testing
-------

a few small benches done only in SE and classic


Thanks,

Amin Farmahini

_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to