Halide (programmeringsspråk)

Halid
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