Authors |
---|
Dimitra Leventi (@dileventi) |
Dimitrios Mitropoulos (@dimitrismit) |
Apostolis Stamatis (@apostolis1) |
We conducted benchmarks using different configurations of resources (nodes, processors, processors per node), tasks (where applicable) and input sizes to determine scalability and bottlenecks
The results of the benchmarks and their in depth analysis can be found in the report
The report also contains critical parts of the source code
Given a serial algorithm of Conway's Game of Life:
- Detect the parallelization possibilities
- Implement a solution using OpenMP in a shared address space architecture
- Perform benchmarks
Given a serial K-means algorithm:
- Add the necessary synchronization commands when accessing shared resources, so the algorithmm can be run on a parallel system
- Improve algorithm of (1) by creating local data structures to avoid synchronization using reduction
- Perform benchmarks
Benchmark different lock implementations for parallel systems, compare and interpret the results
- pthread_mutex_t lock from the Pthreads library
- pthread_spinlock_t lock from the Pthreads library
- test-and-set lock
- test-and-test-and-set lock
- array based lock
- linked list lock from chapter 7 of "The Art of Multiprocessor Programming"
Implementation of the Floyd-Warshall algorihtm using parallel tasks, understanding the limitations of parallel for
Benchmark the following implementations of a concurrent double linked list:
- Coarse-grain locking
- Fine-grain locking
- Optimistic synchronization
- Lazy synchronization
- Non-blocking synchronization
Different implementations and optimizations of the K-means algorithm
- Naïve version: Nearest clusters calculation is offloaded to the GPU
- Transpose version: Implement column-based indexing for the arrays (instead of row-based which is used in the naïve version)
- Shared version: Move the frequently accessed
clusters
array to the shared GPU memory
Given the serial versions of Jacobi and Gauss-Seidel kernels for the ... problem:
- Identify parallelism possiblities on Jacobi and Gauss-Seidel kernels
- Design and implement a solution for a distributed memory arhcitecture using message passing with MPI
- Perform benchmarks