Halide (programmeringsspråk)
Paradigm | funktionell , parallell |
---|---|
Designad av | Jonathan Ragan-Kelley och Andrew Adams |
Utvecklare | MIT , (med hjälp från Stanford , Google och Adobe ) |
Dök först upp | 2012 |
Maskinskrivningsdisciplin | statisk |
Implementeringsspråk | C++ |
OS | Mac OS, vanliga Linux-distributioner, Windows |
Hemsida | http://halide-lang.org/ |
Halide är ett datorprogrammeringsspråk designat för att skriva digital bildbehandlingskod som drar fördel av minneslokalitet , vektoriserade beräkningar och flerkärniga processorer och GPU :er . Halide är implementerat som ett internt domänspecifikt språk (DSL) i C++ .
Språk
Den huvudsakliga innovationen Halide ger är separationen av algoritmen som implementeras från dess exekveringsschema , dvs kod som specificerar slingkapsling , parallellisering , slingupprullning och vektorinstruktion . Dessa två är vanligtvis sammanflätade och experimenterande med att ändra schemat kräver att programmeraren skriver om stora delar av algoritmen med varje förändring. Med Halide kräver ändring av schemat inga ändringar av algoritmen och detta gör att programmeraren kan experimentera med att schemalägga och hitta den mest effektiva.
Exempel på källkod
Följande funktion definierar och ställer in schemat för ett 3×3- boxfilter definierat som en serie av två 3×1-pass:
Func blur_3x3 ( Func input ) { Func blur_x , blur_y ; Var x , y , xi , yi ; // Algoritmen - ingen lagring eller ordning blur_x ( x , y ) = ( ingång ( x -1 , y ) + ingång ( x , y ) + ingång ( x + 1 , y )) / 3 ; blur_y ( x , y ) = ( blur_x ( x , y -1 ) + blur_x ( x , y ) + blur_x ( x , y + 1 )) / 3 ; // Schemat - definierar ordning, lokalitet; innebär lagring blur_y . bricka ( x , y , xi , yi , 256 , 32 ) . vektorisera ( xi , 8 ). parallell ( y ); blur_x . compute_at ( blur_y , x ). vektorisera ( x , 8 ); returnera blur_y ; }
Använda sig av
Google använde Halide och TensorFlow för sin Pixel 2 Pixel Visual Core . Adobe Photoshop använder också Halide. Både Google och Adobe har varit involverade i Halide-forskning.
Se även
externa länkar
- http://halide-lang.org/
- Frikoppling av algoritmer från scheman för enkel optimering av bildbehandlingspipelines
- "Halide: Ett språk och en kompilator för att optimera parallellism, lokalitet och omräkning i bildbehandlingspipelines" ( PDF) . (8 259 kB)