Halide (programming language)

Last updated
Halide
Paradigms functional, parallel
Designed by Jonathan Ragan-Kelley
Andrew Adams
Developer MIT, (with help from Stanford, Google, Adobe)
First appeared2012;13 years ago (2012)
Typing discipline static
Implementation language C++
OS macOS, mainstream Linux distributions, Windows
License MIT License
Website halide-lang.org

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]

Contents

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]

Funcblur_3x3(Funcinput){Funcblur_x,blur_y;Varx,y,xi,yi;// The algorithm - no storage or orderblur_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 storageblur_y.tile(x,y,xi,yi,256,32).vectorize(xi,8).parallel(y);blur_x.compute_at(blur_y,x).vectorize(x,8);returnblur_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]

See also

References

  1. Hardesty, Larry (2012-08-02). "Writing graphics software gets much easier". MIT News | Massachusetts Institute of Technology. Retrieved 2025-06-30.
  2. Ragan-Kelley, Jonathan; Barnes, Connelly; Adams, Andrew; Paris, Sylvain; Durand, Frédo; Amarasinghe, Saman (2013-06-16). "Halide: A language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines" . Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation. PLDI '13. New York, NY, USA: Association for Computing Machinery. pp. 519–530. doi:10.1145/2491956.2462176. ISBN   978-1-4503-2014-6.
  3. Ragan-Kelley, Jonathan; Adams, Andrew; Sharlet, Dillon; Barnes, Connelly; Paris, Sylvain; Levoy, Marc; Amarasinghe, Saman; Durand, Frédo (2017-12-27). "Halide: decoupling algorithms from schedules for high-performance image processing". Commun. ACM. 61 (1): 106–115. doi:10.1145/3150211. ISSN   0001-0782.
  4. Hinkel, Lauren (2024-05-03). "Creating bespoke programming languages for efficient visual AI systems". MIT News | Massachusetts Institute of Technology. Retrieved 2025-06-30. Ragan-Kelley notes that programmers can opt for "very painstaking, very unproductive, and very unsafe low-level code," which could introduce bugs, or "more safe, more productive, higher-level programming interfaces," that lack the ability to make fine adjustments in a compiler about how the program is run, and usually deliver lower performance. So, his team is trying to find a middle ground. "We're trying to figure out how to provide control for the key issues that human performance engineers want to be able to control," says Ragan-Kelley, "so, we're trying to build a new class of languages that we call user-schedulable languages that give safer and higher-level handles to control what the compiler does or control how the program is optimized."
  5. 1 2 Adams, Andrew; Ma, Karima; Anderson, Luke; Baghdadi, Riyadh; Li, Tzu-Mao; Gharbi, Michaël; Steiner, Benoit; Johnson, Steven; Fatahalian, Kayvon; Durand, Frédo; Ragan-Kelley, Jonathan (2019-07-12). "Learning to optimize halide with tree search and random programs" . ACM Trans. Graph. 38 (4): 121:1–121:12. doi:10.1145/3306346.3322967. ISSN   0730-0301.
  6. Gottschlich, Justin (22 November 2019). "Machine Programming: What Lies Ahead?". Knowledge at Wharton. Retrieved 2025-06-30.
  7. 1 2 Hennessy, John L.; Patterson, David A. (2019). Computer architecture: a quantitative approach (6th ed.). Cambridge, MA: Morgan Kaufmann Publishers. p. 582. ISBN   978-0-12-811905-1.
  8. Quach, Katyanna (22 October 2017). "Google and Intel cook AI chips, neural network exchanges – and more". The Register . Situation Publishing.
  9. "Inside Halide, the open source language engineers use to make imaging tools faster". Adobe Research. Retrieved 2025-06-30.