Halide学习笔记---Halide语言设计的初衷

Halide语言设计初衷

我们正处于一个数据密集的时代,4D广场相机、图形渲染、3D打印、图像传感器、高质量医学图像等,每天生产大量的图像数据,面对这样一个图像时代,急需要针对图像处理算法设计的高性能图像处理编程语言,在这样的需求下,Halide应运而生。
应用当前存在的编程工具编写高性能的图像处理程序需要牺牲可读性、可移植性和模块性。这可能是由于算法描述、数据存储和计算顺序杂糅在一起所致。Halide语言将算法描述与算法中数据存储与计算执行等调度方面的内容解耦合。从而算法的描述和性能的优化可以分开进行,可以在不改动算法的情况下对算法进行调优。
另一个方面需要回答的是:在同样的计算机下,从什么地方去挖掘和提升算法的计算性能?有如下的一个统计:
Halide学习笔记---Halide语言设计的初衷_第1张图片
从上图可以看出,算术逻辑单元(ALU)进行一次操作在能量和时间上的消耗都是最小的,然而数据之间的访问通信占用了计算花费的大部分时间和能耗。因此,在计算的过程中减少数据的移动是一个很好的优化方向。另一方面,随着摩尔定律的逐渐失效,当今已经进入多核时代,将计算任务拆分,送到多个核心中并行计算,同一时刻进行计算,成倍缩短计算时间。然而,最小的数据移动并不利于计算任务的并行,考虑到算数逻辑单元的操作相对于数据移动来说小一个甚至多个数量级,因此考虑牺牲一部分数据移动性,冗余一部分计算,通过数据移动最小、计算冗余性和并行度之间的折中来达到提高性能计算性能的目的。
Halide学习笔记---Halide语言设计的初衷_第2张图片

你可能感兴趣的:(HALIDE)