Introduction
Moore’s law
Moore’s law (observation)
Number of transistors doubles about every two years.
Number of transistors is still rising exponentially:
Architectures get simpler - more cores and threads in a single CPU
“Free lunch is over”
Single-thread performance is not rising as fast anymore
Sequential computers → Parallel computers
Programmers are now responsible for code efficiency
Fully automatic parallelization is restricted
Processor performance
= number of instructions per clock clock frequency
Measurement units
FLOPS Floating point instructions (per second)
IPS Instructions per seconds
Core
used to be called “processor”, “processing unit”
smallest unit that can execute instructions
Processor
“multi-core processor” or if lot’s of cores “many-core processor” (= GPU)
Collection of cores on a single chip
Parallel vs. Distributed vs. Concurrent
Three related diciplines with different perspectives, methods and solutions
Concurrent Computing
The discipline of managing and reasoning about interacting processes that may (or may not) progress simultaneously.
Tasks can run in overlapping time periods and wont necessarily run at the same time (ie. multitasking on a single core).
Coordination of access and usage of shared resources to solve given problem.
Correctness, synchronization, communication
Operating systems, synchronization, interprocess communication, locks, semaphores, autonomous computing, process calculi, CSP, CCS, pi-calculus, lock/wait-freeness, …
Deadlock-freedom, starvation-freedom, mutual exclusion, fairness, memory coordination with locks, semaphores, data structures, ...
Parallel Computing
The discipline of efficiently utilizing dedicated parallel resources (processors, memories, …) to solve individual, given computational problems.
Tasks literally run at the same time (ie. multicore processor).
Dividing given problem into subproblems that can be solved by dedicated processors in coordination.
parallel programming ≠ parallel computing (broader, more theoretical)
Efficiency, performance, tightly coupled, dedicated parallel system, multi-core processor, GPGPU, High-Performance Computing (HPC), …
Distributed Computing
The discipline of making independent, non-dedicated resources available and cooperate toward solving specified problem complexes.
No centralized control, different computer memory model
Correctness, availability, progress, security, integrity, privacy, robustness, fault tolerance, grid, cloud, internet, agents, autonomous computing, mobile computing, …
Granularity
Granularity
= ratio of computation to communication
(these periods are separated by synchronization events)
Implicit processor parallelism
Automatic parallelization → is restricted, compilers can’t invent a new algorithm
Hardware and compiler, “free lunch”
Gates, functional units
Instruction level parallelism (ILP) → will not go any further
SIMD / Vector parallelism
fine grained / explicit - parallelism
Parallel computing parallelism
Higher fequency of synchronization → must be done efficiently to reduce overhead.
Done with “explicit parallel programming”
SIMD / Vector parallelism
Cores / threads / processes
Communication
Synchronization
coarse-grained / large scale - parallelism
The most trivial parallelization that happens in distributed computing
Lower fequency of synchronization with possibly larger data.
Potential for hiding coordination behind computation.
Multiple (coupled) applications