The partition determines which array elements and iterations are local to a single processor. The orientation together with the displacement can now specify the processor on which the data and computation are allocated. In particular, the orientation gives the correspondence between the data and computation dimensions and the processor dimensions. In loop nest 1, the columns of array Y are accessed in the reverse order from the columns of X. In loop nest 2, the columns of array Y are accessed in the same order as the rows of array Z. One solution that satisfies all these requirements is to allocate the columns of X in forward order, and the columns of Y and the rows of Z in reverse order. The iterations of the loop in loop nest 2 must now be reversed as well. The orientation is illustrated in Figure 1(b).
Formally, the matrix D from Def. 2.1 defines the data orientation and the matrix C from Def. 2.2 is the computation orientation. The matrices for the example are also shown in Figure 1(b). Note that there exist many different communication-free orientations, all with the same partition. For this example, we could just have easily chosen to allocate the columns of X in reverse order, and the columns of Y and the rows of Z in forward order. This alternative orientation would result in , and , with and .