Halide

linguaggio di programmazione

Halide è un linguaggio di programmazione di dominio specifico (DSL) progettato per l'elaborazione digitale delle immagini e l'elaborazione numerica dei segnali che consente di sfruttare nativamente località della memoria, vettorizzazione, calcolo parallelo su CPU, DSP e GPU.[1]

Halide
linguaggio di programmazione
AutoreMIT, Università di Stanford, Google, Adobe
Data di origine2012
Ultima versione17.0.1 (20 febbraio 2024)
Utilizzoelaborazione digitale delle immagini, elaborazione numerica dei segnali
Paradigmiprogrammazione funzionale, programmazione parallela
Tipizzazionestatica
Implementazione di riferimento
ImplementazioneTramite un'API in C++
Sistema operativomultipiattaforma
LicenzaMIT
Sito webhalide-lang.org/

Caratteristiche modifica

Halide non è un linguaggio stand-alone e non ha una propria sintassi. Un programma in Halide (chiamato pipeline) è definito tramite un'API in C++. Le funzioni di tale API consentono di costruire dinamicamente una rappresentazione di una pipeline in memoria, che può essere compilata just-in-time (JIT) oppure compilata in un file oggetto.[2]

Caratteristica saliente di Halide è la separazione tra l'algoritmo, ovvero la logica del programma implementato, e lo scheduling usato per la sua esecuzione, ovvero il modo in cui le diverse parti sono eseguite in maniera sequenziale o parallela. Mentre in un linguaggio di programmazione tradizionale questi due aspetti sono interconnessi nella struttura del codice sorgente, Halide ha dei costrutti che permettono di specificare separatamente la logica dell'algoritmo e il suo scheduling di esecuzione.

Tra i vantaggi di questo approccio vi sono portabilità, in quanto un'unica implementazione dell'algoritmo può essere transpilata per diverse piattaforme hardware e API, semplificazione dell'implementazione, in quanto la cui logica di un algoritmo è implementata in maniera funzionale e non è mischiata con costrutti specifici alla sua struttura di esecuzione, e la possibilità di ottenere implementazioni ottimizzate in maniera automatica, senza richiedere conoscenza specifica dell'architettura e dell'API delle piattaforme di destinazione da parte del programmatore o della programmatrice.

Halide supporta nativamente l'emissione di codice oggetto per diverse architetture CPU, tra le quali x86-64, ARM, MIPS, Hexagon, PowerPC e RISC-V, e diverse interfacce GPU, tra le quali CUDA, OpenCL, shader OpenGL, Metal e DirectX. I sistemi operativi supportati includono Linux, Windows, macOS, Android e iOS.[3]

Esempio modifica

La seguente funzione implementa un box filter con un kernel di dimensione  , decomposto in due passi di dimensione   e   rispettivamente.

Halide::Func blur_3x3(Halide::Func input) {
  Halide::Func blur_x, blur_y;
  Halide::Var x, y, xi, yi;

  // Le seguenti due righe definiscono la logica dell'algoritmo
  // Ciascuna delle due righe definisce uno dei due passi
  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;

  // Il seguente codice definisce lo scheduling dell'algorimo
  // L'esecuzione prevede tiling, vettorizzazione lungo l'asse x, e esecuzione parallela lungo l'asse y
  blur_y.tile(x, y, xi, yi, 256, 32)
        .vectorize(xi, 8).parallel(y);
  blur_x.compute_at(blur_y, x).vectorize(x, 8);

  return blur_y;
}

Applicazioni modifica

Google ha usato Halide nell'implementazione della camera pipeline dei telefoni Google Pixel.[4] Adobe usa Halide nell'implementazione di Photoshop.[5] Google e Adobe hanno contribuito alla ricerca alla base di Halide.[6]

Note modifica

  1. ^ Halide - New Language For Image Processing, su i-programmer.info, 2012. URL consultato il 20 settembre 2013.
  2. ^ Halide documentation, su halide-lang.org.
  3. ^ Halide, su halide-lang.org.
  4. ^ Google and Intel cook AI chips, neural network exchanges – and more, su The Register, Situation Publishing.
  5. ^ Photoshop freezing at startup on Halide Bottlenecks, su community.adobe.com, 2020. URL consultato il 27 aprile 2020.
  6. ^ Learning to Optimize Halide with Tree Search and Random Programs (PDF), su halide-lang.org, 2019. URL consultato il 1º luglio 2019.

Collegamenti esterni modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica