===== SPM 2009-2010 ===== This is the list of arguments actually presented during the course in the A.A. 2009-2010. * Evolution of computer architectures (multi/many core, clusters, grids, clouds) and urgency of effective parallel/distributed programming models and tools * Problems in classical parallel/distributed programming * Distinction between distributed and parallel based on computational grain * Definition of mapping and scheduling problems * Communications and synchronization * Computation grain * Load balancing, reliability, security and autonomic management * Definition of structured parallel/distributed programming model * Patterns/Skeletons * Key features of a pattern * User programmers and system programmer views * Layered implementation * Pros and cons * Skeleton/patterns for parallel/distributed programming * Techniques for discovering patterns * Classification of patterns (data, stream, control parallel) * Typical patterns * Cole's manifesto principles (with extensions) * Skeleton frameworks * Definition of algorithmic skeleton * Language based vs. library based skeleton frameworks * Implementation of skeleton frameworks * Implementation template technology * Macro data flow technology * Fixed vs. variable skeleton set frameworks: how to handle expandability of the skeleton set using macro data flow implementation * Advanced features * Portability (virtual machine based vs. compiler based) * Adaptivity * General principles * Behavioural skeletons with autonomic management of non functional features * Hierarchical management * Multiconcern management * Performance modelling of structured parallel/distributed computations * Measures of interest * Service and completion time * Speedup and scalability * Efficiency, isoefficiency * Performance models for farm, pipeline and data parallel skeletons * Performance models using queue theory results * How to derive a performance model for a generic skeleton. * Design patterns * Concept of design pattern * Parallel design patterns * Sample parallel patterns * Perspectives and differences with algorithmic skeletons * Software components * Definition * Component composition (use/provide ports, other kind of ports) * Usage, usage in a structured framework * Sample component frameworks (Java Beans, Fractal, SCA). Sample SCA code * Perspectives and differences with algorithmic skeletons and design patterns. * Workflows * Definition * Typical usage * Scheduling and fault tolerance * Perspectives and differences with algorithmic skeletons and design patterns. * Low level frameworks to support structured parallel/distributed programming * POSIX-TCP/IP (targets clusters and network of workstations * Client server sample implementation * Tools and command line utilities (ssh, scp, rsync) * Implementation of collective operations with UDP * Sample code in C/C++ and Java * OpenMP (targets multicores) * Directives and run time primitives * Sample code * Sample implementation of structured code * RPC/RMI (targeting clusters and networks of workstations) * Concepts * Sample code in C (SUN rpcgen), Java (RMI) and ProActive) * Measuring and modelling POSIX/TCP platform * Mechanisms used to measure time (wall clock, clock, per process) * Simple modelling of TCP communications (approximating communication costs at the steady state) * Wireless networks * Concept * Infrastructure and ad hoc modes * Channel access protocols * 802.11 * Usage in structured context * Peer-to-peer techniques * Concept * Centralized, distributed and hierarchical approaches * Typical algorithms and applications * Usage in structured contexts * Client server model vs. peer to peer: perspectives * Concepts and perspectives on parallel programming from the Berkeley paper "A View of the Parallel Computing Landscape" * Tools and frameworks: * Sample skeleton framework: Muesli. Skeletons provided, installation, sample code. * Sample skeleton framework: Calcium/ProActive. Skeletons provided, installation, sample code. * Sample component framework: ProActiveGCM * Sample message passing framework: MPI. Point to point primitives, collective primitives, compilation and run on clusters. * Sample thread framework: OpenMPI.