\begin{tikzpicture} \tikzstyle{node} = [minimum height=1.0*1.2em,draw,fill=green!20] \tikzstyle{legend} = [minimum height=1.0*1.2em,minimum width=1.0*1.2em,draw] \tikzstyle{node2} = [minimum width=1.0*1.2em,minimum height=4.1*1.2em,draw,fill=blue!20] \node[node,minimum width=2.8*1.2em] (node1) at (0,0) {}; \node[node,minimum width=4.0*1.2em,anchor=north west] (node2) at (node1.south west) {}; \node[node,minimum width=3.2*1.2em,anchor=north west] (node3) at (node2.south west) {}; \node[node,minimum width=3.0*1.2em,anchor=north west] (node4) at (node3.south west) {}; \node[node2,anchor = north west] (grad1) at ([xshift=1.2em]node1.north east) {}; \node[node,minimum width=3.7*1.2em,anchor=north west] (node5) at (grad1.north east) {}; \node[node,minimum width=2.8*1.2em,anchor=north west] (node6) at (node5.south west) {}; \node[node,minimum width=3.2*1.2em,anchor=north west] (node7) at (node6.south west) {}; \node[node,minimum width=4.0*1.2em,anchor=north west] (node8) at (node7.south west) {}; \node[font=\footnotesize,anchor=east] (line1) at (node1.west) {GPU1}; \node[font=\footnotesize,anchor=east] (line2) at (node2.west) {GPU2}; \node[font=\footnotesize,anchor=east] (line3) at (node3.west) {GPU3}; \node[font=\footnotesize,anchor=east] (line4) at (node4.west) {GPU4}; \node[node2,anchor = north west] (grad2) at ([xshift=0.3em]node5.north east) {}; \draw[->,thick] (-1.4em*1.2,-3.62*1.2em) -- (9em*1.2,-3.62*1.2em); \node[node,minimum width=2.8*1.2em] (node9) at (16em,0) {}; \node[node,minimum width=4.0*1.2em,anchor=north west] (node10) at (node9.south west) {}; \node[node,minimum width=3.2*1.2em,anchor=north west] (node11) at (node10.south west) {}; \node[node,minimum width=3.0*1.2em,anchor=north west] (node12) at (node11.south west) {}; \node[node,minimum width=3.7*1.2em,anchor=north west] (node13) at (node9.north east) {}; \node[node,minimum width=2.8*1.2em,anchor=north west] (node14) at (node10.north east) {}; \node[node,minimum width=3.2*1.2em,anchor=north west] (node15) at (node11.north east) {}; \node[node,minimum width=4.0*1.2em,anchor=north west] (node16) at (node12.north east) {}; \node[node2,anchor = north west] (grad3) at ([xshift=0.5em]node13.north east) {}; \node[font=\footnotesize,anchor=east] (line1) at (node9.west) {GPU1}; \node[font=\footnotesize,anchor=east] (line2) at (node10.west) {GPU2}; \node[font=\footnotesize,anchor=east] (line3) at (node11.west) {GPU3}; \node[font=\footnotesize,anchor=east] (line4) at (node12.west) {GPU4}; \draw[->,thick] (node12.south west) -- ([xshift=3em]node16.south east); \begin{pgfonlayer}{background} \node [rectangle,inner sep=-0.0em,draw] [fit = (node1) (node2) (node3) (node4)] (box1) {}; \node [rectangle,inner sep=-0.0em,draw] [fit = (node5) (node6) (node7) (node8)] (box2) {}; \node [rectangle,inner sep=-0.0em,draw] [fit = (node9) (node13) (node12) (node16)] (box2) {}; \end{pgfonlayer} \node[font=\footnotesize,anchor=north] (legend1) at ([xshift=3em]node4.south) {一步一更新}; \node[font=\footnotesize,anchor=north] (legend2) at ([xshift=2.5em]node12.south) {累积两步更新}; \node[font=\footnotesize,anchor=north] (time1) at (grad2.south) {time}; \node[font=\footnotesize,anchor=north] (time1) at (grad3.south) {time}; \node[legend] (legend3) at (2em,2em) {}; \node[font=\footnotesize,anchor=west] (idle) at (legend3.east) {:空闲}; \node[legend,anchor=west,draw,fill=green!30] (legend4) at ([xshift = 2em]idle.east) {}; \node[font=\footnotesize,anchor=west] (FB) at (legend4.east) {:前向/反向}; \node[legend,anchor=west,draw,fill=blue!30] (legend5) at ([xshift = 2em]FB.east) {}; \node[font=\footnotesize,anchor=west] (grad_sync) at (legend5.east) {:梯度更新}; \end{tikzpicture}