To improve the communication performance of data-parallel computing
jobs, many scheduling methods [1]}, [2]}, [3]}, [4]}, [5]}, [6]}
have been proposed to minimize CCT. These researches have greatly
accelerated the execution of a single-stage job containing only one
coflow, where minimizing CCT implies minimizing job completion time
(JCT). However, in the data-parallel computing framework, multi-stage
jobs are common. The structure of a multi-stage job is shown in Fig.
REF , where the nodes represent the coflows and
the directed edges represent the dependencies between them. Each multi-stage
job contains multiple coflows with dependencies, and each coflow is
composed of multiple parallel flows. There are two types of dependencies:
\(\textit {starts-after}\)  dependency and \(\textit {finishes-before}\) 
dependency [7]}, where \(\textit {starts-after}\)  indicates
that \(C_{2}\)  cannot start until \(C_{1}\)  has finished and \(\textit {finishes-before}\) 
indicates that \(C_{2}\)  can coexist with \(C_{1}\)  but it cannot finish
until \(C_{1}\)  has finished.
