Halide, un nouveau langage de programmation pour le traitement d'images
Par des chercheurs du MIT

Le , par tarikbenmerar, Chroniqueur Actualités
Des chercheurs du laboratoire d'informatique et d'intelligence artificielle (CSAIL) du MIT ont présenté, dans un article publié à la conférence SIGGRAPH 2012, un nouveau langage de programmation, appelé Halide. Ce dernier a été conçu pour simplifier le développement d'applications de traitement d'images dans les systèmes informatiques modernes.



Communément appelé DSL (domain-specific language), ce type de langage de programmation se réserve un usage restreint à un domaine bien spécifique. Dans le cas Halide, l'objectif principal est d'accentuer les performances des algorithmes utilisés dans le traitement d'image, tels que la segmentation ou le filtrage laplacien.

Les chercheurs attestent que « les programmes Halide sont non seulement plus simples à lire, à écrire et à revoir que les programmes de traitement d'images écrits dans un langage conventionnel, mais du fait que Halide automatise les procédures d'optimisation de code qui pourrait prendre des heures à être faite manuellement, il est aussi considérablement plus rapide. ».

L'équipe a utilisé Halide pour réécrire divers algorithmes connus dans le traitement d'images. Ils ont conclu que leurs versions étaient d’un tiers plus courtes et six fois plus rapides dans le traitement. L'un des facteurs importants étant le processus d'optimisation hautement parallélisé.


Comparaison de codes C++ et Halide, aux performances équivalentes

Il faut dire que Halide est une sorte d'extension intégrée dans C++, il fonctionne sous les plateformes x86-64/SSE, ARM v7/NEON et CUDA.

Il prend en charge les unités SIMD, les multiples cœurs et les hiérarchies de mémoires complexes.

Le compilateur en question fonctionne sous les distributions Linux majeures telles qu’Ubuntu 12.04, ainsi que sous Mac OS X. L'équipe de recherche a même utilisé les versions 10.6 et 10.8 de l'OS d'Apple pour son travail.

Les chercheurs affirment que même si le portage sous Windows est techniquement faisable, ils n'ont pas essayé de le réaliser.

Site officiel de Halide : un langage open source
Article de recherche détaillé (PDF, 12 Mo)

Source : MIT

Et vous ?

Que pensez-vous de Halide ?
Comptez-vous l'utiliser ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de transgohan transgohan - Expert confirmé https://www.developpez.com
le 10/08/2012 à 13:48
Je ne connais pas grand chose dans le domaine de l'image, mais faut bien avouer que le code montré est cent fois plus simple à lire et à comprendre !
Avatar de vampirella vampirella - Membre éclairé https://www.developpez.com
le 10/08/2012 à 15:36
Intéressant en effet. Le langage semble un mix entre C++ et du langage MatLab.
Le véritable tour de force, plus que dans la ré-écriture simplifié des fonctions de traitement, se trouve être dans l'optimisation totale des ressources pour effectuer les calculs.

Ceci dit, je ne comprends pas ce que le compilateur produit : une librairie typée C++ qui peut être référencée ?
Avatar de gbdivers gbdivers - Inactif https://www.developpez.com
le 10/08/2012 à 20:56
Les DSEL non sont pas une spécificité du C++. Par contre, avec la méta programmation, il est possible d'avoir un coût supplémentaire à l’exécution de 0.
Voir boost proto ou la série d'article Expressive C++ de Eric Niebler sur http://cpp-next.com (en cours de traduction)
Avatar de kedare kedare - Membre expérimenté https://www.developpez.com
le 11/08/2012 à 21:35
Hmm mais il y a pas déjà le GLSL qui permet de faire ça avec un langage specialisé ?
Avatar de gbdivers gbdivers - Inactif https://www.developpez.com
le 12/08/2012 à 12:35
Citation Envoyé par kedare  Voir le message
Hmm mais il y a pas déjà le GLSL qui permet de faire ça avec un langage specialisé ?

Hum, non. Le GLSL (OpenGL Shading Language) est un langage pour écrire les shaders (le code exécuté sur les cartes graphiques). Donc on peut considérer le GLSL comme un DSL (langage spécialisé dans un domaine), mais bas niveau pour écrire de la 2D/3D.
Halide est un DSL permettant d'écrire des traitements haut niveau, avec une syntaxe simplifiée
Avatar de RonanK RonanK - Futur Membre du Club https://www.developpez.com
le 14/08/2012 à 9:16
Citation Envoyé par gbdivers  Voir le message
Hum, non. Le GLSL (OpenGL Shading Language) est un langage pour écrire les shaders (le code exécuté sur les cartes graphiques). Donc on peut considérer le GLSL comme un DSL (langage spécialisé dans un domaine), mais bas niveau pour écrire de la 2D/3D.
Halide est un DSL permettant d'écrire des traitements haut niveau, avec une syntaxe simplifiée

Justement, il ne me semble pas qu'il y ait des fonctions de haut niveau codées avec ce langage.

En GLSL :

Premier filtre (selon X) :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#version 130 
 
uniform sampler2D inputTexture; 
out vec4 outputTexture; 
 
void main() 
{ 
    ivec2 sz   = textureSize(inputTexture, 0); 
    ivec2 pos = ivec2( int(gl_TexCoord[0].s * sz.x), int(gl_TexCoord[0].t * sz.x) ); 
     
    vec4 a = texelFetch(inputTexture, pos + ivec2(-1, 0), 0); 
    vec4 b = texelFetch(inputTexture, pos, 0); 
    vec4 c = texelFetch(inputTexture, pos + ivec2(+1, 0), 0); 
 
    outputTexture = (a+b+c)/3.0; 
}
Second filtre (selon Y, après copier/coller et remplacement des 3 vecteurs de déplacement) :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#version 130 
 
uniform sampler2D inputTexture; 
out vec4 outputTexture; 
 
void main() 
{ 
    ivec2 sz   = textureSize(inputTexture, 0); 
    ivec2 pos = ivec2( int(gl_TexCoord[0].s * sz.x), int(gl_TexCoord[0].t * sz.x) ); 
     
    vec4 a = texelFetch(inputTexture, pos + ivec2(0, -1), 0); 
    vec4 b = texelFetch(inputTexture, pos, 0); 
    vec4 c = texelFetch(inputTexture, pos + ivec2(0, +1), 0); 
 
    outputTexture = (a+b+c)/3.0; 
}
Pas de scheduler à gérer et le driver fait plutôt bien son travail de ce côté. Les performances doivent être à peu près identiques.
Avatar de gbdivers gbdivers - Inactif https://www.developpez.com
le 14/08/2012 à 9:31
Citation Envoyé par RonanK  Voir le message
Justement, il ne me semble pas qu'il y ait des fonctions de haut niveau codées avec ce langage.


C'est ce que j'ai dit non ? GLSL est "bas niveau" (même si cette notion est discutable)

C'est Halide qui est "haut niveau" (tout au moins, qui ajoute une syntaxe plus haut niveau que la syntaxe de base du C++)
Avatar de math_lab math_lab - Membre éclairé https://www.developpez.com
le 14/08/2012 à 10:34
Et je suppose que Halide permet automatiquement de se configurer pour utiliser des GPUs ou des CPUs, alors qu'avec le GLSL, tu es coincé sur GPU. Ca rajoute une belle couche d'abstraction qui permet de déployer le programme sur plusieurs configs sans se casser la tète.
Avatar de RonanK RonanK - Futur Membre du Club https://www.developpez.com
le 14/08/2012 à 16:38
Citation Envoyé par gbdivers  Voir le message

C'est ce que j'ai dit non ? GLSL est "bas niveau" (même si cette notion est discutable)

C'est Halide qui est "haut niveau" (tout au moins, qui ajoute une syntaxe plus haut niveau que la syntaxe de base du C++)

Je me suis mal fait comprendre mais il ne me semble pas qu'il y ait des fonctions de très haut niveau avec Halide. On profite d'une abstraction sur les données mais, je n'ai pas trouvé de fonction du type :
Code : Sélectionner tout
1
2
3
4
5
 
resultImg = blur(img, [1 1 1]/3); // la fonction de flou selon X de l'exemple. 
// or 
resultImg = snakeSegmentation(image); 
// etc.
Cordialement,
Offres d'emploi IT
Concepteur développeur microsoft h/f
Sogeti - Rhône Alpes - Lyon, Grenoble
Directeur de projet adjoint (h/f)
PAC - Ile de France - Bezons (95870)
Stage WEB RTC & Responsive Design (H/F)
Atos Technology Services - Provence Alpes Côte d'Azur - Nice

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil