English | 简体中文
Mini-ImagePipe is a lean CUDA image-processing runtime built around four core pieces: Pipeline,
TaskGraph, DAGScheduler, and MemoryManager. It keeps the project focused on the maintainable
core: DAG execution, multi-stream scheduling, pooled memory reuse, and a small set of built-in GPU
operators.
- CUDA-first runtime for GPU-native image processing
- DAG scheduling with cycle rejection and dependency-aware execution
- Multi-stream execution using CUDA streams and events
- Reusable memory pools for pinned and device allocations
- Small built-in operator set: Resize, ColorConvert, GaussianBlur, Sobel, MergeAverage
- Single documentation surface: VitePress on GitHub Pages
- Single changelog:
CHANGELOG.md
- Linux
- CMake 3.18+
- CUDA Toolkit 11.0+ with
nvcconPATH - C++17 compiler
- NVIDIA GPU with compute capability 7.0+
git clone https://github.com/AICL-Lab/mini-image-pipe.git
cd mini-image-pipe
cmake --preset release
cmake --build --preset release
./build/demo_pipeline
ctest --preset release# Debug
cmake --preset default
cmake --build --preset default
# Release
cmake --preset release
cmake --build --preset release
# Native GPU arch only
cmake --preset minimal
cmake --build --preset minimalIf CMake cannot find CUDA:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH#include "pipeline.h"
#include "operators/color_convert.h"
#include "operators/gaussian_blur.h"
#include "operators/resize.h"
#include "operators/sobel.h"
using namespace mini_image_pipe;
int main() {
Pipeline pipeline;
auto resize = std::make_shared<ResizeOperator>(320, 240, InterpolationMode::BILINEAR);
auto gray = std::make_shared<ColorConvertOperator>(ColorConversionType::RGB_TO_GRAY);
auto blur = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
auto sobel = std::make_shared<SobelOperator>();
int n1 = pipeline.addOperator("Resize", resize);
int n2 = pipeline.addOperator("Gray", gray);
int n3 = pipeline.addOperator("Blur", blur);
int n4 = pipeline.addOperator("Sobel", sobel);
pipeline.connect(n1, n2);
pipeline.connect(n2, n3);
pipeline.connect(n3, n4);
// Allocate CUDA input, call setInput(...), then execute().
return 0;
}See examples/demo_pipeline.cpp for the complete example.
| Operator | Role | Notes |
|---|---|---|
ResizeOperator |
Image scaling | Bilinear and nearest-neighbor |
ColorConvertOperator |
Color conversion | RGB/Gray/BGR/RGBA paths |
GaussianBlurOperator |
Blur | Separable filtering |
SobelOperator |
Edge detection | 3x3 Sobel kernels |
MergeAverageOperator |
Fan-in merge | Averages multiple upstream images |
mini-image-pipe/
├── include/
│ ├── operator.h
│ ├── pipeline.h
│ ├── scheduler.h
│ ├── task_graph.h
│ ├── memory_manager.h
│ ├── types.h
│ └── operators/
├── src/
│ ├── memory_manager.cu
│ ├── pipeline.cpp
│ ├── scheduler.cu
│ ├── task_graph.cpp
│ └── operators/
├── tests/
├── docs/
├── examples/demo_pipeline.cpp
└── CHANGELOG.md
- GitHub Pages: https://aicl-lab.github.io/mini-image-pipe/
- Architecture:
docs/architecture/ - Guide:
docs/guide/ - API reference:
docs/api/
GitHub Pages no longer publishes a separate changelog section. Release history lives only in the
repository root at CHANGELOG.md.
Contributions via issues and pull requests are welcome. See CONTRIBUTING.md for
build instructions and coding conventions.
Released under the MIT License.