\begin{tikzpicture} \begin{pgfonlayer}{nodelayer} \node [style=none] (2) at (5, 15.5) {}; \node [style=none] (3) at (8.75, 15.5) {}; \node [style=none] (4) at (5, 13.5) {}; \node [style=none] (5) at (8.75, 13.5) {}; \node [style=none] (7) at (7.25, 14.5) {memref\_t}; \node [style=application] (9) at (5.5, 27) {Multithreaded application}; \node [style=none] (10) at (0.25, 24) {}; \node [style=none] (11) at (0.25, 18) {}; \node [style=none] (12) at (13.5, 24) {}; \node [style=none] (13) at (13.5, 18) {}; \node [style=none] (14) at (5.5, 24) {}; \node [style=none] (15) at (5.5, 18) {}; \node [style=none] (16) at (3, 21) {DynamoRIO}; \node [style=none] (17) at (9.5, 23) {DrCacheSim Client}; \node [style=none] (18) at (5.5, 24) {}; \node [style=function] (19) at (9.5, 21.5) {event\_bb\_analysis()}; \node [style=function] (20) at (9.5, 20) {event\_thread\_init()}; \node [style=none] (28) at (9.5, 19) {\vdots}; \node [style=none] (30) at (13.5, 21) {}; \node [style=none] (31) at (0, 11) {}; \node [style=none] (32) at (13.75, 11) {}; \node [style=none] (33) at (0, 0) {}; \node [style=none] (34) at (13.75, 0) {}; \node [style=none] (36) at (9.35, 14.5) {}; \node [style=none] (37) at (7, 10) {DrCacheSim Analyzer}; \node [style=none] (38) at (5.5, 8.75) {}; \node [style=none] (39) at (13, 8.75) {}; \node [style=none] (40) at (5.5, 5.75) {}; \node [style=none] (41) at (13, 5.75) {}; \node [style=none] (43) at (9.25, 8) {DRAMTracer}; \node [style=function] (44) at (9.25, 6.75) {process\_memref()}; \node [style=none] (45) at (5.5, 3.75) {}; \node [style=none] (46) at (13, 3.75) {}; \node [style=none] (47) at (5.5, 0.75) {}; \node [style=none] (48) at (13, 0.75) {}; \node [style=none] (49) at (9.25, 3) {Other analysis\_tool\_t}; \node [style=function] (50) at (9.25, 1.75) {process\_memref()}; \node [style=none] (51) at (9.25, 5) {.}; \node [style=none] (52) at (9.25, 4.75) {.}; \node [style=none] (53) at (9.25, 4.5) {.}; \node [style=none] (54) at (7, 16) {Named pipe}; \node [style=none] (55) at (1, 11) {}; \node [style=none] (56) at (1, 1.75) {}; \node [style=none] (57) at (1, 6.75) {}; \node [style=none] (58) at (3.25, 7.25) {memref\_t \&}; \node [style=none] (59) at (3.25, 2.25) {memref\_t \&}; \node [style=none] (60) at (15, 21) {}; \node [style=none] (61) at (15, 14.5) {}; \node [style=none] (62) at (1, 14.5) {}; \node [style=none] (63) at (5, 14.5) {}; \end{pgfonlayer} \begin{pgfonlayer}{edgelayer} \draw [style=pipe] (2.center) to [bend right=90, looseness=0.75] (4.center) to [bend right=90, looseness=0.75] cycle; \draw [style=pipe] (4.center) to [bend right=90, looseness=0.75] (2.center) to (3.center) to [bend left=90] (5.center) to cycle; \draw [style=block] (12.center) to (13.center) to (15.center) to (11.center) to (10.center) to (14.center) to cycle; \draw [style=dashed line] (14.center) to (15.center); \draw [style=block] (33.center) to (31.center) to (32.center) to (34.center) to cycle; \draw [style=inner block] (38.center) to (40.center) to (41.center) to (39.center) to cycle; \draw [style=inner block] (47.center) to (48.center) to (46.center) to (45.center) to cycle; \draw [style=arrow without head] (55.center) to (57.center); \draw [style=arrow without head] (57.center) to (56.center); \draw [style=arrow] (57.center) to (44); \draw [style=arrow] (56.center) to (50); \draw [style=arrow] (9) to (18.center); \draw [style=arrow without head] (30.center) to (60.center); \draw [style=arrow without head] (60.center) to (61.center); \draw [style=arrow without head] (63.center) to (62.center); \draw [style=arrow] (61.center) to (36.center); \draw [style=arrow] (62.center) to (55.center); \end{pgfonlayer} \end{tikzpicture}