Paralel and concurrent programming

Course Code: MI106.2 • Study year: I • Academic Year: 2022-2023
Domain: Computer Science - Masters • Field of study: Advanced programming and databases
Type of course: Elective (1 of 2)
Language of instruction: Romanian
Erasmus Language of instruction: English
Name of lecturer: Ovidiu Domsa
Seminar tutor: Arpad Incze
Form of education Full-time
Form of instruction: Class / Seminary
Number of teaching hours per semester: 42
Number of teaching hours per week: 3
Semester: Autumn
Form of receiving a credit for a course: Grade
Number of ECTS credits allocated 7

Course 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 Entry Requirements:

Basic programming languages

Course contents:


  1. General principles for parallel programming. Introductory material.
  2. Paralelism – Computer Architecture Perspective
  3. Parallel Models – Shared and Distributed memory models.
  4. Distributed vs. shared-memory parallelism.
  5. No determinism and how it arises, even in single-processor systems. Multiple processors tasks.
  6. Design and analysis of parallel algorithms
  7. Numerical algorithms, Non-numerical algorithms
  8. Distributed memory programming. Shared Memory programming.
  9. Parallel frameworks
  10. Applications- scientific computing
  11. Process synchronization. Applications.
  12. Interconnection networks


  1. Java and Threads. A brief introduction to the Java language. Example applications with Threads.
  2. Understanding the Problem
  3. distributed vs. shared-memory parallelism.
  4. -No determinism and how it arises, even in single-processor systems.
  5. Threads, race conditions, and critical sections.
  6. Solution Techniques
  7. Abstractions for mutual exclusion and synchronization.
  8. Modern Java concurrency facilities.
  9. Object-oriented design patters for concurrency.
  10. Project proposals, design, solutions
  11. Writing Concurrent Programs
  12. Parallel computing and message passing
  13. Practical applications. Examples of practical problems solved with efficient methods.
  14. Analysis, evaluation, and feed-back.

Teaching methods:

Lecture, conversation, exemplification, projects

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.

Learning outcomes verification and assessment criteria:

Project presentation and laboratory assignment grades.

Recommended reading:

A. Grama, G. Karypis, V. Kumara and A. Gupta, Introduction to Parallel Computing, Addison Wesley , USA , 2003 , 143
web,, MIT , NA , 2020 , 12
web,, site , NA , 2019 , 12