Halide (lenguaje de programación) - Halide (programming language)
Paradigma | funcional , paralelo |
---|---|
Diseñada por | Jonathan Ragan-Kelley y Andrew Adams |
Desarrollador | MIT , (con ayuda de Stanford , Google y Adobe ) |
Apareció por primera vez | 2012 |
Disciplina de mecanografía | estático |
Lenguaje de implementación | C ++ |
SO | Mac OS, distribuciones principales de Linux, Windows |
Sitio web | http://halide-lang.org/ |
Halide es un lenguaje de programación de computadoras diseñado para escribir código de procesamiento de imágenes digitales que aprovecha la ubicación de la memoria , el cálculo vectorizado y las CPU y GPU de múltiples núcleos . Halide se implementa como un lenguaje específico de dominio interno (DSL) en C ++ .
Idioma
La principal innovación que aporta Halide es la separación del algoritmo que se está implementando de su programa de ejecución , es decir, el código que especifica la anidación de bucles , la paralelización , el desenrollado de bucles y la instrucción vectorial . Estos dos generalmente están intercalados y experimentar con el cambio de horario requiere que el programador vuelva a escribir grandes porciones del algoritmo con cada cambio. Con Halide, cambiar la programación no requiere ningún cambio en el algoritmo y esto permite al programador experimentar con la programación y encontrar la más eficiente.
Código fuente de muestra
La siguiente función define y establece el horario para un filtro de caja de 3 × 3 definido como una serie de dos pases de 3 × 1:
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);
return blur_y;
}
Usar
Google usó Halide y TensorFlow para su Pixel 2 Pixel Visual Core . Adobe Photoshop también utiliza Halide. Tanto Google como Adobe han estado involucrados en la investigación de Halide.
Ver también
Referencias
enlaces externos
- http://halide-lang.org/
- Desacoplamiento de algoritmos de horarios para una fácil optimización de las canalizaciones de procesamiento de imágenes
- "Haluro: un lenguaje y compilador para optimizar el paralelismo, la localidad y la recomputación en las canalizaciones de procesamiento de imágenes" (PDF) . (8.259 KB)