Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Software and Programming of High Performance Systems: Course Exercises

This repository contains my implementations and performance analyses for the Software and Programming of High Performance Systems (HPC) course exercises. The projects focus on scaling applications through parallelization, vectorization, and GPU acceleration.


Exercise 1: Parallel Programming Models

Focus: Shared memory, distributed memory, and hybrid environments.

🔹 OpenMP (Open Multi-Processing)

  • Objective: Parallelizing loops and sections using directive-based shared memory programming.
  • Key Concepts: Thread safety, work-sharing constructs, and avoiding race conditions.

🔹 MPI (Message Passing Interface)

  • Objective: Developing distributed memory programs in C.
  • Key Concepts: Point-to-point communication (MPI_Send/MPI_Recv), collective operations (MPI_Reduce, MPI_Bcast), and domain decomposition.

Both of those tools where used for implementing parallel versions of mds algorithm

🔹Python Parellism tools

  • Concurrent Futures (ProcessPoolExecutor)
  • MPI4py (mpi-futures and simple communication)
  • Used for parallelizing an application of randomsearch.

Exercise 2: Architecture-Level Optimization

Focus: Exploiting instruction-level parallelism and hardware accelerators.

🔹 SIMD Vectorization (SSE & AVX)

  • Objective: Manually optimizing code using Streaming SIMD Extensions (SSE) and Advanced Vector Extensions (AVX) intrinsics.
  • Key Concepts: Data alignment, register packing, and $N$-way speedup (e.g., 256-bit wide registers for 8 single-precision floats).
  • Used for parellism of the WENO5 algorithm

🔹 CUDA (Compute Unified Device Architecture)

  • Objective: Offloading computationally intensive tasks to NVIDIA GPUs.
  • Key Concepts: Kernel functions, thread hierarchy (Grids/Blocks), shared memory optimization, and host-to-device data transfers.
  • Used for simple implementation of complex matrix multiplication (with and without CuBLAS)

Requirements & Tools

To run these exercises, you will typically need:

  • Compilers: gcc, nvcc (for CUDA)
  • Libraries: OpenMPI or MPICH, CUDA Toolkit
  • Python: mpi4py package

Performance Analysis

Each directory contains a short report regarding the observed speedup and efficiency (performance testing was doene by running multiple times with different parameters the programs using shell scripts also included in the repo)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages