免责申明:本文所用的材料来自于网络,仅供个人学习和交流之用。如果用作其他用途,那么请自行承担法律负责。
Halide是一种特定领域的编程语言(DSL),专门用于加速图像处理,当前已支持x86 SSE,ARM v7 NEON,CUDA,OpenCL等。Halide的主要特点在于分开算法描述和调度描述。一个算法的Halide算法描述不依赖于硬件,其调度描述使用并行化、向量化(SIMD指令)和处理本地化(block)等函数(为便于表述,本文使用了原语),通过这些原语的某种特定组合,使得算法描述可在选定的硬件计算平台上取得最佳调度,或者说高效地执行程序里的计算任务。
Halide程序的执行流程如下:
- C++代码的编写使用Halide提供的类和函数,如Halide :: Func、Halide :: Expr和Halide :: Var等。
- 用C++编译器生成目标文件。
- 链接到Halide的lib文件(libHalide.a),执行用Halide :: Func、Halide :: Expr、Halide :: Var等编写的代码。
- 首次执行Halide代码时,将动态启动Halide编译器,生成二进制代码,执行图像处理。现有的二进制代码用于第二和后续计算。
Halide编译器是用C++编写的程序,以lib文件(静态库)和头文件形式提供。当执行主程序时,Halide编译器会动态启动,另一种方法是静态地执行Halide代码(预先编译Halide代码)。
以放大/缩小图像尺寸的过程为例&#x