Skip to content

快速入门

5 分钟内快速上手 Mini-ImagePipe。

最简示例

cpp
#include "pipeline.h"
#include "operators/gaussian_blur.h"

int main() {
    using namespace mini_image_pipe;
    
    // 创建流水线
    Pipeline pipeline;
    
    // 添加算子
    auto blur = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
    int node = pipeline.addOperator("Blur", blur);
    
    // 执行 (假设已有输入数据)
    // pipeline.setInput(node, d_input, width, height, channels);
    // pipeline.execute();
    // void* output = pipeline.getOutput(node);
    
    return 0;
}

完整流水线示例

cpp
#include "pipeline.h"
#include "operators/resize.h"
#include "operators/color_convert.h"
#include "operators/gaussian_blur.h"
#include "operators/sobel.h"
#include <iostream>

using namespace mini_image_pipe;

int main() {
    // 1. 配置流水线
    PipelineConfig config;
    config.numStreams = 4;
    Pipeline pipeline(config);

    // 2. 创建算子
    auto resize = std::make_shared<ResizeOperator>(320, 240);
    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>();

    // 3. 构建 DAG
    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);  // Resize → Gray
    pipeline.connect(n2, n3);  // Gray → Blur
    pipeline.connect(n3, n4);  // Blur → Sobel

    // 4. 准备输入 (示例: 分配设备内存)
    int width = 1920, height = 1080, channels = 3;
    size_t inputSize = width * height * channels * sizeof(uint8_t);
    
    void* d_input;
    cudaMalloc(&d_input, inputSize);
    
    // 5. 执行
    pipeline.setInput(n1, d_input, width, height, channels);
    
    cudaError_t err = pipeline.execute();
    if (err != cudaSuccess) {
        std::cerr << "流水线执行失败: " << cudaGetErrorString(err) << std::endl;
        return 1;
    }

    // 6. 获取输出
    void* output = pipeline.getOutput(n4);
    std::cout << "流水线执行成功!" << std::endl;

    // 清理
    cudaFree(d_input);
    return 0;
}

构建和运行

bash
# 构建
cmake --preset release
cmake --build --preset release

# 运行程序
./build/your_program

下一步

基于 MIT 许可证发布