Parallel programs can be broadly classified as being either data parallel or control parallel. In data parallel programs, parallelism is achieved by assigning one processor to each data element that is to be computed. This model of computation allows for very simple, yet powerful programs to be written. If there are more data than actual processors, a number of virtual processors is simulated by each physical processor. In control parallel programs on the other hand, each processor independently executes its version of the program on its own data and may communicate with other processors from time to time. The programmer controls the distribution of the data to the nodes and also specifies the task to be performed by each node. The CM-5 can be used either in data parallel mode or in control parallel fashion.