Jumat, 20 Juni 2014

Parallel Computation

Parallel computing is a form of computation 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 ("in parallel"). There are several different forms of parallel computing: bit-level, instruction level, data, and task parallelism. 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. As power consumption (and consequently heat generation) by computers has become a concern in recent years, parallel computing has become the dominant paradigm in computer architecture, mainly in the form of multi-core processors.

Parallelism concept : Multiple copies of hardware unit used, All copies can operate simultaneously, Occurs at many levels of architecture, Term parallel computer applied when parallelism dominates entire architecture. Characterizations Of Parallelism : Microscopic vs. macroscopic, Symmetric vs. asymmetric, Fine-grain vs. coarse-grain, Explicit vs. implicit
Distributed processing refers to any of a variety of computer systems that use more than one computer, or processor, to run an application. Distributed processing is the type of processing whereby processing occurs on more than one processor in order for a transaction to be completed. In other words, processing is distributed across two or more machines and the processes are most likely not running at the same time.

Architectural parallel computer : Design in which computer has reasonably large number of
Processors. Intended for scaling. Example: computer with thirty-two processors
Not generally classified as parallel computer
– Dual processor computer
– Quad processor computer

Programming with threads introduces new difficulties even for experienced programmers. Concurrent programming has techniques and pitfalls that do not occur in sequential programming. Many of the techniques are obvious, but some are obvious only with hindsight. Some of the pitfalls are comfortable (for example, deadlock is a pleasant sort of bug—your program stops with all the evidence intact), but some take the form of insidious performance penalties.

A “thread” is a straightforward concept: a single sequential flow of control. In a highlevel language you normally program a thread using procedures, where the procedure calls follow the traditional stack discipline. Within a single thread, there is at any instant a single point of execution. The programmer need learn nothing new to use a single thread.
Having “multiple threads” in a program means that at any instant the program has multiple points of execution, one in each of its threads. The programmer can mostly view the threads as executing simultaneously, as if the computer were endowed with as many processors as there are threads. The programmer is required to decide when and where to create multiple threads, or to accept such decisions made for him by implementers of existing library packages or runtime systems. Additionally, the programmer must occasionally be aware that the computer might not in fact execute all his threads simultaneously.

Having the threads execute within a “single address space” means that the computer’s addressing hardware is configured so as to permit the threads to read and write the same memory locations. In a high-level language, this usually corresponds to the fact that the off-stack (global) variables are shared among all the threads of the program. Each thread executes on a separate call stack with its own separate local variables. The programmer is responsible for using the synchronization mechanisms of the thread facility to ensure that the shared memory is accessed in a manner that will give the correct answer. Thread facilities are always advertised as being “lightweight”. This means that thread creation, existence, destruction and synchronization primitives are cheap enough that the programmer will use them for all his concurrency needs.

Pemrograman CUDA GPU. What is CUDA?
CUDA Architecture
Expose general-purpose GPU computing as first-class capability
Retain traditional DirectX/OpenGL graphics performance
CUDA C
Based on industry-standard C
A handful of language extensions to allow heterogeneous programs
Straightforward APIs to manage devices, memory, etc.


Related Link :
https://www.tacc.utexas.edu/c/document_library/get_file?uuid=e05d457a-0fbf-424b-87ce-c96 http://web.eecs.umich.edu/~qstout/parallel.htmlfc0077099
https://computing.llnl.gov/tutorials/parallel_comp/
http://en.wikipedia.org/wiki/Parallel_computing
http://www.csse.monash.edu.au/~rdp/research/Papers/Parallelism_in_a_computer_architecture_to_support_orientation_changes_in_virtual_reality.pdf
http://www.nvidia.com/content/GTC-2010/pdfs/2131_GTC2010.pdf