Xilinx / libsystemctlm-soc

SystemC/TLM-2.0 Co-simulation framework
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/862421112/Co-simulation
Other
222 stars 69 forks source link

blocking the the whole processing thread when there is a hazard ? #25

Closed gxflying closed 7 months ago

gxflying commented 8 months ago

Hi sir: I learned the flow of the chi inter-connect and found that the thread RequestOrderer::req_ordering_thread will be blocked when there is a hazard for a cache line(a ongoing request for a cacheline, and a incoming request for the same cache line). but theoretically, the request to a diffrent cache line can be handled and be processed nomally, but in the current implementation, the request to a diffrent line is also blocked! because the RequestOrderer::req_ordering_thread only be waked up when the hazard request is done. is my understanding right ?

https://github.com/Xilinx/libsystemctlm-soc/blob/42aa8ed780cb9eef3a61bc50ea35ff079a7e6284/tlm-modules/iconnect-chi.h#L1880

figlesia-xilinx commented 7 months ago

Hi Felix,

The chi interconnect at the moment does not process multiple requests simultaneously/in parallel, it processes requests one by one (see lines 1894-1897). The overlapping check is there for when support for above has been introduced into the interconnect.

Best regards, Francisco

gxflying commented 7 months ago

Hi figlesia: I saw the comment in line L1894 // One at a time,
my understanding is that for a interconnect or a HN-F, it should have the abilities to handle requests (accessing to different cache line) in in parallel.
for example: at T0 , two requests arrives at interconnect, and the two requests target to cache lineA and cache lineB respectively. then the progress of the two requests may be as below, and they are processed parallelly

                   T0                T1            T2            T3            T4
req0            ordered           processing      processing     finished
req1                              ordered         processing     processing    finished

But current implementation of libsystemctlm-soc does not support this feature, and the two request are processed as below, is it right ?

                   T0                T1            T2            T3             T4             T5            T6
req0            ordered           processing      processing     finished
req1                                                             ordered        processing     processing    finished
figlesia-xilinx commented 7 months ago

Hi Felix,

Yes above is correct. Perhaps with the minor rephrasing on the '...should have the abilities...' to '...is allowed to have the abilities...'. Processing in parallel is done for performance and is probably always done (but it is not a must feature of an interconnect).

iconnect-chi.h currently does not support this yet, but this is definitively an addition that would be great have.

Best regards, Francisco

gxflying commented 7 months ago

@figlesia-xilinx , got it, Thanks ~