Function: divide the computation into disjoint or unassociated operations
- All the work in this problem is accomplished in one loop. It would be contrived
(and less efficient!) to split it up.
Data: give each process a different subset of the domain
- Dimensions: position (i), time (t)
- Which data can be computed concurrently in the update of A(i,t+1)? - test for
data independence:
A(i,t+1) = 2.0*A(i,t) - A(i,t-1)
+ c * (A(i-1,t) - 2.0*A(i,t) + A(i+1,t))
- Does (t+1) depend on (t), at (i)? - yes
- Does (i) depend on (i-1), at (t+1)? - no
- The test shows that t has a data dependence but i doesn't
- Conclusion: parallelize by decomposition along i
- What data will be required?
- Neighboring points
- Small amount of communication across domain boundaries