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 \cdot 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