This course studies the fundamental aspects of parallel and distributed systems, providing an integrated view of the various facets of software development on such systems: hardware architectures, programming languages, computational models, software development tools and design patterns, performance modelling and analysis, experimenting and measuring, application to scientific computing.