Halide (programming language)
Computer programming language designed for digital image processing
From Wikipedia, the free encyclopedia
Halide is a computer programming language designed for writing digital image processing code that takes advantage of memory locality, vectorized computation and multi-core central processing units (CPU) and graphics processing units (GPU). Halide is implemented as an internal domain-specific language (DSL) in C++. Halide was announced by MIT in 2012[1] and released in 2013.[2]
Andrew Adams
| Halide | |
|---|---|
| Paradigms | functional, parallel |
| Designed by | Jonathan Ragan-Kelley Andrew Adams |
| Developer | MIT, (with help from Stanford, Google, Adobe) |
| First appeared | 2012 |
| Typing discipline | static |
| Implementation language | C++ |
| OS | macOS, mainstream Linux distributions, Windows |
| License | MIT License |
| Website | halide-lang |
Purpose
The main innovation Halide brings is the separation of the algorithm being implemented from its execution schedule, i.e. code specifying the loop nesting, parallelization, loop unrolling and vector instruction.[3] These two are usually interleaved together and experimenting with changing the schedule requires the programmer to rewrite large portions of the algorithm with every change.[4] With Halide, changing the schedule does not require any changes to the algorithm, allowing the programmer to experiment with scheduling.[5][6]
Scheduled blur function
The following function defines and sets the schedule for a 3×3 box filter defined as a series of two 3×1 passes, allowing the blur algorithm to remain independent of the execution schedule.[7]
Func blur_3x3(Func input) {
Func blur_x, blur_y;
Var x, y, xi, yi;
// The algorithm - no storage or order
blur_x(x, y) = (input(x-1, y) + input(x, y) + input(x+1, y))/3;
blur_y(x, y) = (blur_x(x, y-1) + blur_x(x, y) + blur_x(x, y+1))/3;
// The schedule - defines order, locality; implies storage
blur_y.tile(x, y, xi, yi, 256, 32)
.vectorize(xi, 8).parallel(y);
blur_x.compute_at(blur_y, x).vectorize(x, 8);
return blur_y;
}
Uses and development
Halide was developed primarily at MIT's CSAIL lab. Both Google and Adobe have been involved in Halide research.[5] Google uses Halide in Pixel 2's Pixel Visual Core.[8][7] Adobe Photoshop also uses Halide.[9]