- SPMD
In
computing , SPMD (Single Process, Multiple Data) or (Single Program, Multiple Data) is a technique employed to achieve parallelism; it is a subcategory ofMIMD . Tasks are split up and run simultaneously on multiple processors with different input in order to obtain results faster. SPMD is the most common style of parallel programming [http://www.nist.gov/dads/HTML/singleprogrm.html] . It is also a prerequisite for research concepts such asactive message s anddistributed shared memory .PMD vs SIMD
In SPMD, multiple autonomous processors simultaneously execute the same program at independent points, rather than in the lockstep that
SIMD imposes on different data. With SPMD, tasks can be executed on general purpose CPUs; SIMD requiresvector processors to manipulate data streams. Note that the two are not mutually exclusive.Distributed memory
SPMD usually refers to
message passing programming ondistributed memory computer architectures. A distributed memory computer consists of a collection of independent computers, called nodes. Each node starts its own program and communicates with other nodes by sending and receiving messages, calling send/receive routines for that purpose. Barriersynchronization may also be implemented by messages. The messages can be sent by a number of communication mechanisms, such asTCP/IP overEthernet , or specialized high-speed interconnects such asMyrinet andSupercomputer Interconnect . Serial sections of the program are implemented by identical computation on all nodes rather than computing the result on one node and sending it to the others.Nowadays, the programmer is isolated from the details of the message passing by standard interfaces, such as PVM and MPI.
Distributed memory is the programming style used on parallel supercomputers from homegrown
Beowulf cluster s to the largest clusters on theTeragrid .hared memory
On a
shared memory machine (a computer with severalCPU s that access the same memory space), messages can be sent by depositing their contents in a shared memory area. This is often the most efficient way to program shared memory computers with large number of processors, especially on NUMA machines, where memory is local to processors and accessing memory of another processor takes longer. SPMD on a shared memory machine is usually implemented by standard (heavyweight) processes.Unlike SPMD, shared memory
multiprocessing , also calledsymmetric multiprocessing or SMP, presents the programmer with a common memory space and the possibility to parallelize execution by having the program take different paths on different processors. The program starts executing on one processor and the execution splits in a parallel region, which is started whenparallel directive s are encountered. In a parallel region, the processors execute a single program on different data. A typical example is the parallel DO loop, where different processors work on separate parts of the arrays involved in the loop. At the end of the loop, execution is synchronized, only one processor continues, and the others wait. The current standard interface for shared memory multiprocessing isOpenMP . It usually implemented by lightweight processes, called threads.Combination of levels of parallelism
Current computers allow exploiting of many parallel modes at the same time for maximum combined effect. A distributed memory program using
MPI may run on a collection of nodes. Each node may be a shared memory computer and execute in parallel on multiple CPUs using OpenMP. Within each CPU, SIMD vector instructions (usually generated automatically by the compiler) andsuperscalar instruction execution (usually handled transparently by the CPU itself), such aspipelining and the use of multiple parallel functional units, are used for maximum single CPU speed.History
SPMD was proposed in
1984 byFrederica Darema atIBM for highly parallel machines like the RP3 (the IBM Research Parallel Processor Prototype), in an unpublished IBM memo [F. Darema, "SPMD model: past, present and future", Recent Advances in Parallel Virtual Machine and Message Passing Interface: 8th European PVM/MPI Users' Group Meeting, Santorini/Thera, Greece, September 23-26, 2001. Lecture Notes in Computer Science 2131, p. 1, 2001.] By late 1980s, there were many distributed computers with proprietary message passing libraries. The first SPMD standard was PVM. The current de-facto standard is MPI.The
Cray parallel directives were a direct predecessor ofOpenMP .References
External links
* [http://www.cisl.ucar.edu/docs/ibm/ref/parallel.html Parallel job management and message passing]
* [http://www.llnl.gov/casc/Overture/henshaw/documentation/App/manual/node36.html Single Program Multiple Data stream]
* [http://web0.tc.cornell.edu/Services/Education/Topics/Parallel/Design/SPMD.aspx SPMD]
* [http://math.nist.gov/~KRemington/Primer/distrib.html Distributed-memory programming]
Wikimedia Foundation. 2010.