https://github.com/aaronjs99/planmux
PlanMux: Path Planning using Parallel/Multiplexed Computing
https://github.com/aaronjs99/planmux
bellman-ford-algorithm cpp cuda dijkstra-algorithm floyd-warshall-algorithm graphs hpc openmp parallel-computing path-planning shortest-path-algorithm slurm
Last synced: 13 days ago
JSON representation
PlanMux: Path Planning using Parallel/Multiplexed Computing
- Host: GitHub
- URL: https://github.com/aaronjs99/planmux
- Owner: aaronjs99
- License: mit
- Created: 2021-03-05T14:46:37.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-07-05T00:02:27.000Z (11 months ago)
- Last Synced: 2026-03-06T00:39:23.250Z (2 months ago)
- Topics: bellman-ford-algorithm, cpp, cuda, dijkstra-algorithm, floyd-warshall-algorithm, graphs, hpc, openmp, parallel-computing, path-planning, shortest-path-algorithm, slurm
- Language: C++
- Homepage:
- Size: 77.1 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Parallel Path Planning Algorithms
This repository provides serial and parallel implementations of three classical shortest path algorithms — **Dijkstra**, **Bellman-Ford**, and **Floyd-Warshall** — using **OpenMP** (CPU parallelism) and **CUDA** (GPU acceleration). The algorithms are tested on both real-world and synthetic graph data to evaluate performance scalability.
---
## Project Structure
```
planmux/
├── assets/ # Algorithm-specific result assets (plots, charts)
│ ├── bellman_ford/
│ ├── dijkstra/
│ └── floyd_warshall/
├── config/ # Runtime configuration files
│ └── default.yaml
├── results/ # Benchmarking outputs
│ ├── jobs/ # SLURM or local job output logs
│ ├── results.pdf # Consolidated result visualizations
│ └── results.xlsx # Raw performance data
├── src/ # All source code and executables
│ ├── main.cpp # Entry point for general testing
│ ├── USA-road-d_NY.txt # Real-world graph dataset
│ ├── bellman_ford/
│ │ ├── bellman_ford_cuda.cu
│ │ └── bellman_ford_openmp.cpp
│ ├── dijkstra/
│ │ ├── dijkstra_openmp.cpp
│ │ └── dijkstra_openmp.sh
│ └── floyd_warshall/
│ ├── floyd_warshall_cuda.cu
│ ├── floyd_warshall_cuda.sh
│ ├── floyd_warshall_openmp.cpp
│ └── floyd_warshall_openmp.sh
├── .gitignore # Git ignored files and folders
├── LICENSE # Project license (MIT)
├── presentation.pdf # Presentation (PDF version)
├── presentation.pptx # Presentation (PPTX version)
├── report.pdf # Final technical report
└── README.md # Project documentation (you are here)
```
---
## Algorithms Implemented
| Algorithm | Serial | OpenMP | CUDA |
|-----------------|--------|--------|------|
| Dijkstra | ✅ | ✅ | ❌ |
| Bellman-Ford | ✅ | ✅ | ✅ |
| Floyd-Warshall | ✅ | ✅ | ✅ |
---
## Build & Run
### Prerequisites
- **C++ Compiler**: g++ with OpenMP support (`-fopenmp`)
- **GPU Support**: NVIDIA GPU + CUDA Toolkit (`nvcc`)
- **Shell Environment**: Bash (Linux, WSL, or Git Bash on Windows)
- If on Windows, ensure Visual Studio Build Tools are installed and properly configured
- For CUDA builds on Windows, you must provide the correct path to `cl.exe` via `-ccbin`
### Compilation Examples
#### Dijkstra (OpenMP)
```bash
g++ ./src/dijkstra/dijkstra_openmp.cpp -o dijkstra_openmp -fopenmp -std=c++17
./dijkstra_openmp
```
#### Bellman-Ford (OpenMP)
```bash
g++ ./src/bellman_ford/bellman_ford_openmp.cpp -o bellman_ford_openmp -fopenmp -std=c++17
./bellman_ford_openmp
```
#### Bellman-Ford (CUDA)
```bash
nvcc ./src/bellman_ford/bellman_ford_cuda.cu -o bellman_ford_cuda -ccbin "C:/Path/To/cl.exe/Folder"
./bellman_ford_cuda
```
#### Floyd-Warshall (OpenMP)
```bash
g++ ./src/floyd_warshall/floyd_warshall_openmp.cpp -o floyd_warshall_openmp -fopenmp -std=c++17
./floyd_warshall_openmp
```
#### Floyd-Warshall (CUDA)
```bash
nvcc ./src/floyd_warshall/floyd_warshall_cuda.cu -o floyd_warshall_cuda -ccbin "C:/Path/To/cl.exe/Folder"
./floyd_warshall_cuda
```
---
## Dataset Information
- **USA-road-d_NY.txt**: New York road network from the [DIMACS Challenge Dataset](http://users.diag.uniroma1.it/challenge9/download.shtml)
- **Synthetic graphs**: Randomly generated with controlled node/edge parameters (see `assets/`)
---
## Results
Results are summarized in the following files:
- `results/results.pdf`: Performance graphs and discussion
- `results/results.xlsx`: Raw benchmarking data (execution time, speed-up, etc.)
Performance was evaluated on:
- Execution time (serial vs. OpenMP vs. CUDA)
- Varying graph sizes (sparse to dense)
- Real vs. synthetic graphs
---
## Documentation
- `report.pdf`: Complete technical report with algorithm details and experimental results
- `presentation.pptx`: Final presentation slides
---
## Authors
- **Aaron John Sabu** – [@aaronjohnsabu1999](https://github.com/aaronjohnsabu1999)
- **Athul CD** – [@athulcd](https://github.com/athulcd)
- **Ayan Sharma** – [@ayan-2004](https://github.com/ayan-2004)
- **Vaibhav Malviya** – [@Vaibhav110](https://github.com/Vaibhav110)
---
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.