Overview
Aims
Learning basic about parallel an concurrent programming
Develop algorithmic thinking and skills using one or more processors for multiple processes
Use of an advanced programming language for implementing the studied methods, explain the importance of exploiting parallelism in programs
Course contents
Course
- General principles for parallel programming. Introductory material.
- Paralelism – Computer Architecture Perspective
- Parallel Models – Shared and Distributed memory models.
- Distributed vs. shared-memory parallelism.
- No determinism and how it arises, even in single-processor systems. Multiple processors tasks.
- Design and analysis of parallel algorithms
- Numerical algorithms, Non-numerical algorithms
- Distributed memory programming. Shared Memory programming.
- Parallel frameworks
- Applications- scientific computing
- Process synchronization. Applications.
- Interconnection networks
Laboratories
- Java and Threads. A brief introduction to the Java language. Example applications with Threads.
- Understanding the Problem
- distributed vs. shared-memory parallelism.
- -No determinism and how it arises, even in single-processor systems.
- Threads, race conditions, and critical sections.
- Solution Techniques
- Abstractions for mutual exclusion and synchronization.
- Modern Java concurrency facilities.
- Object-oriented design patters for concurrency.
- Project proposals, design, solutions
- Writing Concurrent Programs
- Parallel computing and message passing
- Practical applications. Examples of practical problems solved with efficient methods.
- Analysis, evaluation, and feed-back.
Learning outcomes
- Solve different problems in Java using Treads.
- explain fundamental concepts and solutions in concurrent programming;
- recognize issues and challenges in developing concurrent programs;
-apply common techniques used in implementing concurrent programs;
-describe shared memory and message passing approaches to parallel programming;
-write a program using features of a language that supports concurrent programming; and
-recognize and apply design patterns for concurrent programming.
Assessment
Project presentation and laboratory assignment grades.