Page 1 of 1

Module Code - Title:

CS5741 - CONCURRENCY AND PARALLELISM IN SOFTWARE DEVELOPMENT

Year Last Offered:

2025/6

Hours Per Week:

Lecture

2

Lab

2

Tutorial

0

Other

0

Private

6

Credits

6

Grading Type:

N

Prerequisite Modules:

Rationale and Purpose of the Module:

Parallel and Concurrent programming skills are of growing importance as super computer and multi-core processor technology advances. A sound understanding of the associated concepts and obstacles is essential. This module introduces fundamental theories of parallel and concurrent software development. It discusses how designs can be made parallel and identifies the common faults in concurrent programs and how to avoid them. It introduces a range of widely used programming paradigms and techniques for writing concurrent and large scale parallel systems.

Syllabus:

The following content is indicative of the content of the module: Concurrency and parallelism, and their applications to software. Identifying parallelisable problems and parallelisation techniques. Parallel algorithms and how to design them. Common faults in concurrent and parallel programs. Complexity, performance measurement and scheduling techniques. Multi-core and emerging architectures. Multi-core programming paradigms. Data-parallel techniques: SIMD, MIMD, vector processing and GPGPUs. Shared-memory techniques: conventional threads and locks, structured parallelism, transactional memory using OpenMP (Open Multi-Processing). Message-passing techniques using MPI (Message Passing Interface).

Learning Outcomes:

Cognitive (Knowledge, Understanding, Application, Analysis, Evaluation, Synthesis)

On successful completion of this module, students will be able to: 1. Design parallel algorithms using appropriate paradigms (e.g., shared memory, message passing) and evaluate their performance across different hardware architectures. 2. Identify and analyze concurrency-related faults (e.g., race conditions, deadlocks) in parallel programs and apply debugging techniques to resolve them. 3. Implement parallel solutions using tools such as OpenMP and MPI, and measure their computational complexity and scalability using performance profiling techniques.

Affective (Attitudes and Values)

On successful completion of this module, students should be able to: 1. Demonstrate a proactive attitude toward exploring emerging multi-core and parallel computing technologies by engaging in independent research and experimentation. 2. Reflect on the ethical, societal and sustainability implications of parallel computing decisions, particularly in relation to resource usage, fairness, and system reliability. 3. Participate constructively in collaborative programming tasks, showing respect for diverse problem-solving approaches and contributing to shared learning goals.

Psychomotor (Physical Skills)

N/A

How the Module will be Taught and what will be the Learning Experiences of the Students:

The module is delivered through a combination of interactive lectures, practical lab sessions, and project-based learning, creating a dynamic and student-centred learning environment. Lectures introduce foundational and advanced concepts such as parallel computing models, parallelisable problems and algorithms, race conditions, Amdahl's Law, and data dependencies. They also explore current technologies and industry-relevant tools, including Nvidia's latest GPGPU architectures and parallelism capabilities. Lab sessions provide students with hands-on experience in implementing concurrent and parallel solutions using modern programming languages and frameworks such as the Java ForkJoin framework and OpenMP. These sessions are designed to foster active learning, allowing students to experiment, debug, and optimize parallel programs in a supportive, feedback-rich environment. Students undertake two substantial projects based on real-world problems, such as simulating fire spread in forests. These projects encourage problem-based learning, collaboration, and reflection, while also developing technical fluency and ethical awareness. This approach aligns with UL's Integrated Curriculum Development Framework (ICDF) by: Promoting research-informed teaching through the integration of current technologies and academic theory. Supporting inclusive and flexible learning through scaffolded activities and diverse assessment formats. Encouraging graduate attribute development, including critical thinking, ethical responsibility, digital fluency, and effective communication. Embedding reflection and inquiry into the learning process, enabling students to connect technical decisions with broader societal and environmental considerations.

Research Findings Incorporated in to the Syllabus (If Relevant):

Prime Texts:

Moti ben Ari (2006) Principles of Concurrent and Distributed Programming , Boston: Addison-Wesley
Michael J. Quinn (2003) Parallel Programming in C with MPI and OpenMP , McGraw Hill Education Group
Peter Pacheco (1996) Parallel Programming with MPI ,
Victor Alessandrini (2016) Shared memory application programming : concepts and strategies in multicore application programming , Waltham, MA : Elsevier

Other Relevant Texts:

Doug Lea (1999) Concurrent Programming in java: Design Principles and Patterns 2nd Edition , Addison Wesley
Kirk, David; Hwu, Wen-Mei W. (2010) Programming Massively Parallel Processors: A Hands on Approach ,

Programme(s) in which this Module is Offered:

MSSOENTFA - SOFTWARE ENGINEERING

Semester(s) Module is Offered:

Autumn

Module Leader:

faeq.alrimawi@ul.ie