Let us assume that a parallel program \( {\cal P} \) is a set of communicating loops. We define a weighted, directed Interprocess Communication Graph (IPCG) for \( \cal{P} \) as: \[ G({\cal P})=(V({\cal P}), E({\cal P}), \alpha, \beta), \] Where:
\( V({\cal P}) \) is a union of disjoint subsets: \[ V({\cal P}))=X({\cal P})\cup B({\cal P} )\cup S({\cal P} )\cup D({\cal P} )\cup R({\cal P} ) ,\] where:
Message 'send' and 'receive' instructions are referred to as communication units.
Communication instructions and back-jumps are referred to as execution units.
Each loop is identified by its entry point \( x\in X({\cal P}) \), and \( b(x)\in B({\cal P}) \) denotes the back-jump
instruction of loop \( x \).
The delivery point of the sending instruction \( s\in S({\cal S}) \) is denoted by \( d(s)\in D({\cal P}) \).
For \( v\in V({\cal P}) \), \( \psi(v) \) denotes the identifier of the process containing \( v \).
\( E({\cal P}) \) is a union of the following disjoint subsets: \[ E({\cal P})= E_{1}({\cal P})\cup E_{2}({\cal P})\cup E_{3}({\cal P}) \cup E_{4}({\cal P})\cup E_{5}({\cal P})\cup E_{6}({\cal P})\cup E_{7}({\cal P}), \] where:
Each edge in \( E_1({\cal P}) \) represents communication task. Each edge in \( E_2({\cal P})\cup E_3({\cal P}) \) represents computation task. The edges in \( E_1({\cal P})\cup E_2({\cal P})\cup E_3({\cal P}) \) are referred to as the task edges. For a task edge \( (u,v) \), \( \alpha(u,v) \) and \( \beta(u,v) \) represent the lower and upper bounds of the time length of task \( (u,v) \). For computation task \( (u,v) \), the values of \( \alpha(u,v) \) and \( \beta(u,v) \) are obtained either by profiling or by a static analysis of the code. For communication task \( (u,v) \) we have:
The edges in \( E_4({\cal P})\cup E_5({\cal P})\cup E_6({\cal P})\cup E_7({\cal P}) \) are referred to as control edges. They represent only timing constraints among instructions -- not any real tasks. For each control edge \( (u,v) \), \( \alpha(u,v)=\beta(u,v)=0 \).
Each edge \( (u,v) \) in \( E_4({\cal P})\cup E_6({\cal P}) \) is referred to as inter-iteration edge, since it indicates that \( v \) is executed after \( u \) in the next iteration of the loop. On the other hand, each edge \( (u,v) \) in \( E({\cal P})\setminus \left(E_4({\cal P})\cup E_6({\cal P})\right) \) indicates that \( v \) is executed after \( u \) in the same iteration of the loop, and it is referred to as intra-iteration edge. Note that the intra-iteration edges of \( G({\cal P}) \) determine a partial order on \( V({\cal P}) \).