Halide (programming language)
Halide | |
---|---|
Paradigms | functional, parallel |
Designed by | Jonathan Ragan-Kelley Andrew Adams |
Developer | MIT, (with help from Stanford, Google, Adobe) |
First appeared | 2012; 13 years ago (2012) |
Typing discipline | static |
Implementation language | C++ |
OS | macOS, mainstream Linux distributions, Windows |
License | MIT License |
Website | halide-lang |
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]
Purpose
[edit ]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
[edit ]The following function defines and sets the schedule for a ×ばつ3 box filter defined as a series of two ×ばつ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 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); returnblur_y; }
Uses and development
[edit ]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
[edit ]References
[edit ]- ^ Hardesty, Larry (2012年08月02日). "Writing graphics software gets much easier". MIT News | Massachusetts Institute of Technology. Retrieved 2025年06月30日.
- ^ 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.
- ^ 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.
- ^ 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."
- ^ a b 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.
- ^ Gottschlich, Justin (22 November 2019). "Machine Programming: What Lies Ahead?". Knowledge at Wharton. Retrieved 2025年06月30日.
- ^ a b 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.
- ^ Quach, Katyanna (22 October 2017). "Google and Intel cook AI chips, neural network exchanges – and more". The Register . Situation Publishing.
- ^ "Inside Halide, the open source language engineers use to make imaging tools faster". Adobe Research. Retrieved 2025年06月30日.