Loading AI tools
linguaggio di programmazione Da Wikipedia, l'enciclopedia libera
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 | |
---|---|
Autore | MIT, Università di Stanford, Google, Adobe |
Data di origine | 2012 |
Ultima versione | 18.0.0 (17 luglio 2024) |
Utilizzo | elaborazione digitale delle immagini, elaborazione numerica dei segnali |
Paradigmi | programmazione funzionale, programmazione parallela |
Tipizzazione | statica |
Implementazione di riferimento | |
Implementazione | Tramite un'API in C++ |
Sistema operativo | multipiattaforma |
Licenza | MIT |
Sito web | halide-lang.org/ |
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]
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'algoritmo
// 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;
}
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]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.