██████╗ ██╗ █████╗ ██████╗██╗███████╗██████╗ ██╗ ██╗██████╗ ██████╗
██╔════╝ ██║ ██╔══██╗██╔════╝██║██╔════╝██╔══██╗ ██║ ██║██╔══██╗██╔════╝
██║ ███╗██║ ███████║██║ ██║█████╗ ██████╔╝ ███████║██████╔╝██║
██║ ██║██║ ██╔══██║██║ ██║██╔══╝ ██╔══██╗ ██╔══██║██╔═══╝ ██║
╚██████╔╝███████╗██║ ██║╚██████╗██║███████╗██║ ██║██╗██║ ██║██║ ╚██████╗
╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═════╝
Glacier.HPC: Profiling, Benchmarking and Analysis of Numerical Kernels derived from common Supervised Machine Learning
Algorithms on consumer grade computing hardware.
Project scope: Major project for B.E CSE (AI&ML)
Author: Skandan C.Y
- Write clean, safe C17, C++20 with CMake as build system
- Study kernel behavior under different release configurations and compiler optimization flags
- Profile numerical kernels to identify behavior and system roofline
- Act as a controlled benchmarking environment to optimize numerical algorithms on Glacier.ML
- Study kernel behavior under iterative optimization techniques
- Study performance scaling across multiple threads
- Finally, establish a roofline model depicting textbook vs observed kernel behaviour
Numerical kernels derived from common supervised machine learning algorithms, especially used in Glacier.ML
- SAXPY (roofline model established)
- GEMM
- pth order distance (kNN)
Benchmarks have been conducted on:
AMD Ryzen 6600H (6 cores / 12 threads)
NVidia RTX 3050
Refer hardware_info.txt for detailed information.
- Laptop connected to power source
- Power mode set to
Performance - No other applications or background tasks opened manually
Memory Bandwidth scaling across multiple threads was benchmarked using the original Triad kernel
from STREAM benchmarking suite. Peak Memory Bandwidth was found to be 18.956 GB/s when set
to threads=2.
See STREAM/README.md for further infomation.
Benchmark results are exploratory and used primarily for relative comparison and profiling, not for leaderboard claims.
- Cache lines are heated before everytime the driver is run.
- Kernels are run 1000 times to ensure capture of coherent results.
- A Python based harness is used to perform benchmarking experiments, ensuring minimal human interference.
Language: C++20, C17
Core stack:
To build with debug flags (-g, -O0)
cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build cmake-build-debud -j$(nproc)To build with release flags (-O3, -march=native, fopenmp, -ffast-math)
cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release
cmake --build cmake-build-release -j$(nproc)