目的:在现代机器上完成高性能的图像处理。
支持的CPU体系结构:x86,ARM,MIPS,Hexagon,PowerPC
支持的操作系统:Linux,Windows,macOS,Android,IOS,Qualcomm QuRT
GPU计算API:,CUDA, OpenCL, OpenGL,apple Metal,Microsoft Direct X 12
大致流程:用Halide::Var, Halide::Expr, Halide::Func类型的对象完成c++程序,然后调用Halide::Func::compile_to_file来生成对象文件和头文件。或者调用Halide::Func::realize即时编译(JIT)并即刻运行整套pipeline,这有利于测试小的程序。
明确定位:想对代码加速,又不想花太多精力在上面,那么Halide将是非常优秀的选择。唯一要做的就是把算法用halide重写一遍即可。而且Halide重写算法,和正常理解的完全一样,不需要拐弯抹角,这在图像处理中非常有用。
Halide重要的类:
1. 定义、调度、计算:Halide::Func, Halide::Stage, Halide::Var
2. 图像数据类型:Halide::Buffer
3. passing around and reusing halide expression: Halide::Expr
4. 表示标量和图像参数:Halide::Param, Halide::ImageParam
5. reduce or scatter over some domain: Halide::RDom
6. 返回多值:Halide::Tuple, Halide::Realization
大体是上述六种,可以再大致浏览下每个类中的方法详情,对每个类实现的功能,有个总体概念。
Halide编译产出很简洁,so仅有:libHalide.so, libauto_schedule.so, libgradient_autoscheduler.so, halide.cpython-37m-x86_64-linux-gnu.so, 缺点是编出来的libHalide.so有121MB左右,太重了,还要分析下halide运行时环境要多大。