The creation of programs to be executed by more than one processor at the same time. Parallel programming is more difficult than ordinary SEQUENTIAL programming because of the added problem of synchronization. A sequential program has only a single FLOW OF CONTROL and runs until it stops, whereas a parallel program spawns many CONCURRENT processes and the order in which they complete affects the overall result.
A second problem is that parallel programs may become dependent on the connection TOPOLOGY of the multiple processors they run on, which makes them difficult to port to a different parallel architecture.
To synchronize parallel processes using a conventional programming language, a programmer typically employs SEMAPHORE or MONITOR data structures, but much research has been devoted to creating special programming languages that simplify the task. Some of these languages (including OCCAM and PARALLEL C) support EXPLICIT PARALLELISM using novel control structures, while others (such as LINDA and Parlog) employ an IMPLICIT PARALLELISM which is concealed from the programmer.