diff --git a/inc/6.implementation.tex b/inc/6.implementation.tex index 103ed9b..cf4375a 100644 --- a/inc/6.implementation.tex +++ b/inc/6.implementation.tex @@ -182,5 +182,21 @@ The implementation of a snooping protocol is a candidate for future improvements \subsection{Trace Player Interface} \label{sec:traceplayer_interface} +Previously, initiators could only represent one thread when connected to DRAMSys. +This, however, conflicted with the goal to develop an trace player module that internally composes of multiple threads that communicate with each other and initiate transactions to DRAMSys independently. + +To be able to couple such hierarchical initiator modules with DRAMSys, a new trace player interface was developed. +The \texttt{TrafficInitiatorIF} interface requires to implement the \texttt{bindTargetSocket()} method for every top-level initiator. +A top-level initiator can either be a single thread, like in previous versions, or a more complex hierarchical module with many internal threads. +This makes it possible to polymorphically threat all initiator modules like this interface and connect them to DRAMSys with the provided bind method. + \subsection{Interconnect} \label{sec:interconnect} + +As already seen in figure \ref{fig:dbiplayer_with_caches}, interconnection modules are needed to connect the caches with each other. +While the implementation of the \textit{MultiCoupler} component is trivial as it only passes the transactions from its so-called target multi-socket to its initiator multi-socket, the \textit{MultiSimpleCoupler} is more complex because it has to internally buffer transactions. +In order to understand why this buffering needed, consider scenario where the L3 cache applies back pressure to one L2 cache. +The L2 cache is not allowed to send further requests but since the target socket of the L3 cache is occupied, this also applies to all other other L2 caches. +This information, however, is not propagated to the other caches, leading to an incorrect behavior. +To solve this problem, the MultiSimpleCoupler only forwards requests to the L3 cache when it is able to accept them. +If this is not the case, the request gets internally buffered and forwarded when an earlier request is being completed with the \texttt{END\_REQ} phase.