Solworth, Jon A.2007-04-232007-04-231987-04http://techreports.library.cornell.edu:8081/Dienst/UI/1.0/Display/cul.cs/TR87-807https://hdl.handle.net/1813/6647To date, the implementation of message passing languages have required the communications variables (sometimes called ports) either to be limited to the number of physical communications registers in the machine, or to be mapped to memory. Neither solution is satisfactory. Limiting the number of variables decreases modularity and efficiency of parallel programs. Mapping variables to memory increases the cost of communications and the granularity of parallelism. We present here a new programming language construct called epochs. Epochs are a scoping mechanism within which the programmer can declare communications variables, which are live only during the scope of that epoch. To limit the range of time a register has to be allocated for a communications variable, the compiler ensures that all processors enter an epoch simultaneously. The programming style engendered fits somewhere between the SIMD data parallel and MIMD process spawning models. We describe an implementation for epochs including an efficient synchronization mechanism, means of statically binding registers to communications variables and a method of fusing epochs to reduce synchronization overhead.2207916 bytes410456 bytesapplication/pdfapplication/postscripten-UScomputer sciencetechnical reportEpochstechnical report