The first step in instantiating a program's tasks is actually specifying what instances are going to be created. Suppose that the matrix multiplication running example program is to be mapped to a Cell target machine with the following abstract machine model, and that the program will be operating on very large (many-GB) matrices that are staged on disk.
The programmer would create three task instances in this case, one instance of MatMul::Inner to decompose the large (on-disk) matrices into medium-sized submatrices that would fit in machine's main memory, a second instance of MatMul::Inner to split the main-memory medium-sized submatrices up into small, LS-sized sub-submatrices, and then an instance of MatMul::Leaf to actually perform a small matrix multiplication operation on the Cell SPEs. These three instances are illustrated in the following task instance call graph: