This repository contains the projects from the Parallel Programming course taught by Andreas Vasilakis.
Experiments include: here
- Barrier synchronization
- Thread-per-block configuration
- Workload distribution
- GPU memory models (Global vs Shared/Local Memory)
- Analytic results are included in the pdf report
Numerical integration implementations using OpenMP with different parallelization techniques: here
- Loop parallelization
- Reduction operations
- Task-based recursion
- Dynamic scheduling strategies
- Analytic results are included in the pdf report
Manual multithreaded implementations focusing on synchronization and workload balancing: here
- Thread creation and synchronization
- Mutex-based locking
- Lock-free execution
- Dynamic job queues
- Alternative work distribution strategies
- Analytic results are included in the pdf report
- NVIDIA CUDA Toolkit (11+)
- GCC (9+)
- OpenMP
- POSIX Threads