# kartikjaat970/gpu-image-engine architecture

> Architecture diagram of the GitHub repository kartikjaat970/gpu-image-engine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kartikjaat970/gpu-image-engine
- Repository: https://github.com/kartikjaat970/gpu-image-engine

## Overview

GPU Image Engine loads an image, computes grayscale versions on both CPU and GPU, and exports each as a JPEG. The sampled entry point confirms the load, both processing calls, and saves; the CPU implementation is sampled. The README documents CUDA kernels and host/device transfers, but their implementation and wiring were not excerpted, so those internal GPU relationships are left unasserted.

Main entry points: [`src/main.cpp`](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/main.cpp) (Image runner), [`src/cpu/grayscale_cpu.cpp`](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cpu/grayscale_cpu.cpp) (CPU grayscale), [`src/cuda/grayscale_kernel.cu`](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cuda/grayscale_kernel.cu) (GPU grayscale)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Image workflow"]
  node_runner["Image runner<br/>[main.cpp]"]
  node_input["Input image"]
  node_opencv["OpenCV I/O"]
  node_outputs["JPEG outputs"]
end

subgraph group_cpu["CPU processing"]
  node_cpu_gray["CPU grayscale<br/>[grayscale_cpu.cpp]"]
end

subgraph group_cuda["CUDA processing"]
  node_gpu_gray["GPU grayscale"]
  node_transfer["Host-device transfer"]
end

node_user(("User"))

node_user -->|"runs"| node_runner
node_input -->|"loads"| node_runner
node_runner -->|"reads image"| node_opencv
node_runner -->|"calls CPU"| node_cpu_gray
node_runner -.->|"calls GPU"| node_gpu_gray
node_runner -->|"writes images"| node_opencv
node_runner -->|"exports JPEGs"| node_outputs

click node_runner "https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/main.cpp"
click node_cpu_gray "https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cpu/grayscale_cpu.cpp"
click node_gpu_gray "https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cuda/grayscale_kernel.cu"
click node_transfer "https://github.com/kartikjaat970/gpu-image-engine/tree/main/src/cuda"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_runner,node_input,node_opencv,node_outputs,node_user toneBlue
class node_cpu_gray toneAmber
class node_gpu_gray,node_transfer toneMint
```

## Components

### Image workflow

- [Image runner](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/main.cpp): `src/main.cpp`
- **Input image**
- **OpenCV I/O**
- **JPEG outputs**

### CPU processing

- [CPU grayscale](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cpu/grayscale_cpu.cpp): `src/cpu/grayscale_cpu.cpp`

### CUDA processing

- [GPU grayscale](https://github.com/kartikjaat970/gpu-image-engine/blob/main/src/cuda/grayscale_kernel.cu): `src/cuda/grayscale_kernel.cu`
- [Host-device transfer](https://github.com/kartikjaat970/gpu-image-engine/tree/main/src/cuda): `src/cuda`

### Other components

- **User**

## Connections

- User → Image runner: runs (evidence: `README.md`)
- Input image → Image runner: loads (evidence: `src/main.cpp`)
- Image runner → OpenCV I/O: reads image (evidence: `src/main.cpp`)
- Image runner → CPU grayscale: calls CPU (evidence: `src/main.cpp`)
- Image runner → GPU grayscale: calls GPU
- Image runner → OpenCV I/O: writes images (evidence: `src/main.cpp`)
- Image runner → JPEG outputs: exports JPEGs (evidence: `src/main.cpp`)
