Welcome to my repository dedicated to tasks, assignments, and investigations related to my Master’s Degree in High-Performance Computing (HPC). This repository serves as a structured collection of source code, scripts, tools, and reference materials developed or studied throughout the course.
This repository is organized into the following main directories:
-
cuda/
Contains assignments and projects completed as part of the coursework. Examples include:- CUDA Applications: Parallelized algorithms using NVIDIA CUDA.
- OpenMP Implementations: Shared memory parallelism in C/C++.
- MPI Programs: Distributed memory solutions for clusters.
-
cloud/
Scripts and configurations for setting up and managing HPC workloads on cloud platforms, particularly AWS. This includes:- Job submission scripts for AWS Batch.
- Auto-scaling configurations for HPC clusters.
- Optimization for cloud-based compute nodes.
-
hpc_tools/
Tools and utilities for profiling, debugging, and analyzing performance:- Usage of NVIDIA Nsight, gprof, Valgrind, and others.
- Performance tuning and benchmarking tools.
- Custom scripts for automating performance analysis workflows.
-
mpi/
Documentation, code samples, and notes based on:- Books: Summaries and examples from key HPC textbooks.
- Papers: Reproducing experiments or methodologies from academic research.
- Trainings: Exercises and examples from HPC-related training courses.
-
omp/
Documentation, code samples, and notes based on:- Books: Summaries and examples from key HPC textbooks.
- Papers: Reproducing experiments or methodologies from academic research.
- Trainings: Exercises and examples from HPC-related training courses.
-
opencl/
Documentation, code samples, and notes based on:- Books: Summaries and examples from key HPC textbooks.
- Papers: Reproducing experiments or methodologies from academic research.
- Trainings: Exercises and examples from HPC-related training courses.
This repository aims to:
- Demonstrate hands-on knowledge in programming for parallel and distributed systems.
- Document the learning journey in HPC concepts and their practical applications.
- Facilitate sharing of insights, examples, and best practices in HPC development.
The repository includes work involving the following tools and technologies:
-
Programming Languages:
Primarily C and C++ with extensions for CUDA, OpenMP, and MPI. -
HPC Tools:
- Profilers: NVIDIA Nsight, gprof.
- Debuggers: Valgrind, CUDA Debugger.
- Performance Analyzers: Perf, VTune.
-
Cloud Platforms:
- AWS for on-demand HPC resources.
- Scripts for auto-scaling and cost-efficient usage.
- Clone the repository:
git clone https://www.usc.gal/en/studies/masters/engineering-and-architecture/master-high-performance-computing-online.git
- Navigate to the appropriate folder for the task or topic you are interested in:
cd hpc-masters/assignments
- Follow the instructions or README files within each folder to build, execute, or explore the materials.
The following resources have been instrumental in this journey:
Books: "Parallel and High Performance Computing; C++ Concurrency in Action; " and others.
Trainings: NVIDIA Deep Learning Institute, AWS HPC Workshops; HLRS
Papers: ACM Research articles on performance analysis, scaling HPC applications, and optimization strategies.