Parallel and Concurrent Programming Education
I am interested in studying how students move from sequential programming to concurrent and parallel programming.
This transition requires more than learning libraries or directives. It involves reasoning about processes, threads, synchronization, shared memory, message passing, problem decomposition, scalability, and performance measurement.
In this line, parallel and concurrent programming is both a technical subject and a formative problem: how to introduce difficult abstractions without hiding their costs, how to connect operating systems, computer architecture, and algorithms, and how to avoid teaching tools such as OpenMP, MPI, or CUDA as isolated recipes.
Possible lines of work
- didactic sequencing from sequential programming to threads, OpenMP, MPI, and GPU programming;
- study of recurring difficulties in synchronization, race conditions, deadlocks, communication, and work decomposition;
- design of exercises that connect correctness, performance, scalability, and experimental analysis;
- comparison of teaching approaches based on code, simulation, hand tracing, visualization, and laboratory experiments;
- construction of introductory parallel-computing tracks for students with heterogeneous mathematical and computing backgrounds.
Guiding sources
This line dialogues with historical ERAD-RS materials on concurrent programming, OpenMP, MPI, CUDA, performance, and high-performance-computing education.
