This course aims at exposing the students to a set of knowledge and competences that enable them to tackle the increasingly relevant problem of programming parallel and concurrent systems. To achieve this, the course addresses both the parallel programming “in the large”, oriented towards clustering architectures and the cloud, and the development of concurrent programs, oriented towards multiprocessor architectures.
The topic of parallel programming emphasizes the methodologies for the design of parallel algorithms and applications, including using the map-reduce model. The topic of concurrent programming emphasizes the properties of concurrent programs and the methodologies, techniques and tools for developing correct concurrent programs.
In the laboratorial component of this course the students will apply the concepts acquired in the lectures in the development of parallel or concurrent applications, making use of existing parallel libraries (e.g., Hadoop for map-reduce) and tools to access application’s correctness and predict and evaluate the performance.
The choice of using Java provides access to a series of valuable tools; additionally, the object-oriented nature of the language allows for encapsulating, when convenient, unnecessary details.
This course aims at providing the students with a solid background on concurrency. Namely, at the end of the course the students are expected to understand the problems related to concurrency and the execution of concurrent programs, to know the mechanisms available in the programming languages to specify concurrent programs, to know how to develop correct and efficient concurrent programs applying common programming techniques and patterns.
Knowledge:
Application:
Main bibliographic references:
Hours per credit | 28 | ||
Hours per week | Weeks | Hours | |
Aulas práticas e laboratoriais | 28.0 | ||
Aulas teóricas | 28.0 | ||
Avaliação | 8.0 | ||
Self study | 56.0 | ||
Project | 48.0 | ||
Total hours | 168 | ||
ECTS | 6.0 |