Unstructured communication primitives are required by
computations which require the use of a preprocessor.
As discussed in Section ,
the schedules can be reused with appropriate analysis [26][21]
The communication routines perform sends and receives
according the scheduling data structure called isch.
The schedule isch can also be used to carry out identical patterns of data exchanges on several different but identically distributed arrays or array sections. The same schedule can be reused repeatedly to carry out a particular pattern of data exchange on a single distributed array. In these cases, the cost of generating the schedules can be amortized by only executing the schedule generation routine once. This analysis can be performed at compile time. Hence, if the compiler recognizes that the same schedule can be reused, it does not generate code for scheduling but it passes a pointer to an already existing and saved schedule. Furthermore, the preprocessing computation can be moved up as much as possible by analyzing definition-use chains [56]. Reduction in communication overhead can be significant if the scheduling code can be moved out of one or more nested loops.