All Topics  
Parallel computing

 

   Email Print
   Bookmark   Link






 

Parallel computing



 
 
Parallel computing is a form of computation
Computing

Computing is usually defined as the activity of using and developing computer technology, computer hardware and computer software. It is the computer-specific part of information technology....
 in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently
Concurrency (computer science)

In computer science, concurrency is a property of systems in which several computations are executing simultaneously, and potentially interacting with each other....
 ("in parallel").






Discussion
Ask a question about 'Parallel computing'
Start a new discussion about 'Parallel computing'
Answer questions from other users
Full Discussion Forum



Encyclopedia


Cray 2 Arts Et Metiers Dsc03940
Parallel computing is a form of computation
Computing

Computing is usually defined as the activity of using and developing computer technology, computer hardware and computer software. It is the computer-specific part of information technology....
 in which many calculations are carried out simultaneously, operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently
Concurrency (computer science)

In computer science, concurrency is a property of systems in which several computations are executing simultaneously, and potentially interacting with each other....
 ("in parallel"). There are several different forms of parallel computing: bit-level-
Bit-level parallelism

Bit-level parallelism is a form of parallel computing based on increasing Word . From the advent of very-large-scale integration computer chip fabrication technology in the 1970s until about 1986, advancements in computer architecture were done by increasing bit-level parallelism...
, instruction-level-
Instruction level parallelism

Instruction-level parallelism is a measure of how many of the operations in a computer program can be performed simultaneously. Consider the following program:...
, data-
Data parallelism

Data parallelism is a form of parallelization of computing across multiple central processing units in parallel computing environments. Data parallelism focuses on distributing the data across different parallel computing nodes....
, and task parallelism
Task parallelism

Task parallelism is a form of parallelization of computer code across multiple Central processing units in parallel computing environments. Task parallelism focusses on distributing execution processes across different parallel computing nodes....
. Parallelism has been employed for many years, mainly in high-performance computing, but interest in it has grown lately due to the physical constraints preventing frequency scaling
Frequency scaling

Frequency scaling is, in computer architecture, the technique of ramping a processor's frequency so as to achieve performance gains. Frequency ramping was the dominant force in commodity processor performance increases from the mid-1980s until the end of 2004....
. As power consumption by computers has become a concern in recent years, parallel computing has become the dominant paradigm in computer architecture
Computer architecture

Computer architecture in computer engineering is the conceptual design and fundamental operational structure of a computer system. It is a blueprint and functional description of requirements and design implementations for the various parts of a computer, focusing largely on the way by which the central processing unit performs internally an...
, mainly in the form of multicore processor
Multi-core (computing)

A multi-core processor combines two or more independent cores into a single package composed of a single integrated circuit , called a Die , or more dies packaged together....
s.

Parallel computers can be roughly classified according to the level at which the hardware supports parallelism—with multi-core and multi-processor
Symmetric multiprocessing

In computing, symmetric multiprocessing or SMP involves a multiprocessor computer-architecture where two or more identical processors can connect to a single shared main memory....
 computers having multiple processing elements within a single machine, while clusters, MPPs, and grids
Grid computing

Grid computing is the application of several computers to a single problem at the same time -- usually to a scientific or technical problem that requires a great number of computer processing cycles or access to large amounts of data....
 use multiple computers to work on the same task. Specialized parallel computer architectures are sometimes used alongside traditional processors, for accelerating specific tasks.

Parallel computer programs
Parallel algorithm

In computer science, a parallel algorithm, as opposed to a traditional sequential algorithm, is one which can be executed a piece at a time on many different processing devices, and then put back together again at the end to get the correct result....
 are more difficult to write than sequential ones, because concurrency introduces several new classes of potential software bug
Software bug

A software bug is an error, flaw, mistake, failure, or fault in a computer program that prevents it from behaving as intended . Most bugs arise from mistakes and errors made by people in either a program's source code or its software architecture, and a few are caused by compilers producing incorrect code....
s, of which race condition
Race condition

A race condition or race hazard is a flaw in a system or process whereby the output and/or result of the process is unexpectedly and critically dependent on the sequence or timing of other events....
s are the most common. Communication
Computer networking

Computer networking is the engineering discipline concerned with communication between computer systems or Peripheral devices. Networking, routers, routing protocols, and networking over the public Internet have their specifications defined in documents called Request for Commentss....
 and synchronization
Synchronization (computer science)

In computer science, synchronization refers to one of two distinct but related concepts: synchronization of process , and synchronization of data....
 between the different subtasks are typically one of the greatest obstacles to getting good parallel program performance. The speed-up
Speedup

In parallel computing, speedup refers to how much a parallel algorithm is faster than a corresponding sequential algorithm....
 of a program as a result of parallelization is given by Amdahl's law
Amdahl's law

Amdahl's law, also known as Amdahl's argument, is named after Computer architecture Gene Amdahl, and is used to find the maximum expected improvement to an overall system when only part of the system is improved....
.

Background


Traditionally, computer software has been written for serial computation. To solve a problem, an algorithm
Algorithm

In mathematics, computing, linguistics and related subjects, an algorithm is a sequence of finite instructions, often used for calculation and data processing....
 is constructed and implemented as a serial stream of instructions. These instructions are executed on a central processing unit
Central processing unit

A central processing unit is an electronic circuit that can execute computer programs. This broad definition can easily be applied to many early computers that existed long before the term "CPU" ever came into widespread usage....
 on one computer. Only one instruction may execute at a time—after that instruction is finished, the next is executed.

Parallel computing, on the other hand, uses multiple processing elements simultaneously to solve a problem. This is accomplished by breaking the problem into independent parts so that each processing element can execute its part of the algorithm simultaneously with the others. The processing elements can be diverse and include resources such as a single computer with multiple processors, several networked computers, specialized hardware, or any combination of the above.

Frequency scaling
Frequency scaling

Frequency scaling is, in computer architecture, the technique of ramping a processor's frequency so as to achieve performance gains. Frequency ramping was the dominant force in commodity processor performance increases from the mid-1980s until the end of 2004....
 was the dominant reason for improvements in computer performance from the mid-1980s until 2004. The runtime of a program is equal to the number of instructions multiplied by the average time per instruction. Maintaining everything else constant, increasing the clock frequency decreases the average time it takes to execute an instruction. An increase in frequency thus decreases runtime for all computation-bounded
CPU bound

In computer science, CPU bound is when the time for a computer to complete a task is determined principally by the speed of the Central processing unit: processor utilization is high, perhaps at 100% usage for many seconds or minutes....
 programs.

However, power consumption by a chip is given by the equation P = C × V2 × F, where P is power, C is the capacitance
Capacitance

In electromagnetism and electronics, capacitance is the ability of a body to hold an electrical charge.Capacitance is also a measure of the amount of electric charge stored for a given electric potential....
 being switched per clock cycle (proportional to the number of transistors whose inputs change), V is voltage
Voltage

Electrical tension is the potential difference between two points of an electrical or electronic circuit, expressed in volts. It is the measurement of the potential for an electric field to cause an electric current in an electrical conductor....
, and F is the processor frequency (cycles per second). Increases in frequency increase the amount of power used in a processor. Increasing processor power consumption led ultimately to Intel's May 2004 cancellation of its Tejas and Jayhawk
Tejas and Jayhawk

Tejas was a code name for Intel Corporation's microprocessor which was to be a successor to the latest Pentium 4 with Pentium 4#Prescott core. Jayhawk was a code name for its Xeon counterpart....
 processors, which is generally cited as the end of frequency scaling as the dominant computer architecture paradigm.

Moore's Law
Moore's Law

Moore's law describes a long-term trend in the history of computing hardware. Since the invention of the integrated circuit in 1958, the number of transistors that can be placed inexpensively on an integrated circuit has increased exponential growth, doubling approximately every two years....
 is the empirical observation that transistor density in a microprocessor doubles every 18 to 24 months. Despite power consumption issues, and repeated predictions of its end, Moore's law is still in effect. With the end of frequency scaling, these additional transistors (which are no longer used for frequency scaling) can be used to add extra hardware for parallel computing.

Amdahl's law and Gustafson's law


Optimally, the speed-up from parallelization would be linear—doubling the number of processing elements should halve the runtime, and doubling it a second time should again halve the runtime. However, very few parallel algorithms achieve optimal speed-up. Most of them have a near-linear speed-up for small numbers of processing elements, which flattens out into a constant value for large numbers of processing elements.

The potential speed-up of an algorithm on a parallel computing platform is given by Amdahl's law
Amdahl's law

Amdahl's law, also known as Amdahl's argument, is named after Computer architecture Gene Amdahl, and is used to find the maximum expected improvement to an overall system when only part of the system is improved....
, originally formulated by Gene Amdahl
Gene Amdahl

Gene Myron Amdahl is a Norwegian American computer architect and hi-tech entrepreneur, chiefly known for his work on mainframe computers at International Business Machines and later his own companies, especially Amdahl Corporation....
 in the 1960s. It states that a small portion of the program which cannot be parallelized will limit the overall speed-up available from parallelization. Any large mathematical or engineering problem will typically consist of several parallelizable parts and several non-parallelizable (sequential) parts. This relationship is given by the equation:

where S is the speed-up of the program (as a factor of its original sequential runtime), and P is the fraction that is parallelizable. If the sequential portion of a program is 10% of the runtime, we can get no more than a 10x speed-up, regardless of how many processors are added. This puts an upper limit on the usefulness of adding more parallel execution units. "When a task cannot be partitioned because of sequential constraints, the application of more effort has no effect on the schedule. The bearing of a child takes nine months, no matter how many women are assigned."

Gustafson's law
Gustafson's law

Gustafson's Law is a law in computer engineering which states that any sufficiently large problem can be efficiently parallel computing. Gustafson's Law is closely related to Amdahl's law, which gives a limit to the degree to which a program can be sped up due to parallelization....
 is another law in computer engineering, closely related to Amdahl's law. It can be formulated as:

where P is the number of processors, S is the speed-up, and the non-parallelizable part of the process. Amdahl's law assumes a fixed-problem size and that the size of the sequential section is independent of the number of processors, whereas Gustafson's law does not make these assumptions.

Dependencies

Understanding data dependencies
Data dependency

A data dependency in computer science is a situation in which a program statement refers to the data of a preceding statement. In compiler theory, the technique used to discover data dependencies among statements is called Dependence analysis....
 is fundamental in implementing parallel algorithm
Parallel algorithm

In computer science, a parallel algorithm, as opposed to a traditional sequential algorithm, is one which can be executed a piece at a time on many different processing devices, and then put back together again at the end to get the correct result....
s. No program can run more quickly than the longest chain of dependent calculations (known as the critical path
Critical Path

Critical Path may refer to:*Critical path method, an algorithm for scheduling of activities*Critical Path by Buckminster Fuller*Critical Path , an interactive movie computer game...
), since calculations that depend upon prior calculations in the chain must be executed in order. However, most algorithms do not consist of just a long chain of dependent calculations; there are usually opportunities to execute independent calculations in parallel.

Let Pi and Pj be two program fragments. Bernstein's conditions describe when the two are independent and can be executed in parallel. For Pi, let Ii be all of the input variables and Oi the output variables, and likewise for Pj. P i and Pj are independent if they satisfy



Violation of the first condition introduces a flow dependency, corresponding to the first statement producing a result used by the second statement. The second condition represents an anti-dependency, when the first statement overwrites a variable needed by the second expression. The third and final condition, q, is an output dependency. When two variables write to the same location, the final output must have arisen from the second statement.

Consider the following functions, which demonstrate several kinds of dependencies:

1: function Dep(a, b) 2: c := a·b 3: d := 2·c 4: end function

Operation 3 in Dep(a, b) cannot be executed before (or even in parallel with) operation 2, because operation 3 uses a result from operation 2. It violates condition 1, and thus introduces a flow dependency.

1: function NoDep(a, b) 2: c := a·b 3: d := 2·b 4: e := a+b 5: end function

In this example, there are no dependencies between the instructions, so they can all be run in parallel.

Bernstein’s conditions do not allow memory to be shared between different processes. For that, some means of enforcing an ordering between accesses is necessary, such as semaphores
Semaphore (programming)

In computer science, a semaphore is a protected variable or abstract data type which constitutes the classic method for restricting access to shared resources such as shared memory in a multiprogramming environment....
, barriers
Barrier (computer science)

In parallel computing, a barrier is a type of synchronization method. A barrier for a group of threads or processes in the source code means any thread/process must stop at this point and cannot proceed until all other threads/processes reach this barrier....
 or some other synchronization method
Synchronization (computer science)

In computer science, synchronization refers to one of two distinct but related concepts: synchronization of process , and synchronization of data....
.

Race conditions, mutual exclusion, synchronization, and parallel slowdown


Subtasks in a parallel program are often called threads
Thread (computer science)

In computer science, a thread of execution is a Fork of a computer program into two or more Concurrency running task s. The implementation of threads and process es differs from one operating system to another, but in most cases, a thread is contained inside a process....
. Some parallel computer architectures use smaller, lightweight versions of threads known as fibers
Fiber (computer science)

In computer science, a fiber is a particularly lightweight thread of execution.Like threads, fibers share address space; where a distinction exists, it is that fibers use Computer multitasking#Cooperative multitasking/time-sharing while threads use pre-emptive multitasking....
, while others use bigger versions known as processes
Process (computing)

In computing, a process is an Object of a computer program that is being sequentially executed by a computer system that has the ability to run several computer programs Concurrency ....
. However, "threads" is generally accepted as a generic term for subtasks. Threads will often need to update some variable
Variable

A variable is a symbol that stands for a value that may vary; the term usually occurs in opposition to constant, which is a symbol for a non-varying value, i.e....
 that is shared between them. The instructions between the two programs may be interleaved in any order. For example, consider the following program:

Thread AThread B
1A: Read variable V1B: Read variable V
2A: Add 1 to variable V2B: Add 1 to variable V
3A Write back to variable V3B: Write back to variable V


If instruction 1B is executed between 1A and 3A, or if instruction 1A is executed between 1B and 3B, the program will produce incorrect data. This is known as a race condition
Race condition

A race condition or race hazard is a flaw in a system or process whereby the output and/or result of the process is unexpectedly and critically dependent on the sequence or timing of other events....
. The programmer must use a lock
Lock (computer science)

In computer science, a lock is a Synchronization mechanism for enforcing limits on access to a resource in an environment where there are many thread ....
 to provide mutual exclusion
Mutual exclusion

Mutual exclusion algorithms are used in concurrent programming to avoid the simultaneous use of a common resource, such as a global variable, by pieces of computer code called critical sections....
. A lock is a programming language construct that allows one thread to take control of a variable and prevent other threads from reading or writing it, until that variable is unlocked. The thread holding the lock is free to execute its critical section
Critical section

In concurrent programming a critical section is a piece of code that accesses a shared resource that must not be concurrently accessed by more than one thread of execution....
 (the section of a program that requires exclusive access to some variable), and to unlock the data when it is finished. Therefore, to guarantee correct program execution, the above program can be rewritten to use locks:

Thread AThread B
1A: Lock variable V1B: Lock variable V
2A: Read variable V2B: Read variable V
3A: Add 1 to variable V3B: Add 1 to variable V
4A Write back to variable V4B: Write back to variable V
5A: Unlock variable V5B: Unlock variable V


One thread will successfully lock variable V, while the other thread will be locked out
Software lockout

In multiprocessor computer systems, software lockout is the issue of performance degradation due to the idle wait times spent by the CPUs in Kernel -level critical sections....
—unable to proceed until V is unlocked again. This guarantees correct execution of the program. Locks, while necessary to ensure correct program execution, can greatly slow a program.

Locking multiple variables using non-atomic
Atomic operation

An atomic operation in computer science refers to a set of Instruction s that can be combined so that they appear to the rest of the system to be a single operation with only two possible outcomes: success or failure....
 locks introduces the possibility of program deadlock
Deadlock

A deadlock is a situation wherein two or more competing actions are waiting for the other to finish, and thus neither ever does. It is often seen in a paradox like 'the chicken or the egg'....
. An atomic lock locks multiple variables all at once. If it cannot lock all of them, it does not lock any of them. If two threads each need to lock the same two variables using non-atomic locks, it is possible that one thread will lock one of them and the second thread will lock the second variable. In such a case, neither thread can complete, and deadlock results.

Many parallel programs require that their subtasks act in synchrony
Synchronization (computer science)

In computer science, synchronization refers to one of two distinct but related concepts: synchronization of process , and synchronization of data....
. This requires the use of a barrier
Barrier (computer science)

In parallel computing, a barrier is a type of synchronization method. A barrier for a group of threads or processes in the source code means any thread/process must stop at this point and cannot proceed until all other threads/processes reach this barrier....
. Barriers are typically implemented using a software lock. One class of algorithms, known as lock-free and wait-free algorithms, altogether avoids the use of locks and barriers. However, this approach is generally difficult to implement and requires correctly designed data structures.

Not all parallelization results in speed-up. Generally, as a task is split up into more and more threads, those threads spend an ever-increasing portion of their time communicating with each other. Eventually, the overhead from communication dominates the time spent solving the problem, and further parallelization (that is, splitting the workload over even more threads) increases rather than decreases the amount of time required to finish. This is known as parallel slowdown
Parallel slowdown

Parallel slowdown is a phenomenon in parallel computing where parallelization of a parallel algorithm beyond a certain point causes the program to run slower ....
.

Fine-grained, coarse-grained, and embarrassing parallelism

Applications are often classified according to how often their subtasks need to synchronize or communicate with each other. An application exhibits fine-grained parallelism if its subtasks must communicate many times per second; it exhibits coarse-grained parallelism if they do not communicate many times per second, and it is embarrassingly parallel
Embarrassingly parallel

In parallel computing, an embarrassingly parallel workload is one for which little or no effort is required to separate the problem into a number of parallel tasks....
 if they rarely or never have to communicate. Embarrassingly parallel applications are considered the easiest to parallelize.

Consistency models


Leslie Lamport
Parallel programming languages and parallel computers must have a consistency model
Consistency model

In computer science, in a distributed system such as a distributed shared memory system or a distributed data store such as a database, filesystem, web caching or Optimistic_replication systems, there are a number of possible data consistency models....
 (also known as a memory model). The consistency model defines rules for how operations on computer memory occur and how results are produced.

One of the first consistency models was Leslie Lamport
Leslie Lamport

Dr. Leslie Lamport is an United States computer science. A graduate of the Bronx High School of Science, he received a Bachelor's degree in mathematics from the Massachusetts Institute of Technology in 1960, and Master's degree and Doctor of Philosophy degrees in mathematics from Brandeis University, respectively in 1963 and 1972....
's sequential consistency
Sequential consistency

'Sequential consistency' is one of the consistency models used in the domain of the concurrent programming . It was first defined as the property that requires that "......
 model. Sequential consistency is the property of a parallel program that its parallel execution produces the same results as a sequential program. Specifically, a program is sequentially consistent if "... the results of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program".

Software transactional memory
Software transactional memory

In computer science, software transactional memory is a concurrency control mechanism analogous to database transactions for controlling access to shared memory in concurrent computing....
 is a common type of consistency model. Software transactional memory borrows from database theory
Database management system

A database management system is computer software that manages databases. DBMSes may use any of a variety of database models, such as the network model or relational model....
 the concept of atomic transactions and applies them to memory accesses.

Mathematically, these models can be represented in several ways. Petri net
Petri net

A Petri net is one of several mathematical modeling languages for the description of discrete distributed systems. A Petri net is a directed bipartite graph, in which the nodes represent transitions , places , and directed arcs ....
s, which were introduced in Carl Adam Petri's 1962 doctoral thesis, were an early attempt to codify the rules of consistency models. Dataflow theory later built upon these, and Dataflow architecture
Dataflow architecture

Dataflow architecture is a computer architecture that directly contrasts the traditional von Neumann architecture or control flow architecture. Dataflow architectures do not have a program counter or the executability and execution of instructions is solely determined based on the availability of input arguments to the instructions....
s were created to physically implement the ideas of dataflow theory. Beginning in the late 1970s, process calculi such as calculus of communicating systems
Calculus of Communicating Systems

The Calculus of Communicating Systems is a process calculus introduced by Robin Milner around 1980 and the title of a book describing the calculus....
 and communicating sequential processes
Communicating sequential processes

In computer science, Communicating Sequential Processes is a specification language for describing patterns of interaction in concurrent systems....
 were developed to permit algebraic reasoning about systems composed of interacting components. More recent additions to the process calculus family, such as the π-calculus, have added the capability for reasoning about dynamic topologies. Logics such as Lamport's TLA+
Temporal Logic of Actions

Temporal logic of actions is a logic developed by Leslie Lamport, which combines temporal logic with a logic of actions.It is used to describe behaviours of concurrent systems....
, and mathematical models such as traces
Trace theory

In mathematics and computer science, trace theory aims to provide a concrete mathematical underpinning for the study of concurrent computation and process calculi....
 and Actor event diagrams
Actor model theory

In theoretical computer science, Actor model theory concerns theoretical issues for the Actor model.Actors are the primitives that form the basis of the Actor model of concurrent digital computation....
, have also been developed to describe the behavior of concurrent systems.

Flynn's taxonomy


Michael J. Flynn
Michael J. Flynn

Michael J. Flynn is an American professor emeritus at Stanford University. He co-founded Palyn Associates with Maxwell O Paley and is Chairman of Maxeler Technologies....
 created one of the earliest classification systems for parallel (and sequential) computers and programs, now known as Flynn's taxonomy
Flynn's Taxonomy

Flynn's taxonomy is a classification of computer architectures, proposed by Michael J. Flynn in 1966....
. Flynn classified programs and computers by whether they were operating using a single set or multiple sets of instructions, whether or not those instructions were using a single or multiple sets of data.

The single-instruction-single-data (SISD) classification is equivalent to an entirely sequential program. The single-instruction-multiple-data (SIMD) classification is analogous to doing the same operation repeatedly over a large data set. This is commonly done in signal processing
Signal processing

Signal processing is the analysis, interpretation, and manipulation of signal . Signals of interest include: audio signal processing, , time-varying measurement values and sensor data, for example biological data such as electrocardiograms, control system signals, telecommunication transmission signals such as radio signals, and many others....
 applications. Multiple-instruction-single-data (MISD) is a rarely used classification. While computer architectures to deal with this were devised (such as systolic array
Systolic array

In computer architecture, a systolic array is a pipe network arrangement of processing units called cells. It is a specialized form of parallel computing, where cells , compute data and store it independently of each other....
s), few applications that fit this class materialized. Multiple-instruction-multiple-data (MIMD) programs are by far the most common type of parallel programs.

According to David A. Patterson and John L. Hennessy
John L. Hennessy

John LeRoy Hennessy is an United States computer scientist and academic. Hennessy is the founder of MIPS Computer Systems Inc. and is the 10th President of Stanford University....
, "Some machines are hybrids of these categories, of course, but this classic model has survived because it is simple, easy to understand, and gives a good first approximation. It is also—perhaps because of its understandability—the most widely used scheme."

Types of parallelism


Bit-level parallelism

From the advent of very-large-scale integration
Very-large-scale integration

Very-large-scale integration is the process of creating integrated circuits by combining thousands of transistor-based circuits into a single chip....
 (VLSI) computer-chip fabrication technology in the 1970s until about 1986, speed-up in computer architecture was driven by doubling computer word size—the amount of information the processor can execute per cycle. Increasing the word size reduces the number of instructions the processor must execute to perform an operation on variables whose sizes are greater than the length of the word. For example, where an 8-bit
8-bit

Eight-bit CPUs normally use an 8-bit data bus and a 16-bit address bus which means that their address space is limited to 64 KBs. This is not a "natural law", however, so there are exceptions....
 processor must add two 16-bit
16-bit

16-bit architectureThe HP 2100#Descendants and variants , introduced in 1975, was the world's first 16-bit microprocessor.Prominent 16-bit processors include the PDP-11, Intel 8086, Intel 80286 and the WDC 65C816....
 integer
Integer

The integers are natural numbers including 0 and their negative and non-negative numberss . They are numbers that can be written without a fractional or decimal component, and fall within the set ....
s, the processor must first add the 8 lower-order bits from each integer using the standard addition instruction, then add the 8 higher-order bits using an add-with-carry instruction and the carry bit from the lower order addition; thus, an 8-bit processor requires two instructions to complete a single operation, where a 16-bit processor would be able to complete the operation with a single instruction.

Historically, 4-bit
4-bit

The Intel 4004, the world's first commercially available single-integrated circuit microprocessor, was a 4-bit central processing unit. The F-14 Tomcat's Central Air Data Computer was created a year before the 4004, but its existence was Classified information by the United States Navy until 1997....
 microprocessors were replaced with 8-bit, then 16-bit, then 32-bit microprocessors. This trend generally came to an end with the introduction of 32-bit processors, which has been a standard in general-purpose computing for two decades. Not until recently (c. 2003–2004), with the advent of x86-64
X86-64

x86-64 is a superset of the x86. x86-64 Central processing units can run existing 32-bit or 16-bit x86 programs at full speed, but also support new programs written with a 64-bit address space and other additional capabilities....
 architectures, have 64-bit
64-bit

64-bit CPUs have existed in supercomputers since the 1960s and in RISC-based computer workstation and Server s since the early 1990s. In 2003 they were introduced to the mainstream personal computer arena, in the form of the x86-64 and 64-bit PowerPC processor architectures....
 processors become commonplace.

Instruction-level parallelism


Fivestagespipeline
A computer program is, in essence, a stream of instructions executed by a processor. These instructions can be re-ordered
Out-of-order execution

In computer engineering, out-of-order execution, OoOE, is a paradigm used in most high-performance microprocessors to make use of Instruction cycle that would otherwise be wasted by a certain type of costly delay....
 and combined into groups which are then executed in parallel without changing the result of the program. This is known as instruction-level parallelism. Advances in instruction-level parallelism dominated computer architecture from the mid-1980s until the mid-1990s.

Modern processors have multi-stage instruction pipeline
Instruction pipeline

File:5 Stage Pipeline.svgAn instruction pipeline is a technique used in the design of computers and other digital electronic devices to increase their instruction throughput ....
s. Each stage in the pipeline corresponds to a different action the processor performs on that instruction in that stage; a processor with an N-stage pipeline can have up to N different instructions at different stages of completion. The canonical example of a pipelined processor is a RISC processor, with five stages: instruction fetch, decode, execute, memory access, and write back. The Pentium 4
Pentium 4

The Pentium 4 brand refers to Intel's line of single-core mainstream Desktop computer and laptop central processing units introduced on November 20, 2000 ....
 processor had a 35-stage pipeline.

Superscalarpipeline
In addition to instruction-level parallelism from pipelining, some processors can issue more than one instruction at a time. These are known as superscalar
Superscalar

A superscalar Central processing unit architecture implements a form of parallel computer called instruction level parallelism within a single processor....
 processors. Instructions can be grouped together only if there is no data dependency
Data dependency

A data dependency in computer science is a situation in which a program statement refers to the data of a preceding statement. In compiler theory, the technique used to discover data dependencies among statements is called Dependence analysis....
 between them. Scoreboarding
Scoreboarding

Scoreboarding is a centralized method, used in the CDC 6600, for dynamically scheduling a Pipeline so that the instructions can Out-of-order execution when there are no conflicts and the hardware is available....
 and the Tomasulo algorithm
Tomasulo algorithm

The Tomasulo algorithm is a hardware algorithm developed in 1967 by Robert Tomasulo from IBM. It allows sequential instructions that would normally be stalled due to certain dependencies to execute non-sequentially ....
 (which is similar to scoreboarding but makes use of register renaming
Register renaming

In computer engineering, register renaming refers to a technique usedto avoid unnecessary serialization of program operations imposed by the reuse...
) are two of the most common techniques for implementing out-of-order execution and instruction-level parallelism.

Data parallelism


Data parallelism is parallelism inherent in program loops
Control flow

In computer science control flow refers to the order in which the individual statement , Instruction or function calls of an imperative programming or functional programming computer program are execution or evaluated....
, which focuses on distributing the data across different computing nodes to be processed in parallel. "Parallelizing loops often leads to similar (not necessarily identical) operation sequences or functions being performed on elements of a large data structure." Many scientific and engineering applications exhibit data parallelism.

A loop-carried dependency is the dependence of a loop iteration on the output of one or more previous iterations. Loop-carried dependencies prevent the parallelization of loops. For example, consider the following pseudocode
Pseudocode

Pseudocode is a compact and informal high-level description of a computer programming algorithm that uses the structural conventions of some programming language, but is intended for human reading rather than machine reading....
 that computes the first few Fibonacci number
Fibonacci number

In mathematics, the Fibonacci numbers are a sequence of numbers named after Leonardo of Pisa, known as Fibonacci . Fibonacci's 1202 book Liber Abaci introduced the sequence to Western European mathematics, although the sequence had been previously described in Indian mathematics....
s:

1: PREV2 := 0 2: PREV1 := 1 3: CUR := 1 4: do: 5: CUR := PREV1 + PREV2 6: PREV2 := PREV1 7: PREV1 := CUR 8: while (CUR < 10)

This loop cannot be parallelized because CUR depends on itself (PREV1) and PREV2, which are computed in each loop iteration. Since each iteration depends on the result of the previous one, they cannot be performed in parallel. As the size of a problem gets bigger, the amount of data-parallelism available usually does as well.

Task parallelism

Task parallelism is the characteristic of a parallel program that "entirely different calculations can be performed on either the same or different sets of data". This contrasts with data parallelism, where the same calculation is performed on the same or different sets of data. Task parallelism does not usually scale with the size of a problem.

Hardware


Memory and communication

Main memory in a parallel computer is either shared memory
Shared memory

In computing, shared memory is a memory that may be simultaneously accessed by multiple programs with an intent to provide communication among them or avoid redundant copies....
 (shared between all processing elements in a single address space
Address space

In computing, an address space defines a range of discrete addresses, each of which may correspond to a physical or virtual memory register, a Node , peripheral device, disk sector or other logical or physical entity....
), or distributed memory
Distributed memory

In computer science, distributed memory refers to a Multiprocessing in which each central processing unit has its own private Computer memory. Computational tasks can only operate on local data, and if remote data is required, the computational task must communicate with one or more remote processors....
 (in which each processing element has its own local address space). Distributed memory refers to the fact that the memory is logically distributed, but often implies that it is physically distributed as well. Distributed shared memory
Distributed shared memory

Distributed Shared Memory , also known as a distributed global address space , is a term in computer science that refers to a wide class of software and hardware implementations, in which each node of a computer cluster has access to a large shared memory in addition to each node's limited non-shared private memory....
 is a combination of the two approaches, where the processing element has its own local memory and access to the memory on non-local processors. Accesses to local memory are typically faster than accesses to non-local memory.

Computer architectures in which each element of main memory can be accessed with equal latency and bandwidth
Bandwidth (computing)

In computer networking and computer science, digital bandwidth, network bandwidth or just bandwidth is a measure of available or consumed data communication resources expressed in bit/s or multiples of it ....
 are known as Uniform Memory Access
Uniform Memory Access

Uniform Memory Access is a shared memory architecture used in parallel computers.All the processors in the UMA model share the physical memory uniformly....
 (UMA) systems. Typically, that can be achieved only by a shared memory
Shared memory

In computing, shared memory is a memory that may be simultaneously accessed by multiple programs with an intent to provide communication among them or avoid redundant copies....
 system, in which the memory is not physically distributed. A system that does not have this property is known as a Non-Uniform Memory Access
Non-Uniform Memory Access

Non-Uniform Memory Access or Non-Uniform Memory Architecture is a computer storage design used in multiprocessors, where the memory access time depends on the memory location relative to a processor....
 (NUMA) architecture. Distributed memory systems have non-uniform memory access.

Computer systems make use of cache
Cache

In computer science, a cache is a collection of data duplicating original values stored elsewhere or computed earlier, where the original data is expensive to fetch or to compute, compared to the cost of reading the cache....
s—small, fast memories located close to the processor which store temporary copies of memory values (nearby in both the physical and logical sense). Parallel computer systems have difficulties with caches that may store the same value in more than one location, with the possibility of incorrect program execution. These computers require a cache coherency
Cache coherency

In computing, cache coherence refers to the integrity of data stored in local caches of a shared resource. Cache coherence is a special case of memory coherence....
 system, which keeps track of cached values and strategically purges them, thus ensuring correct program execution. Bus snooping
Bus sniffing

Bus sniffing or Bus snooping is a technique used in distributed shared memory systems and multiprocessors aimed at achieving cache coherence....
 is one of the most common methods for keeping track of which values are being accessed (and thus should be purged). Designing large, high-performance cache coherence systems is a very difficult problem in computer architecture. As a result, shared-memory computer architectures do not scale as well as distributed memory systems do.

Processor–processor and processor–memory communication can be implemented in hardware in several ways, including via shared (either multiported or multiplexed
Multiplexing

In telecommunications and computer networks, multiplexing is a process where multiple analog message signals or digital data streams are combined into one signal over a shared medium....
) memory, a crossbar switch
Crossbar switch

A crossbar switch is a switch connecting multiple inputs to multiple outputs in a matrix manner.Originally the term was used literally, for a matrix switch controlled by a grid of crossing metal bars, and later was broadened to matrix switches in general....
, a shared bus or an interconnect network of a myriad of topologies
Network topology

Network topology is the study of the arrangement or mapping of the elements of a Computer networking, especially the physical and logical interconnections between nodes....
 including star
Star network

Star networks are one of the most common computer network Network topology. In its simplest form, a star network consists of one central Network switch, Network hub or computer, which acts as a conduit to transmit messages....
, ring
Ring network

A ring network is a network topology in which each node connects to exactly two other nodes, forming a single continuous pathway for signals through each node - a ring....
, tree
Tree (graph theory)

In mathematics, more specifically graph theory, a tree is a graph in which any two Vertex are connected by exactly one path . Alternatively, any connectedness graph with no Cycle is a tree....
, hypercube
Hypercube graph

In the mathematics field of graph theory, the hypercube graph Qn is a regular graph with 2n vertex , which correspond to the subsets of a Set with n elements....
, fat hypercube (a hypercube with more than one processor at a node), or n-dimensional mesh
Mesh networking

Mesh networking is a way to route data, voice and instructions between node . It allows for continuous connections and reconfiguration around broken or blocked paths by ?hopping? from node to node until the destination is reached....
.

Parallel computers based on interconnect networks need to have some kind of routing
Routing

Routing is the process of selecting paths in a network along which to send network traffic. Routing is performed for many kinds of networks, including the PSTN, Computer network , and transport network....
 to enable the passing of messages between nodes that are not directly connected. The medium used for communication between the processors is likely to be hierarchical in large multiprocessor machines.

Classes of parallel computers

Parallel computers can be roughly classified according to the level at which the hardware supports parallelism. This classification is broadly analogous to the distance between basic computing nodes. These are not mutually exclusive; for example, clusters of symmetric multiprocessors are relatively common.

Multicore computing
A multicore processor is a processor that includes multiple execution unit
Execution unit

In computer engineering, an execution unit is a part of a central processing unit that performs the operations and calculations called for by the computer program....
s ("cores"). These processors differ from superscalar processors, which can issue multiple instructions per cycle from one instruction stream (thread); by contrast, a multicore processor can issue multiple instructions per cycle from multiple instruction streams. Each core in a multicore processor can potentially be superscalar as well—that is, on every cycle, each core can issue multiple instructions from one instruction stream.

Simultaneous multithreading
Simultaneous multithreading

Simultaneous multithreading, often abbreviated as SMT, is a technique for improving the overall efficiency of superscalar Central processing unit with Multithreading ....
 (of which Intel's HyperThreading is the best known) was an early form of pseudo-multicoreism. A processor capable of simultaneous multithreading has only one execution unit ("core"), but when that execution unit is idling (such as during a cache miss), it uses that execution unit to process a second thread. Intel's Core
Intel Core

The Core brand refers to Intel's 32-bit mobile dual-core x86 CPUs that derived from the Pentium M branded processors. The processor family used a more advanced version of the Intel P6 microarchitecture....
 and Core 2
Intel Core 2

The Core 2 brand refers to a range of Intel's consumer 64-bit single- and dual-core and 2x2 Multi-Chip Module quad-core CPUs with the x86-64 instruction set, based on the Intel Core microarchitecture, derived from the 32-bit dual-core Intel Core laptop processor....
 processor families are Intel's first true multicore architectures. IBM
IBM

International Business Machines Corporation, abbreviated IBM and nicknamed "Big Blue" , is a multinational corporation computer technology and consulting corporation headquartered in Armonk, New York, New York, United States....
's Cell microprocessor, designed for use in the Sony
Sony

is a multinational corporation list of conglomerates corporation headquartered in Minato, Tokyo, Japan, and one of the world's largest media conglomerates with revenue exceeding US$99.1 billion ....
 Playstation 3
PlayStation 3

The PlayStation 3 is the third home video game console produced by Sony Computer Entertainment, and the successor to the PlayStation 2 as part of the PlayStation ....
, is another prominent multicore processor.

Symmetric multiprocessing
A symmetric multiprocessor (SMP) is a computer system with multiple identical processors that share memory and connect via a bus. Bus contention
Bus contention

Bus contention, in computer design, is an undesirable state of the computer bus in which more than one device on the bus attempts to place values on the bus at the same time....
 prevents bus architectures from scaling. As a result, SMPs generally do not comprise more than 32 processors. "Because of the small size of the processors and the significant reduction in the requirements for bus bandwidth achieved by large caches, such symmetric multiprocessors are extremely cost-effective, provided that a sufficient amount of memory bandwidth exists."

Distributed computing
A distributed computer (also known as a distributed memory multiprocessor) is a distributed memory computer system in which the processing elements are connected by a network. Distributed computers are highly scalable.

Cluster computing
Beowulf
A cluster is a group of loosely coupled computers that work together closely, so that in some respects they can be regarded as a single computer. Clusters are composed of multiple standalone machines connected by a network. While machines in a cluster do not have to be symmetric, load balancing
Load balancing (computing)

In computer networking, load balancing is a technique to spread work between two or more computers, network links, CPUs, hard drives, or other resources, in order to get optimal resource utilization, maximize throughput, and minimize response time....
 is more difficult if they are not. The most common type of cluster is the Beowulf cluster
Beowulf (computing)

Originally referring to a specific computer built in 1994, Beowulf is a class of computer clusters similar to the original NASA system. They are high-performance parallel computing clusters of inexpensive personal computer hardware....
, which is a cluster implemented on multiple identical commercial off-the-shelf
Commercial off-the-shelf

Commercial, off-the-shelf is a term for Computer software or hardware, generally technology or computer products, that are ready-made and available for sale, lease, or license to the general public....
 computers connected with a TCP/IP Ethernet
Ethernet

Ethernet is a family of Data frame-based computer networking technologies for local area networks . The name comes from the physical concept of the Luminiferous aether....
 local area network
Local area network

A local area network is a computer network covering a small physical area, like a home, office, or small group of buildings, such as a school, or an airport....
. Beowulf technology was originally developed by Thomas Sterling
Thomas Sterling (computing)

Dr. Thomas Sterling is currently a Professor of Computer Science at Louisiana State University, a Faculty Associate at Caltech, and a Distinguished Visiting Scientist at Oak Ridge National Laboratory....
 and Donald Becker
Donald Becker

Donald Becker is a notable programmer well known for writing many of the Ethernet drivers for the Linux operating system. Thousands of computers around the world routinely use his drivers to connect to the Internet....
. The vast majority of the TOP500
TOP500

The TOP500 project ranks and details the 500 most powerful known computer systems in the world. The project was started in 1993 and publishes an updated list of the supercomputers twice a year....
 supercomputers are clusters.

Massive parallel processing

A massively parallel processor (MPP) is a single computer with many networked processors. MPPs have many of the same characteristics as clusters, but MPPs have specialized interconnect networks (whereas clusters use commodity hardware for networking). MPPs also tend to be larger than clusters, typically having "far more" than 100 processors. In an MPP, "each CPU contains its own memory and copy of the operating system and application. Each subsystem communicates with the others via a high-speed interconnect."

Blue Gene/L, the fourth fastest supercomputer in the world according to the November 2008 TOP500 ranking, is an MPP.

Grid computing
Grid computing is the most distributed form of parallel computing. It makes use of computers communicating over the Internet
Internet

The Internet is a global network of interconnected computers, enabling users to share information along multiple channels. Typically, a computer that connects to the Internet can access information from a vast array of available server and other computers by moving information from them to the computer's local memory....
 to work on a given problem. Because of the low bandwidth and extremely high latency available on the Internet, grid computing typically deals only with embarrassingly parallel problems. Many grid computing applications
List of distributed computing projects

A list of distributed computing projects....
 have been created, of which SETI@home
SETI@home

SETI@home is a distributed computing project using Internet-connected computers, hosted by the Space Sciences Laboratory, at the University of California, Berkeley, in the United States....
 and Folding@Home
Folding@home

Folding@home is a distributed computing project designed to perform computationally intensive simulations of protein folding and other molecular dynamics ....
 are the best-known examples.

Most grid computing applications use middleware
Middleware

Middleware is computer software that connects software components or applications. The software consists of a set of enabling services that allow multiple processes running on one or more machines to interact across a network....
, software that sits between the operating system and the application to manage network resources and standardize the software interface. The most common grid computing middleware is the Berkeley Open Infrastructure for Network Computing
Berkeley Open Infrastructure for Network Computing

The Berkeley Open Infrastructure for Network Computing is a non-commercial middleware system for volunteer computing and grid computing. It was originally developed to support the SETI@home project before it became useful as a platform for other Distributed computing in areas as diverse as mathematics, medicine, molecular biology, climatolog...
 (BOINC). Often, grid computing software makes use of "spare cycles", performing computations at times when a computer is idling.

Specialized parallel computers
Within parallel computing, there are specialized parallel devices that remain niche areas of interest. While not domain-specific
Domain-specific programming language

In software development, a domain-specific language is a programming language or specification language dedicated to a particular problem domain, a particular problem representation technique, and/or a particular solution technique....
, they tend to be applicable to only a few classes of parallel problems.

Reconfigurable computing with field-programmable gate arrays Reconfigurable computing
Reconfigurable computing

Reconfigurable computing is a computing paradigm combining some of the flexibility of software with the high performance of hardware by processing with very flexible high speed computing fabrics like FPGAs....
 is the use of a field-programmable gate array
Field-programmable gate array

A field-programmable gate array is a semiconductor device that can be configured by the customer or designer after manufacturing—hence the name "field-programmable"....
 (FPGA) as a co-processor to a general-purpose computer. An FPGA is, in essence, a computer chip that can rewire itself for a given task.

FPGAs can be programmed with hardware description language
Hardware description language

In electronics, a hardware description language or HDL is any language from a class of computer languages and/or programming languages for formal description of digital logic and electronic circuits....
s such as VHDL or Verilog
Verilog

In the semiconductor and electronic design industry, Verilog is a hardware description language used to model Electronics#Electronic systems. Verilog HDL, not to be confused with VHDL, is most commonly used in the design, verification, and implementation of Digital circuit logic chips at the Register transfer level level of Abstraction...
. However, programming in these languages can be tedious. Several vendors have created C to HDL
C to HDL

C to HDL tools convert C or C-like source code into a hardware description language such as VHDL or Verilog. The converted code can then be synthesized and translated into a hardware device such as a field-programmable gate array....
 languages that attempt to emulate the syntax and/or semantics of the C programming language, with which most programmers are familiar. The best known C to HDL languages are Mitrion-C, Impulse C
Impulse C

Impulse C is a subset of the C programming language combined with a C-compatible function library supporting parallel programming, in particular for programming of applications targeting Field Programmable Gate Array devices....
, DIME-C
DIME-C

DIME-C is a C to HDL tool developed by Nallatech it is part of their DIMEtalk Design Tools suite. It includes an editor, a compiler and a parallelization visualizer....
, and Handel-C
Handel-C

Handel-C is a Programming Language and Hardware Description Language for compiling programs into hardware images of FPGAs or Application-specific integrated circuits....
.

AMD's decision to open its HyperTransport
HyperTransport

HyperTransport , formerly known as Lightning Data Transport , is a bidirectional serial/parallel high-bandwidth, Memory latency Point-to-point that was introduced on April 2 2001....
 technology to third-party vendors has become the enabling technology for high-performance reconfigurable computing. According to Michael R. D'Amour, Chief Operating Officer of DRC Computer Corporation, "when we first walked into AMD, they called us 'the socket
CPU socket

A CPU socket or CPU slot is a connector on a computer's motherboard that accepts a central processing unit and forms an electrical interface with it....
 stealers.' Now they call us their partners."

GPGPU with graphics processing units

General-purpose computing on graphics processing unit
Graphics processing unit

A graphics processing unit or GPU is a dedicated graphics rendering device for a personal computer, workstation, or game console. Modern GPUs are very efficient at manipulating and displaying computer graphics, and their highly parallel structure makes them more effective than general-purpose Central processing unit for a range of com...
s (GPGPU) is a fairly recent trend in computer engineering research. GPUs are co-processors that have been heavily optimized for computer graphics
Computer graphics

Computer graphics are graphics created by computers and, more generally, the representation and manipulation of pictorial data by a computer....
 processing. Computer graphics processing is a field dominated by data parallel operations—particularly linear algebra
Linear algebra

Linear algebra is the branch of mathematics concerned with the study of Euclidean vectors, vector spaces , linear maps , and system of linear equations....
 matrix
Matrix (mathematics)

In mathematics, a matrix is a rectangular array of numbers, as shown at the right. In addition to a number of elementary, entrywise operations such as matrix addition a key notion is matrix multiplication....
 operations.

In the early days, GPGPU programs used the normal graphics APIs for executing programs. However, recently several new programming languages and platforms have been built to do general purpose computation on GPUs with both Nvidia
NVIDIA

Nvidia is a multinational corporation specializing in the manufacture of graphics processing unit technologies for workstations, desktop computers, and mobile devices....
 and AMD releasing programming environments with CUDA
Cuda

Cuda may refer to:* Plymouth Barracuda, a Chrysler automobile* CUDA, a computer processing technology* Cuda, a czechlosovakian last name...
 and CTM
Close to Metal

Close To Metal is the name of a beta version of a low-level programming interface developed by ATI Technologies , aimed at enabling GPGPU computing....
 respectively. Other GPU programming languages are BrookGPU
BrookGPU

BrookGPU is the Stanford University Graphics group's compiler and runtime implementation of the Brook Stream processing language for using modern graphics hardware for non-graphical, or GPGPU....
, PeakStream
PeakStream

PeakStream is a parallel processing software company located in San Mateo, California company founded by Matthew Papakipos and Asher Waldfogel in April 2005 and backed by Sequoia Capital and Kleiner Perkins....
, and RapidMind
RapidMind

RapidMind Inc. is a privately held company founded and headquartered in Waterloo, Ontario, Canada. It provides a software product that aims to make it simpler for software developers to target Multi-core processors and accelerators such as Graphics processing unit....
. Nvidia has also released specific products for computation in their Tesla series
Nvidia Tesla

The Tesla Graphics processing unit is NVIDIA third brand of GPUs. It's based on high-end GPUs from the GeForce 8 Series and on, as well as the NVIDIA Quadro lineup....
.

Application-specific integrated circuits Several Application-specific integrated circuit
Application-specific integrated circuit

An application-specific integrated circuit is an integrated circuit customized for a particular use, rather than intended for general-purpose use....
 (ASIC) approaches have been devised for dealing with parallel applications.

Because an ASIC is (by definition) specific to a given application, it can be fully optimized for that application. As a result, for a given application, an ASIC tends to outperform a general-purpose computer. However, ASICs are created by X-ray lithography
X-ray lithography

X-ray lithography is a next generation lithography that has been developed for the semiconductor industry. Batches of microprocessors have already been produced....
. This process requires a mask, which can be extremely expensive. A single mask can cost over a million US dollars. (The smaller the transistors required for the chip, the more expensive the mask will be.) Meanwhile, performance increases in general-purpose computing over time (as described by Moore's Law) tend to wipe out these gains in only one or two chip generations. High initial cost, and the tendency to be overtaken by Moore's-law-driven general-purpose computing, has rendered ASICs unfeasible for most parallel computing applications. However, some have been built. One example is the peta-flop RIKEN MDGRAPE-3
RIKEN MDGRAPE-3

MDGRAPE-3 is an ultra-high performance petascale supercomputer system developed by the RIKEN research institute in Japan. It is a special purpose system built for molecular dynamics simulations, especially protein structure prediction....
 machine which uses custom ASICs for molecular dynamics
Molecular dynamics

Molecular dynamics is a form of computer simulation in which atoms and molecules are allowed to interact for a period of time by approximations of known physics,...
 simulation.

Vector processors
Cray 1 P1010221
A vector processor is a CPU or computer system that can execute the same instruction on large sets of data. "Vector processors have high-level operations that work on linear arrays of numbers or vectors. An example vector operation is A = B × C, where A, B, and C are each 64-element vectors of 64-bit floating-point
Floating point

In computing, floating point describes a system for numerical representation in which a String of digits represents a rational number.The term floating point refers to the fact that the radix point can "float": that is, it can be placed anywhere relative to the Significant figures of the number....
 numbers." They are closely related to Flynn's SIMD classification.

Cray
Cray

Cray Inc. is a supercomputer manufacturer based in Seattle, Washington. The company's predecessor, Cray Research, Inc. , was founded in 1972 by computer designer Seymour Cray....
 computers became famous for their vector-processing computers in the 1970s and 1980s. However, vector processors—both as CPUs and as full computer systems—have generally disappeared. Modern processor instruction sets
Instruction set

An instruction set is a list of all the instruction , and all their variations, that a processor can execute.Instructions include:* Arithmetic such as add and subtract...
 do include some vector processing instructions, such as with AltiVec
AltiVec

AltiVec is a floating point and integer SIMD instruction set designed and owned by Apple Inc., International Business Machines and Freescale Semiconductor, formerly the Semiconductor Products Sector of Motorola, , and implemented on versions of the PowerPC including Motorola's PowerPC G4, IBM's PowerPC 970 and POWER6 processors, and P.A....
 and Streaming SIMD Extensions
Streaming SIMD Extensions

In computing, Streaming SIMD Extensions is a SIMD instruction set extension to the x86 architecture, designed by Intel and introduced in 1999 in their Pentium III series processors as a reply to AMD's 3DNow! ....
 (SSE).

Software


Parallel programming languages

Concurrent programming languages, libraries, APIs
Application programming interface

An application programming interface is a set of subroutine, data structures, class and/or Protocol provided by library and/or operating system Service s in order to support the building of applications....
, and parallel programming model
Parallel programming model

A parallel programming model is a set of software technologies to express parallel algorithms and match applications with the underlying parallel systems....
s have been created for programming parallel computers. These can generally be divided into classes based on the assumptions they make about the underlying memory architecture—shared memory, distributed memory, or shared distributed memory. Shared memory programming languages communicate by manipulating shared memory variables. Distributed memory uses message passing
Message passing

Message passing in computer science, is a form of communication used in parallel computing, object-oriented programming, and interprocess communication....
. POSIX Threads
POSIX Threads

POSIX Threads, or Pthreads, is a POSIX standard for thread s. The standard defines an Application programming interface for creating and manipulating threads....
 and OpenMP
OpenMP

The OpenMP is an application programming interface that supports multi-platform shared memory multiprocessing programming in C , C++ and Fortran on many architectures, including Unix and Microsoft Windows platforms....
 are two of most widely used shared memory APIs, whereas Message Passing Interface
Message Passing Interface

Message Passing Interface is a specification for an API that allows many computers to communicate with one another. It is used in computer clusters and supercomputers....
 (MPI) is the most widely used message-passing system API. One concept used in programming parallel programs is the future concept, where one part of a program promises to deliver a required datum to another part of a program at some future time.

Automatic parallelization

Automatic parallelization of a sequential program by a compiler
Compiler

A compiler is a computer program that transforms source code written in a programming language into another computer language . The most common reason for wanting to transform source code is to create an executable program....
 is the holy grail
Holy Grail

According to Christian mythology, the Holy Grail was the dish, plate, or cup used by Jesus at the Last Supper, said to possess miraculous powers....
 of parallel computing. Despite decades of work by compiler researchers, automatic parallelization has had only limited success.

Mainstream parallel programming languages remain either explicitly parallel
Explicit parallelism

In computer programming, explicit parallelism is the representationof concurrent computations by means of primitivesin the form of special-purpose directives or function calls....
 or (at best) partially implicit
Implicit parallelism

In computer science, implicit parallelism is a characteristic of a programming language that allows a compiler or interpreter to automatically exploit the parallel computing inherent to the computations expressed by some of the language's constructs....
, in which a programmer gives the compiler directives
Directive (programming)

In computer programming, the term directive is applied in a variety of ways that are similar to the term command, it is also used to describe some programming language constructs ....
 for parallelization. A few fully implicit parallel programming languages exist—SISAL
SISAL

SISAL is a general-purpose single assignment functional programming language programming language with strict semantics, implicit parallelism, and efficient array handling....
, Parallel Haskell
Haskell (programming language)

Haskell is a standardized, purely functional programming language with non-strict programming language, named after logician Haskell Curry. The goals of the language are described as:...
, and (for FPGAs) Mitrion-C.

Application checkpointing

The larger and more complex a computer, the more that can go wrong and the shorter the mean time between failures. Application checkpointing
Application checkpointing

Checkpointing is a technique for inserting fault tolerance into computing systems. It basically consists on storing a snapshot of the current Application software state, and use it for restarting the execution in case of failure....
 is a technique whereby the computer system takes a "snapshot" of the application—a record of all current resource allocations and variable states, akin to a core dump
Core dump

In computing, a core dump consists of the recorded state of the working Computer storage of a computer program at a specific time, generally when the program has terminated abnormally ....
; this information can be used to restore the program if the computer should fail. Application checkpointing means that the program has to restart from only its last checkpoint rather than the beginning. For an application that may run for months, that is critical. Application checkpointing may be used to facilitate process migration
Process migration

Process migration is when process es in computer clusters are able to move from machine to machine. Process migration is implemented in, among others, OpenMosix....
.

Applications

As parallel computers become larger and faster, it becomes feasible to solve problems that previously took too long to run. Parallel computing is used in a wide range of fields, from bioinformatics
Bioinformatics

Bioinformatics is the application of information technology to the field of molecular biology. The term bioinformatics was coined by Paulien Hogeweg in 1978 for the study of informatic processes in biotic systems....
 (to do protein folding
Protein folding

Protein folding is the physical process by which a polypeptide folds into its characteristic and functional protein structure.Each protein begins as a polypeptide, translated from a sequence of mRNA as a linear chain of amino acids....
) to economics (to do simulation in mathematical finance
Mathematical finance

Mathematical finance is the branch of applied mathematics concerned with the financial markets.The subject has a close relationship with the discipline of financial economics, which is concerned with much of the underlying theory....
). Common types of problems found in parallel computing applications are:

  • Dense linear algebra
    Linear algebra

    Linear algebra is the branch of mathematics concerned with the study of Euclidean vectors, vector spaces , linear maps , and system of linear equations....
  • Sparse linear algebra
  • Spectral methods (such as Cooley-Tukey Fast Fourier transform
    Cooley-Tukey FFT algorithm

    The Cooley-Tukey algorithm, named after James Cooley and John Tukey, is the most common fast Fourier transform algorithm. It re-expresses the discrete Fourier transform of an arbitrary composite number size N = N1N2 in terms of smaller DFTs of sizes N1 and N2, recursion, in or...
    )
  • N-body problems
    N-body simulation

    An N-body simulation is a simulation of massive particles under the influence of physical forces, usually gravity and sometimes other forces....
     (such as Barnes-Hut simulation
    Barnes-Hut simulation

    The Barnes-Hut simulation is an algorithm for performing an N-body simulation. It is notable for having Big O notation O compared to a direct-sum algorithm which would be O....
    )
  • Structured grid
    Regular grid

    A regular grid is a tessellation of the Euclidean plane by congruent rectangles or a Honeycomb of rectilinear parallelepipeds . Grids of this type appear on graph paper and may be used in finite element analysis as well as finite volume methods and finite difference methods....
     problems (such as Lattice Boltzmann methods
    Lattice Boltzmann methods

    Lattice Boltzmann methods is a class of computational fluid dynamics methods for fluid simulation. Instead of solving the Navier?Stokes equations, the discrete Boltzmann equation is solved to simulate the flow of a Newtonian fluid with collision models such as Bhatnagar-Gross-Krook ....
    ),
  • Unstructured grid
    Unstructured grid

    An unstructured grid is a tessellation of a part of the Euclidean plane or Euclidean space by simple shapes, such as triangles or tetrahedron, in an irregular pattern....
     problems (such as found in finite element analysis)
  • Monte Carlo simulation
    Monte Carlo method

    Monte Carlo methods are a class of computational algorithms that rely on repeated random sampling to compute their results. Monte Carlo methods are often used when computer simulation physics and mathematics systems....
  • Combinational logic
    Combinational logic

    In digital circuit theory, combinational logic is a type of logic circuit whose output is a pure function of the present input only. This is in contrast to sequential logic, in which the output depends not only on the present input but also on the history of the input....
     (such as brute-force cryptographic techniques
    Brute force attack

    In cryptanalysis, a brute force attack is a method of defeating a cryptographic scheme by systematically trying a large number of possibilities; for example, a large number of the possible key s in a key space in order to decrypt a message....
    )
  • Graph traversal
    Graph traversal

    Graph traversal refers to the problem of visiting all the nodes in a graph in a particular manner. Tree traversal is a special case of graph traversal....
     (such as Sorting algorithm
    Sorting algorithm

    In computer science and mathematics, a sorting algorithm is an algorithm that puts elements of a List in a certain Total order. The most-used orders are numerical order and lexicographical order....
    s)
  • Dynamic programming
    Dynamic programming

    In mathematics and computer science, dynamic programming is a method of solving problems that exhibit the properties of overlapping subproblems and optimal substructure ....
  • Branch and bound
    Branch and bound

    Branch and bound is a general algorithm for finding optimal solutions of various optimization problems, especially in discrete optimization and combinatorial optimization....
     methods
  • Graphical model
    Graphical model

    In probability theory, statistics, and machine learning, a graphical model is a graph that represents statistical independence among random variables....
    s (such as detecting Hidden Markov model
    Hidden Markov model

    A hidden Markov model is a statistical model in which the system being modeled is assumed to be a Markov process with unknown parameters; the challenge is to determine the hidden parameters from the observable data....
    s and constructing Bayesian network
    Bayesian network

    A Bayesian network is a probabilistic graphical model that represents a set of variables and their probabilistic independencies. For example, a Bayesian network could represent the probabilistic relationships between diseases and symptoms....
    s)
  • Finite State Machine
    Finite state machine

    A finite state machine or finite state automaton or simply a state machine, is a model of behavior composed of a finite number of state s, transitions between those states, and actions....
     simulation


History


Illiac 4 Parallel Computer
The origins of true (MIMD) parallelism go back to Federico Luigi, Conte Menabrea
Federico Luigi, Conte Menabrea

Federico Luigi, Conte Menabrea, Marquis of Valdora was an Italy general and statesman....
 and his "Sketch of the Analytic Engine Invented by Charles Babbage
Charles Babbage

Charles Babbage, Royal Society was an England mathematician, philosopher, inventor and mechanical engineer who originated the concept of a programmable computer....
". IBM
IBM

International Business Machines Corporation, abbreviated IBM and nicknamed "Big Blue" , is a multinational corporation computer technology and consulting corporation headquartered in Armonk, New York, New York, United States....
 introduced the 704
IBM 704

The IBM 704, the first mass-produced computer with floating point arithmetic hardware, was introduced by IBM in April, 1954. The 704 was significantly improved over the IBM 701 in terms of architecture as well as implementation, and was not compatible with its predecessor....
 in 1954, through a project in which Gene Amdahl
Gene Amdahl

Gene Myron Amdahl is a Norwegian American computer architect and hi-tech entrepreneur, chiefly known for his work on mainframe computers at International Business Machines and later his own companies, especially Amdahl Corporation....
 was one of the principal architects. It became the first commercially available computer to use fully automatic floating point
Floating point

In computing, floating point describes a system for numerical representation in which a String of digits represents a rational number.The term floating point refers to the fact that the radix point can "float": that is, it can be placed anywhere relative to the Significant figures of the number....
 arithmetic commands.

In April 1958, S. Gill (Ferranti) discussed parallel programming and the need for branching and waiting. Also in 1958, IBM researchers John Cocke
John Cocke

John Cocke was an American computer scientist recognised for his large contribution to computer architecture and optimizing compiler design. He is considered by many to be "the father of RISC architecture."...
 and Daniel Slotnick discussed the use of parallelism in numerical calculations for the first time. Burroughs Corporation introduced the D825 in 1962, a four-processor computer that accessed up to 16 memory modules through a crossbar switch
Crossbar switch

A crossbar switch is a switch connecting multiple inputs to multiple outputs in a matrix manner.Originally the term was used literally, for a matrix switch controlled by a grid of crossing metal bars, and later was broadened to matrix switches in general....
. In 1967, Amdahl and Slotnick published a debate about the feasibility of parallel processing at American Federation of Information Processing Societies Conference. It was during this debate that Amdahl's Law was coined to define the limit of speed-up due to parallelism.

In 1969, US company Honeywell
Honeywell

Honeywell is a major United States multinational corporation list of conglomerates company that produces a variety of consumer products, engineering services, and aerospace systems for a wide variety of customers, from private consumers to major corporations and governments....
 introduced its first Multics system, a symmetric multiprocessor system capable of running up to eight processors in parallel. C.mmp
C.mmp

The C.mmp was an early MIMD multiprocessor system developed at Carnegie Mellon University by William Wulf .Sixteen PDP-11 minicomputers were used as the processing elements ....
, a 1970s multi-processor project at Carnegie Mellon University
Carnegie Mellon University

Carnegie Mellon University is a top private university research university in Pittsburgh. Since its inception, Carnegie Mellon has grown into a world-renowned institution, with numerous programs that are frequently college and university rankings among the best in the world....
, was "among the first multiprocessors with more than a few processors". "The first bus-connected multi-processor with snooping caches was the Synapse N+1 in 1984."

SIMD parallel computers can be traced back to the 1970s. The motivation behind early SIMD computers was to amortize the gate delay
Propagation delay

NetworkingPropagation delay is defined as the amount of time it takes for a certain number of bytes to be transferred over a medium. Propagation delay is the distance between the two routers divided by the propagation speed....
 of the processor's control unit
Control unit

A control unit in general is a central part of whatsoever machinery that controls its operation, provided that a piece of machinery is complex and organized enough to contain any such unit....
 over multiple instructions. In 1964, Slotnick had proposed building a massively parallel computer for the Lawrence Livermore National Laboratory
Lawrence Livermore National Laboratory

The Lawrence Livermore National Laboratory in Livermore, California is a scientific research laboratory founded by the University of California in 1952....
. His design was funded by the US Air Force, which was the earliest SIMD parallel-computing effort, ILLIAC IV
ILLIAC IV

The ILLIAC IV was one of the most infamous supercomputers ever. Last in a series of research machines, the ILLIAC from the University of Illinois at Urbana-Champaign, the ILLIAC IV design featured fairly high parallel computing with up to 256 processors, used to allow the machine to work on large data sets in what would later be known as vect...
. The key to its design was a fairly high parallelism, with up to 256 processors, which allowed the machine to work on large datasets in what would later be known as vector processing
Vector processor

A vector processor, or array processor, is a Central processing unit design where the instruction set includes operations that can perform mathematical operations on multiple data elements simultaneously....
. However, ILLIAC IV was called "the most infamous of Supercomputers", because the project was only one fourth completed, but took 11 years and cost almost four times the original estimate. When it was finally ready to run its first real application in 1976, it was outperformed by existing commercial supercomputers such as the Cray-1
Cray-1

The Cray-1 was a supercomputer designed by a team including Seymour Cray for Cray Research. The first Cray-1 system was installed at Los Alamos National Laboratory in 1976, and it went on to become one of the best known and most successful supercomputers in history....
.

External links