
\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}