Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
compare webbrowser
Freenet DSL
Who's Online
8 user(s) are online (7 user(s) are browsing encyclopedia)

Members: 0
Guests: 8

more...
browser tip
Unix Befehle
manual of unix befehle
recommendation!
Sponsored
partner

Parallel computing

Parallel computing is the simultaneous execution of the same task (split up and specially adapted) on multiple processors in order to obtain faster results.

=Parallel computing systems=

The term parallel processor is sometimes used for a computer with more than one processor, available for parallel processing. Systems with thousands of such processors are known as massively parallel.

There are many different kinds of parallel computers (or parallel processors ). They are distinguished by the kind of interconnection between processors (known as processing elements or PEs) and between processors and memories. Flynn s taxonomy also classifies parallel (and serial) computers according to whether all processors execute the same instructions at the same time (single instruction/multiple data -- SIMD) or each processor executes different instructions (multiple instruction/multiple data -- MIMD). Parallel processor machines are also divided into symmetric and asymmetric multiprocessors, depending on whether all the processors are capable of running all the operating system code and, say, accessing I/O devices or if some processors are more or less privileged.

=Performance vs. cost=

While a system of n parallel processors is less efficient than one n -times-faster processor, the parallel system is often cheaper to build. For tasks which require very large amounts of computation, have time constraints on completion and especially for those which can be divided into n execution threads, parallel computation is an excellent solution. In fact, in recent years, most supercomputer systems, also known as supercomputers, have a parallel architecture

=Algorithms=

It should not be imagined that successful parallel computing is a matter of obtaining the required hardware and connecting it suitably. The difficulty of cooperative problem solving is aptly demonstrated by the following dubious reasoning:

:If it takes one man one minute to dig a post-hole then sixty men can dig it in one second.

In practice, linear speedup (i.e., speedup proportional to the number of processors) is very difficult to achieve. This is because many algorithms are essentially sequential in nature (Amdahl s law states this more formally).

Up to a certain point, certain workloads can benefit from Pipeline (software) when extra processors are added. This uses a factory assembly line approach to divide the work. If the work can be divided into n stages where a discrete deliverable is passed from stage to stage, then up to n processors can be used. However, the slowest stage will hold up the other stages so it is rare to be able to fully use n processors.

Most algorithms must be redesigned in order to make effective use of parallel hardware. Programs which work correctly in a single CPU system may not do so in a parallel environment. This is because multiple copies of the same program may interfere with each other, for instance by accessing the same computer memory location at the same time. Therefore, careful programming is required in a parallel system.

Superlinear speedup - the effect of a N processor machine completing a task more than N times faster than a machine with a single processor similar to that in the multiprocessor has at times been a controversial issue (and lead to much benchmarking) but can be brought about by such effects as the multiprocessor machine having not just N times the processing power but also N times cache and memory thus flattening the cache-memory-disk hierarchy, more efficient use of memory by the individual processors due to partitioning of the problem and a number of other effects. Similar boosted efficiency claims are sometimes aired for the use of a cluster of cheap computers as a replacement of a large multiprocessor, but again the actual results depend much on the problem at hand and the ability to partition the problem in a way that is conductive to clustering.

=Inter-thread communication=

Parallel computers are theoretically modeled as Parallel Random Access Machines (PRAMs). The PRAM model ignores the cost of interconnection between the constituent computing units, but is nevertheless very useful in providing upper bounds on the parallel solvability of many problems. In reality the interconnection plays a significant role.

The processors may either communicate in order to be able to cooperate in solving a problem or they may run completely independently, possibly under the control of another processor which distributes work to the others and collects results from them (a processor farm ).

Processors in a parallel computer may communicate with each other in a number of ways, including shared (either multiported or multiplexed) memory, a crossbar, a shared bus or an interconnect network of a myriad of network topology including star, ring, tree, hypercube, fat hypercube (an hypercube with more than one processor at a node), a n-dimensional mesh, etc. Parallel computers based on interconnect network need to employ some kind of Routing to enable passing of messages between nodes that are not directly connected. The communication medium used for communication between the processors is likely to be hierarchical in large multiprocessor machines. Similarly, memory may be either private to the processor, shared between a number of processors, or globally shared. Systolic array is an example of a multiprocessor with fixed function nodes, local-only memory and no message routing.

Approaches to parallel computers include:

  • Multiprocessing
  • Computer cluster
  • Parallel supercomputers
  • Distributed computing
  • Non-Uniform Memory Access vs. Symmetric multiprocessing vs. massively parallel computer systems
  • Grid computing
  • ==Parallel software==

    A huge number of software systems have been designed for programming parallel computers, both at the operating system and programming language level. These systems must provide mechanisms for partitioning the overall problem into separate tasks and allocating tasks to processors. Such mechanisms may provide either implicit parallelism -- the system (the Compiler or some other program) partitions the problem and allocates tasks to processors automatically (also called implicit parallelism) -- or explicit parallelism where the programmer must annotate his program to show how it is to be partitioned. Most of the current implementations of parallelizing compilers only support single-level parallelism, as opposed to nested parallelism (also called nested parallelism), which allows threads already running in parallel to spawn further parallelism. It is also usual to provide synchronisation primitives such as semaphore (programming) and Monitor_%28computer_science%29 to allow processes to share resources without conflict.

    Load balancing attempts to keep all processors busy by moving tasks from heavily loaded processors to less loaded ones.

    Communication between tasks is usually done with threads communicating via shared memory or with message passing, either of which may be implemented in terms of the other.

    Well known parallel software problem sets are:

  • Embarrassingly parallel
  • Grand Challenge problems
  • =Parallel programming models=

    Main article : 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. It encloses the areas of applications, languages, compilers, libraries, communication systems, and parallel I/O. People have to choose a proper parallel programming model or a form of mixture of them to develop their parallel applications on a particular platform.

    Parallel models are implemented in several ways: as libraries invoked from traditional sequential languages, as language extensions, or complete new execution models. They are also roughly categorized for two kinds of systems: shared memory systems and distributed memory systems, though the lines between them are largely blurred nowadays.

    Currenty main-stream parallel programming models are:

  • Parallel Virtual Machine
  • Message Passing Interface
  • OpenMP
  • Global Arrays
  • Co-Array Fortran
  • Unified Parallel C
  • High Performance Fortran
  • SHMEM
  • =Topics in parallel computing=

    Generic:

  • Automatic parallelization
  • Parallel programming
  • Parallel algorithm
  • Finding parallelism in problems and algorithms
  • Cellular automaton
  • Computer science topics:

  • Lazy evaluation vs strict evaluation
  • Complexity class NC (complexity)
  • Communicating sequential processes
  • Dataflow architecture
  • Parallel graph reduction
  • Practical problems:

  • Parallel computer interconnects
  • Parallel computer I/O
  • Reliability problems in large systems
  • Programming languages:

  • OpenMP
  • MPI
  • Occam programming language
  • Linda (coordination language)
  • Cilk
  • Specific:

  • Atari Transputer Workstation
  • BBN Butterfly computers
  • Beowulf cluster
  • Blue Gene
  • Deep Blue
  • Fifth generation computer systems project
  • ILLIAC III
  • ILLIAC IV
  • Meiko Computing Surface
  • NCUBE
  • Transputer
  • Parallel computing to increase fault tolerance:

  • Master-checker
  • Companies (largely historical):

  • Thinking Machines
  • Convex Computer Corporation
  • Meiko
  • =See also=

  • Concurrent computing
  • Grid computing
  • Computer cluster
  • List of important publications in computer science#Parallel computing
  • Cluster Resources, Inc.
  • Parallel programming
  • =References=

    =External links=

  • [http://www.pmodels.org/ The Center for Programming Models for Scalable Parallel Computing]
  • *[http://www.clusterbuilder.org/ Cluster Builder] *[http://www.clusterresources.com/ Cluster Resources] *[http://linuxhpc.org/ Linux High Performance Technical Computing, High Availability and Parallel Clustering] *[http://wotug.ukc.ac.uk/parallel/ Internet Parallel Computing Archive] *[http://nhse.org/index.htm National HPCC Software Exchange] *[http://dsonline.computer.org/portal/site/dsonline/index.jsppageID=dso_level1_home&path=dsonline/topics/parallel&file=index.xml&xsl=generic.xsl Parallel Processing] *[http://www.cs.rit.edu/~ncs/parallel.html Nan s Parallel Computing Page] *[http://parawiki.plm.eecs.uni-kassel.de/ Parawiki] *[http://research.ac.upc.edu/nanos/menuup.htm NANOS environment: multiprogramming OpenMP applications] *[http://sciencesoft.at/index.jsplink=fractal&lang=en Parallelized Mandelbrot Set], interactive online demo
  • discussion [http://groups.google.de/group/comp.arch/browse_frm/thread/3d2139bf82f6298e/255f8f68b193895alnk=raot#255f8f68b193895a Not enough parallelism in programming]
  • == Parallel Computing Sites ==

    *[http://teragrid.ncsa.uiuc.edu/TGIA64LinuxCluster.html Teragrid] *[http://www.westgrid.ca/support/topics/scheduling.php WestGrid] *[http://www.tcf.vt.edu/systemX.html ViriginaTech] *[http://www.irb.hr/en/cir/projects/dcc/00006/ IRB] *[http://www.sara.nl/userinfo/lisa/usage/batch/index.html SARA] *[http://www.teradata.com Teradata]