请输入您要查询的百科知识:

 

词条 Halide (programming language)
释义

  1. Language

  2. Sample source code

  3. Use

  4. See also

  5. References

  6. External links

{{more citations needed|date=March 2018}}{{Infobox programming language
| name = Halide
| logo =
| caption =
| file_ext =
| paradigm = functional, parallel
| year = 2012
| designer = Jonathan Ragan-Kelley and Andrew Adams
| developer = MIT, (with help from Stanford and Adobe)
| latest_release_version =
| latest_release_date =
| latest_test_version =
| latest_test_date =
| typing = static
| implementations =
| dialects =
| influenced_by =
| influenced =
| programming_language = C++
| operating_system = Mac OS X (10.6 through 10.8), mainstream Linux distributions, Windows
| license =
| website = http://halide-lang.org/
| wikibooks =
}}

Halide is a computer programming language designed for writing digital image processing code that takes advantage of memory locality, vectorized computation and multi-core CPUs and GPUs.[1] Halide is implemented as an internal domain-specific language (DSL) in C++.

Language

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. 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. With Halide, changing the schedule does not require any changes to the algorithm and this allows the programmer to experiment with scheduling and finding the most efficient one.

Sample source code

The following function defines and sets the schedule for a 3×3 box filter defined as a series of two 3×1 passes:

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);

}

Use

Google used Halide and TensorFlow for its Pixel 2 Pixel Visual Core.[2]

See also

  • Cuneiform (programming language)
  • Algorithmic skeleton
  • Parallel programming model

References

1. ^{{cite web |url=http://www.i-programmer.info/news/192-photography-a-imaging/4588-halide-new-language-for-image-processing.html | title=Halide - New Language For Image Processing |year=2012 |accessdate=20 September 2013}}
2. ^{{cite web|url=https://www.theregister.co.uk/2017/10/22/ai_roundup/|title=Google and Intel cook AI chips, neural network exchanges – and more|publisher=Situation Publishing|website=The Register}}

External links

  • http://halide-lang.org/
  • Decoupling Algorithms from Schedules for Easy Optimization of Image Processing Pipelines
  • {{cite web|url= http://people.csail.mit.edu/jrk/halide-pldi13.pdf |title=Halide: A Language and Compiler for Optimizing Parallelism, Locality, and Recomputation in Image Processing Pipelines }} {{small|(8,259 KB)}}

3 : Image processing|Functional languages|Parallel computing

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/22 17:40:55