Calcul intensif sur GPU - Computer Science and Management Group
Transcription
Calcul intensif sur GPU - Computer Science and Management Group
Calcul intensif sur GPU: exemples en traitement d’images, en bioinformatique et en télécommunication Sidi Ahmed Mahmoudi, Sébastien Frémal, Michel Bagein, Pierre Manneback Université de Mons, Faculté Polytechnique Service d’nformatique 20, Place du Parc 7000 Mons, Belgique Email: {Sidi.Mahmoudi, Sebastien.Fremal, Michel.Bagein, Pierre.Manneback}@umons.ac.be Résumé – Les Processeurs Graphiques ou GPUs sont devenus en quelques années des outils puissants pour le calcul intensif massivement parallèle. On les retrouve actuellement exploités par exemple pour des applications en traitement multimédia, en modélisation numérique ou en bioinformatique. Leurs avantages sont un coût modique, une accélération de traitement et une baisse de consommation énergétique par rapport à une puissance CPU équivalente. Nous proposons dans cette contribution d’exploiter les GPUs pour améliorer les performances de méthodes de traitement d’images ainsi que celles d’applications en bioinformatique et en télécommunications. Nous proposons aussi une implémentation hybride de méthodes de traitement d’images, basée sur l’exploitation de l’intégralité des ressources hétérogènes de calcul à disposition (multiCPU/multi-GPU). Mots Clés – GPU, multicoeur hétérogène, traitement d’images, agglomération, télécommunication I. I NTRODUCTION Ces dernières années, l’accélération de performances des processeurs centraux (CPU) s’est retrouvée plafonnée, pour des raisons thermiques, à environ 4 GHz. Cette limitation a été contournée par un changement des architectures internes des processeurs en multipliant des unités de calcul intégrées dans les processeurs. L’objectif de ces nouvelles architectures est de multiplier le nombre d’unités de traitement (coeurs) sur la mémoire centrale (RAM CPU), permettant ainsi de faire tourner simultanément plusieurs applications indépendantes. Les processeurs graphiques (GPU), qui équipent les ordinateurs personnels, sont dévolus aux traitements spécialisés de rendus d’images 2D/3D, des applications graphiques ainsi que des jeux vidéo. Spécialisés pour des traitements synchrones de grosses quantités de données, les GPUs possèdent nativement une structure de coeurs massivement parallèle (jusqu’à 3840) et offrent des puissances brutes de calcul largement supérieures aux CPUs. A la différence des CPUs multi-coeurs, les coeurs des GPUs fonctionnent de manière synchrone en appliquant simultanément la même opération sur des données multiples (SIMD) dans leur propre espace mémoire (RAM-GPU). Une tendance est actuellement de proposer la convergence des ces deux types d’unités de calcul, avec la propsition de processeurs accélérés (APU), combinant CPU et GPU sur la même puce et partageant le même espace mémoire [1]. Avec l’ouverture des interfaces de programmation (API) des GPUs, de nombreux chercheurs ont entrepris de les exploiter pour booster les traitements, habituellement destinés aux CPUs. Les calculs peuvent donc être portés sur GPU, mais le mode de fonctionnement SIMD de ces derniers impose la nécessité d’une grande quantité de données en entrée. En effet, ces processeurs tirent leurs forces du recouvrement des threads inactifs (en attente de données à distance du coeur) par l’exécution d’autres threads actifs (dont les données sont disponibles). S’il n’y a pas suffisamment de données, les threads seront en nombre insuffisant pour assurer un fonctionnement à plein régime du processeur graphique, et celui-ci verra ses performances se dégrader [2]. Les algorithmes de visualisation et de traitement d’images sont à la fois de gros consommateurs de puissance de calcul et de mémoire. Au-delà du rendu 2D/3D, la majorité de ces algorithmes contiennent des phases qui consistent en des calculs similaires entre les pixels de l’image ce qui se prête bien à une parallélisation sur GPU. Dans cette catégorie, Yang et al. ont mis en oeuvre plusieurs algorithmes classiques de traitement d’images sur GPU avec CUDA [3]. On trouve aussi dans le projet OpenVIDIA [4] une collection d’implémentations d’algorithmes de vision par ordinateur sur des processeurs graphiques, utilisant OpenGL [5], Cg [6] et CUDA [7]. Luo et al. ont proposé une implémentation GPU de la méthode d’extraction de contours [8] basée sur le détecteur de Canny [9]. Il existe aussi des implémentations sur GPU dédiées au monde médical, permettant notamment le calcul du rendu d’images volumineuses [10], [11], ainsi que des reconstructions d’images IRM [12]. Dans le domaine de la bioinformatique, les GPUs sont aussi prisés pour le traitement des séquences ADN. Avec quelques milliards de nucléotides (3 milliards de paires pour l’homme et jusqu’à 150 milliards pour la Paris Japonica [13]), les GPUs permettent de réduire significativement les temps de traitements algorithmiques de ces chaı̂nes, notamment pour les tris de très gros volumes de données (tris bitonique et par base) [14]. Le domaine des télécommunications utilise par exemple les GPUs pour accélérer le calcul de la dispersion obtenue dans le cadre des entrelaceurs de bits par blocs [15]. Ici aussi les données ne manquent pas : une matrice d’entrée de taille MxN offre un domaine de M N solutions à explorer, soit 135012 (3, 66 × 1037 ) dans le cadre de nos recherches. Par ailleurs, il existe différents travaux pour l’exploitation de plateformes multi-coeurs et hétérogènes. Ayguadé et al. ont proposé un modèle de programmation flexible sur plateformes multi-coeurs [16]. StarPU [17] offre un support exécutif unifié pour les architectures multi-coeurs hétérogènes (CPUs et GPUs), permettant de concevoir des stratégies d’ordonnancement efficaces. Notre contribution porte sur le développement d’approches efficaces non seulement pour la parallélisation d’algorithmes de traitement d’images, mais aussi sur l’adaptation de ces algorithmes pour exploiter au mieux la puissance de calcul des nouvelles architectures parallèles hétérogènes. Nous contribuons ainsi à la mise en évidence de l’efficacité de l’agglomération des données en temps que technique d’optimisation, cette méthode permettant de maximiser l’exploitation de la mémoire GPU et d’en améliorer par conséquent les performances. La contribution est organisée comme suit : la deuxième section décrit l’utilisation du GPU en traitement d’images, en proposant un modèle basé sur CUDA et OpenGL, et en décrivant l’implémentation GPU de méthodes de détection des coins et contours. La troisième section présente une méthode d’agglomération de données pour processeurs graphiques, avec des applications dans les domaines des télécommunications et de la bioinformatique. La quatrième section expose l’exploitation des architectures hétérogènes (multi-CPU/multi-GPU) pour améliorer les performances des applications intensives en calcul, et en particulier des méthodes de traitement d’ensemble d’images volumineuses. Finalement, la dernière section est consacrée à la conclusion et aux perspectives. II. T RAITEMENT D ’ IMAGES SUR GPU Les algorithmes de traitement, et en particulier les méthodes d’extraction des caractéristiques (coins, contours) représentent un excellent champ d’applications pour l’accélération sur GPU, puisque la majorité de ces algorithmes disposent de sections de traitements identiques sur les pixels. Nous proposons dans cette section un modèle de traitement d’images sur GPU, ainsi que les implémentations GPU des méthodes de détection des coins et contours basées sur ce modèle. Cette section est donc présentée en trois parties: la première partie décrit notre modèle proposé pour le traitement d’images sur GPU. La deuxième partie décrit l’implémentation GPU de la méthode de détection des coins basée sur le détecteur de Harris [18]. La troisième partie présente l’implémentation GPU de l’approche de détection des contours basée sur le principe de Deriche utilisant les critères de Canny [19]. A. Modèle proposé pour le traitement d’images sur GPU Nous proposons dans ce paragraphe un modèle de traitement d’images sur GPU, permettant le chargement, le traitement et l’affichage d’images sur processeurs graphiques. Notre modèle s’appuie sur CUDA pour les traitements parallèles et OpenGL pour la visualisation des résultats, ce qui permet de réduire les coûts de transfert de données entre la mémoire CPU et la mémoire GPU. Ce modèle repose sur quatre étapes principales (Fig. 1) 1) Chargement des images d’entrée: Le transfert des images d’entrée depuis la mémoire CPU vers la mémoire GPU permet de les traiter sur GPU par la suite. 2) Allocation des threads: Après chargement de l’image en mémoire GPU, le nombre de threads de la grille de calcul GPU est déterminé de telle sorte que chaque thread puisse effectuer son traitement sur un ou plusieurs pixels groupés. La sélection du nombre de threads dépend du nombre de pixels de l’image. 3) Traitement parallèle avec CUDA: Les fonctions CUDA (kernels) sont exécutées N fois en utilisant les N threads créés lors de l’étape précédente. 4) Présentation des résultats: A l’issue des traitements, les résultats peuvent être présentés en utilisant deux scénarios différents: • Visualisation OpenGL: L’affichage des images de sortie avec la bibliothèque OpenGL permet une visualisation rapide grâce à la réutilisation de zones mémoires allouées par CUDA dans les fonctions OpenGL. En effet, la compatibilité d’OpenGL avec CUDA permet ainsi de supprimer des transferts de données. Ce scénario est utile lorsqu’on applique le traitement GPU sur une seule image. • Transfert des résultats: La visualisation sous OpenGL n’est plus requise lorsque l’on désire sauvegarder les images traitées. Dans ce cas, le transfert des images résultats depuis la mémoire GPU vers la mémoire CPU est indispensable. Le temps de transfert de ces images représente un coût supplémentaire pour l’application. B. Extraction des points d’intérêts dans une image sur GPU Les méthodes d’extraction des points d’intérêts représentent des étapes préliminaires à de nombreux processus de vision par ordinateur. Ce paragraphe présente notre implémentation GPU du détecteur de coins utilisant la technique décrite par Bouguet [20] et basée sur le principe de Harris. Cette méthode est connue pour son efficacité, due à sa forte invariance à la rotation, à l’échelle, à la luminosité et au bruit de l’image. Sur base du modèle décrit dans la section II.A, nous avons parallélisé cette méthode en implémentant chacune de ses cinq étapes sur GPU (Fig. 2): 2) Fig. 1. Modèle de traitement d’images sur GPU avec CUDA et OpenGL. 3) 4) 5) Fig. 2. Détection des points d’intérêts (coins) sur GPU de pixels de l’image. Chaque thread calcule les dérivées spatiales d’un pixel en utilisant les équations (1) et (2). Ensuite, le thread peut calculer le gradient spatial de chaque point de l’image en appliquant l’équation (3). Les valeurs des pixels voisins (gauche, droit, haut et bas) de chaque point sont chargées dans la mémoire partagée du GPU, puisque ces valeurs sont utilisées pour le calcul des dérivées spatiales. Cela permet d’accéder plus rapidement aux données. Calcul des valeurs propres de la matrice du gradient: Sur base du gradient calculé par l’équation (3), on calcule les valeurs propres de la matrice G pour chaque pixel. L’implémentation GPU de cette étape est effectuée par le calcul de ces valeurs en parallèle sur les pixels de l’image, en utilisant une grille de calcul GPU contenant un nombre de threads égal au nombre de points de l’image. Recherche de la valeur propre maximale: Une fois les valeurs propres calculées, on extrait la valeur propre maximale. Cette valeur est obtenue sur GPU en faisant appel à la librairie CUBLAS [21]. Suppression des petites valeurs propres: La recherche des petites valeurs propres est réalisée de telle sorte que chaque thread compare la valeur propre de son pixel correspondant à la valeur propre maximale. Si cette valeur est inférieure à 5% de la valeur maximale, ce pixel est exclu. Sélection des meilleures valeurs: La dernière étape permet d’extraire pour chaque zone de l’image le pixel ayant la plus grande valeur propre. Pour l’implémentation sur GPU, nous avons affecté à chaque thread GPU un groupe de pixels représentant une zone (10x10 pixels). Chaque thread permet d’extraire la valeur propre maximale dans une zone en utilisant toujours la libraire CUBLAS. Les pixels ayant ces valeurs extraites représentent ainsi les points d’intérêts. C. Détection des contours sur GPU 1) Calcul des dérivées et du gradient spatial: La première étape est le calcul de la matrice du gradient spatial G pour chaque pixel de l’image I, en utilisant l’équation (3). Cette matrice de 4 éléments (2x2) est calculée sur base des dérivées spatiales Ix , Iy calculées suivant les équations (1) et (2). Ix (x, y) = I(x + 1, y) − I(x − 1, y) 2 I(x, y + 1) − I(x, y − 1) 2 2 Ix Ix Iy G= Ix Iy Iy2 Iy (x, y) = (1) (2) (3) L’implémentation GPU est effectuée par un traitement parallèle des pixels, en utilisant une grille de calcul GPU contenant un nombre de threads égal au nombre Ce paragraphe présente l’implémentation GPU de la méthode de détection des contours basée sur la technique récursive de Deriche [19]. L’immunité au bruit de troncature et le nombre réduit d’opérations de cette approche la rendent très efficace au niveau de la qualité des contours extraits. Cependant, cette méthode est entravée par les coûts de calcul qui augmentent considérablement en fonction du nombre et de la taille des images utilisées. Cette technique est composée de quatre étapes principales (Fig. 3). Notons que l’étape du calcul des gradients applique un lissage gaussien récursif avant de filtrer l’image en utilisant les filtres de Sobel [9]. Toutefois, les étapes de calcul de la magnitude et de la direction du gradient, la suppression des non maxima, ainsi que le seuillage sont les mêmes que celles utilisées pour le filtre de Canny. Ces dernières étapes permettent de sélectionner les meilleurs contours sur base des magnitudes et directions des gradients calculés précédemment. L’implémentation GPU de cette méthode est décrite en détail dans [22]. Cette implémentation est essentiellement basée sur le modèle proposé dans la section III. Fig. 3. Détection des contours basée sur le principe de Deriche-Canny Des résultats expérimentaux ont été obtenus en utilisant des ensembles d’images (images médicales, images HD), montrant une accélération allant d’un facteur de 10 à 20 par rapport à une implémentation séquentielle sur CPU. La Table I montre la comparaison des temps de calcul entre les implémentations séquentielles (CPU) et parallèles (GPU) de la méthode regroupant la détection des coins ainsi que les contours, appliquées sur des images de différentes résolutions. Notons que les facteurs d’accélérations présentés dans la Table I augmentent considérablement en fonction de la taille des images utilisées. Ceci est interprété par l’exploitation de plus d’unités de calcul en parallèle sur GPU. Résolution d’image 512*512 1024*1024 1476*1680 3936*3936 Détection Coins + Contours (CPU: OpenCV) 75 ms 201 ms 543 ms 2 297 ms Détection Coins + Contours (CUDA + OpenGL) 6.86 ms 14.14 ms 32.87 ms 109.74 ms Accélération illustré dans cette section à l’aide de deux exemples : le tri de vecteurs à l’aide des algorithmes de tri par base (radix sort) et de tri fusion (merge sort), ainsi qu’une application du domaine des télécommunications qui calcule la valeur optimale du paramètre twist intervenant dans l’entrelacement des bits d’un message. Le tri de vecteur a été étudié dans le cadre d’une application de recherche de similitudes de chaı̂nes ADN/ARN en bioinformatique. L’algorithme passe une partie importante de son temps à effectuer des tris de petits vecteurs contenant de 70 à 2000 éléments. La parallélisation des opérations de tri sur GPU a été étudiée. Les résultats présentés dans cet article ont été obtenus avec le tri de la librairie Thrust [25], un tri conçu pour processeur graphique et très flexible au niveau des données d’entrée. Pour de faibles quantités de données, l’implémentation GPU est moins efficace que son équivalent sur CPU : un tableau de 500 éléments de 8 octets est trié 17,36 fois plus rapidement par un processeur central. L’agglomération des tâches de tri par concaténation des vecteurs d’entrée fournit une plus grande charge de travail au GPU. A partir de 2 à 3 vecteurs agglomérés, les résultats s’inversent au profit du GPU et permettent d’atteindre des accélérations de l’ordre de 15,6 fois plus rapide que le CPU (Fig. 4(a)). 10.93 14.21 16.51 20.93 TABLE I P ERFORMANCE DE D ÉTECTION DES COINS + CONTOURS SUR GPU (CUDA + O PEN GL) PAR RAPPORT AU CPU (O PEN CV) Notons que les implémentations CPU étaient effectuées avec la bibiothèque OpenCV [23], permettant le traitement d’image sur CPU. III. L’ AGGLOM ÉRATION SUR PROCESSEURS GRAPHIQUES L’efficacité des processeurs graphiques a été montrée dans le cas des algorithmes de type flux de données dans la section précédente, cette section l’illustrera dans le cas des algorithmes de type flux de contrôle. Les flux de contrôle impliquent une mise à disposition séquentielle des données. Le lancement du traitement pour chaque donnée individuelle entraı̂ne une sousutilisation des ressources du GPU et une dégradation des performances. L’agglomération des données permet de remédier à cet inconvénient. Le partitionnement et l’agglomération de tâches est un sujet qui a déjà été traité par Ian Foster [24] dans le but de diminuer les coûts engendrés par les communications entre les différentes tâches. L’agglomération des données d’entrée permet de fournir une quantité suffisamment importante de données (et donc de traitements) pour exploiter puissance des GPUs (meilleur remplissage). Ceci permet un recouvrement des tâches avec masquage optimal des temps d’attente du processeur graphique (latence des mémoires) et donc une amélioration des performances de ce dernier. Cela est (a) Tri par lot de taille croissante de vecteurs de 500 élements (b) Calcul de la dispersion par lot de taille croissante de vecteurs de 16000 élements Fig. 4. Présentation des temps obtenus avec les deux algorithmes exécutés sur processeurs centraux et graphiques en agglomérant les données La seconde application d’agglomération des données concerne le calcul de la valeur optimale du paramètre twist. Ce paramètre détermine la qualité de l’entrelacement de bits, une méthode permettant une meilleure récupération des erreurs altérant le message au cours d’une transmission numérique. Cet algorithme passe la majorité de son temps d’exécution à calculer la dispersion des erreurs dont la valeur est égale à la cardinalité de l’ensemble D des vecteurs de déplacement : D = {(∆x , ∆y ) ∈ Z 2 } ∆x = j − i, ∆y = π(j) − π(i) (0 ≤ i < j < T ) où π est la fonction d’entrelacement qui entrelace les bits en changeant leurs indices, T le nombre de bits constituant le message entrelacé, et i et j les indices des éléments au sein du message. Le calcul de la cardinalité de D, et donc de la dispersion, nécessite le comptage du nombre d’éléments distincts présents dans de nombreux vecteurs obtenus à partir des données d’entrée. La fonction de comptage qui prend la majorité du temps de calcul, elle a été portée sur GPU. Ici également, l’algorithme traitait les vecteurs un par un et la parallélisation sur processeur graphique dégradait ses performances, le processeur central étant 1,3 fois plus rapide pour compter le nombre d’éléments distincts d’un vecteur de 16000 éléments de 8 octets (Fig. 4(b)). En agglomérant les vecteurs, nous arrivons de nouveau à améliorer les temps d’exécution, le processeur graphique devenant 6,7 fois plus rapide que le processeur central. Pour les deux exemples présentés, l’agglomération a été effectuée en concaténant les vecteurs dans la mémoire et en y associant un identifiant aux données pour permettre de distinguer le vecteur auquel elles appartiennent. Les données, qui étaient au départ contenues dans des structures de 4 octets, ont été placées dans la partie basse (least significant bits) d’une structure de 8 octets avec l’identifiant qui occupe la partie haute (most significant bits). L’identifiant permet ainsi de conserver le regroupement des données au sein de leur vecteur d’origine dans le cadre du tri, et de différencier plus rapidement les données appartenant aux différents vecteurs dans le cadre du comptage d’éléments distincts. IV. V ERS DES MULTI -CPU/ MULTI -GPU Dans les sections II et III, nous avons présenté les implémentations GPU de méthodes de traitement d’images ainsi que de méthodes de manipulation de vecteurs. Ces implémentations ont permis d’accélérer considérablement les temps de calcul. Cependant, ces solutions peuvent être encore améliorées par l’exploitation simultanée des cœurs CPU et GPU multiples. Dans ce contexte, la librairie StarPU, développée à l’INRIA Bordeaux [17], permet d’offrir un support exécutif unifié pour exploiter les architectures multicœurs hétérogènes, tout en s’affranchissant des difficultés liées à la gestion des transferts de données. L’idée principale est de décomposer le traitement en une codelet qui défini le traitement pour des unités de calcul différentes : CPU, GPU et/ou processeur CELL. StarPU se chargera de lancer les tâches d’exécution sur les données unitaires avec la codelet. Le placement des tâches est défini par les versions d’implémentations de la codelet, les disponibilités des unités de calcul et un ordonnanceur de tâches efficace. Ainsi, le traitement global des données est réalisé simultanément sur le(s) CPU(s) et le(s) GPU(s). Si nécessaire, StarPU gère les transferts de données entre les différentes mémoires des unités de calcul. StarPU propose plusieurs stratégies d’ordonnancement efficaces et offre en outre la possibilité d’en concevoir aisément de nouvelles. Cette section présente l’intérêt de l’exploitation des plateformes hétérogènes (multi-CPU/multi-GPU) en traitement d’images. Comme montré à la section II, le traitement d’images sur GPU est très performant pour une image individuelle, puisque l’image résultante peut être visualisée directement sur un moniteur connecté à la carte graphique grâce à la bibliothèque OpenGL. Cependant, si l’on désire conserver les résultats pour une consultation ultérieure, il devient nécessaire de transférer les données de la mémoire graphique vers la mémoire centrale. Ces transferts deviennent très coûteux lors de l’utilisation de grandes bases d’images volumineuses. Nous proposons une implémentation hybride de ces méthodes permettant une exploitation de l’intégralité des ressources hétérogènes de calcul, en utilisant le support StarPU. Cette implémentation est décrite en trois étapes: 1) Chargement des images d’entrée: La première étape est le chargement des images d’entrée dans des files d’attente de telle sorte que StarPU puisse appliquer les traitements à partir de ces files. 2) Traitement hétérogènes d’images avec StarPU: Une fois les images chargées, le traitement hétérogène est confié à StarPU qui lance les tâches à partir des fonctions décrites dans les sections précédentes en versions CPU et GPU. Dans notre cas, toutes les tâches StarPU sont crées et lancées (chaque tâche traite une image). L’ordonnanceur de StarPU distribue les tâches sur les différentes unités de traitement. 3) Mise à jour et récupération des résultats: Lorsque toutes les tâches StarPU sont terminées, les résultats des traitements sur GPU doivent être rapatriés dans les tampons. La mise à jour est assurée par une fonction spécifique de StarPU. La figure 5.a montre la comparaison des temps de calcul entre les implémentations séquentielles (CPU simple cœur), parallèles (traitement uniquement en version GPU) et hybrides de la méthode regroupant la détection des coins ainsi que des contours, appliquée sur un ensemble de 200 images. La figure 5.b montre les accélérations obtenues grâce à ces implémentations. Les accélérations obtenues sont dues à deux facteurs principaux : • Le premier facteur est l’exploitation des cœurs GPU permettant d’appliquer des traitements parallèles à l’intérieur des images, tels que décrit en section II.A. • Le second facteur est l’exploitation simultanée des CPUs et GPUs permettant d’appliquer le traitement parallèle des images de telle sorte que chaque cœur CPU ou GPU traite un sous-ensemble d’images. (séquentielles, parallèles, hybrides) à appliquer, selon la nature des médias à traiter. Par ailleurs, dans le cadre des applications de calcul générique à petits ensembles de données, si les modifications propres à l’algorithme ne peuvent être automatisées, une perspective de notre travail est d’élaborer un outil qui permet d’agglomérer complètement et automatiquement les données, libérant ainsi le programmeur de ce travail, et de créer des tâches de taille optimum pour une exécution dans un environnement hétérogène. R EMERCIEMENT (a) Temps de détection hybride des coins + contours Les auteurs tiennent à remercier : • La Communauté Française de Belgique, au travers du soutien du projet Arc-OLIMP (Optimization for Live Interaction Multimedia Processing), convention AUWB2008-12. • La Région Wallonne et de le Fond Européen de Développement Régional (FEDER), au travers du soutien au projet UMONS/Recherche TIC 1, Portefeuille TIC, Objectif Convergence, 2008-11. • La Région Wallonne, au travers du soutien du projet PSOPP (Porting Software on Parallel Processors ), convention 1017139, 2011-12. R EFERENCES (b) Taux d’accélération de détection des coins + contours Fig. 5. Performances de détection des coins + contours sur architectures hétérogènes (multi-CPU/multi-GPU) V. C ONCLUSION Ce travail montre l’intérêt de l’exploitation des architectures parallèles (GPU) et hétérogènes (multi-CPU/multi-GPU) en traitement d’images et en calcul intensif. Les résultats expérimentaux montrent des gains allant d’un facteur de 6 à 20 par rapport à une implémentation classique sur CPU. Ces gains sont dus essentiellement à trois facteurs : • Une parallélisation de bas niveau qui se retrouve dans le portage de l’application sur le GPU (traitements parallèles des pixels intra-image, des tris et du comptage des éléments distincts d’un tableau). • Une parallélisation de haut niveau (traitements parallèles inter-image) exploitant à la fois les GPUs et les CPUs, chaque cœur traitant un sous-ensemble d’images. • Un remplissage efficace du GPU grâce à l’agglomération des données permettant ainsi un meilleur recouvrement des temps d’inactivité et donc de meilleures performances Comme perspectives, nous envisageons de concevoir un modèle plus général pour le traitement d’objets multimédia (images et vidéos HD, etc.) sur plateformes parallèles et hétérogènes. Ce modèle devra choisir automatiquement les ressources à utiliser (CPU et/ou GPU) ainsi que les méthodes [1] AMD, “The future brought to you by amd introducing the amd apu family.” AMD FusionTM Family of APUs, 2011. [Online]. Available: http://sites.amd.com/us/fusion/apu/Pages/fusion.aspx/ [2] D. B. Kirk and W.-M. W. Hwu, in Programming Massively Parallel Processors - A Hands-on Approach, M. Kaufman, Ed. [3] Z. Yang, Y. Zhu, and Y. pu, “Parallel Image Processing Based on CUDA,” International Conference on Computer Science and Software Engineering. China, pp. 198–201, 2008. [4] J. Fung, S. Mann, and C. Aimone, “OpenVIDIA:Parallel gpu computer vision.” In Proc of ACM Multimedia, pp. 849–852, 2005. [5] OpenGL, “OpenGL Architecture Review Board: ARB vertex program. Revision 45.” 2004. [Online]. Available: http://oss.sgi.com/projects/ ogl-sample/registry/ [6] W. R. Mark, R. S. Glanville, K. Akeley, and M. J. Kilgard, “Cg: A system for programming graphics hardware in a C-like language,” ACM Transactions on Graphics 22, pp. 896–907, 2003. [7] NVIDIA, “NVIDIA CUDA,” 2007. [Online]. Available: http://www. nvidia.com/cuda. [8] Y. Luo and R. Duraiswani, “Canny Edge Detection on NVIDIA CUDA,” Proceedings of the Workshop on Computer Vision on GPUS, CVPR, 2008. [9] J. Canny, “A computational approach to edge detection,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 8, no. 6, pp. 679–714, 1986. [10] Y. Heng and L. Gu, “GPU-based Volume Rendering for Medical Image Visualization,” Proceedings of the 2005 IEEE Engineering in Medicine and Biology 27th Annual Conference Shanghai, China, pp. 5145–5148, 2005. [11] M. Smelyanskiy, D. Holmes, J. Chhugani, A. Larson, and al, “Mapping high-fidelity volume rendering for medical imaging to CPU, GPU and many-core architectures,” IEEE Transactions on Visualization and Computer Graphics, 15(6), pp. 1563–1570, 2009. [12] T. Schiwietz, T. Chang, P. Speier, and R. Westermann, “MR image reconstruction using the GPU,” Image-Guided Procedures, and Display. Proceedings of the SPIE, pp. 646–655, 2006. [13] J. PELLICER, M. F. FAY, and I. J. LEITCH, “The largest eukaryotic genome of them all?” Botanical Journal of the Linnean Society, 164, pp. 10–15, 2010. [14] F. Sébastien, “Conception et mise en oeuvre d’algorithmes de sélection de ressources dans un environnement informatique hétérogène multiprocesseur,” Rapport de Travail de Fin d’Étude, 2010. [15] M. Boukesse, V. Moeyaert, S. Bette, and P. Mégret, “Analysis of the twisting parameters in the DVB-T2 column-twist interleaver,” Proceedings of the 17th IEEE Annual Symposium on Communications and Vehicular Technology in the Benelux, Enschede, The Netherlands, 2010. [16] E. Ayguadé, R. M. Badia, F. D. Igual, J. Labarta, R. Mayo, and E. S. Quintana-Orti, “An Extension of the StarSs Programming Model for Platforms with Multiple GPUs,” Proceedings of the 15th International Euro-Par Conference on Parallel Processing. Euro-Par’09, pp. 851–862, 2009. [17] C. Augonnet, S. Thibault, R. Namyst, and P.-A. Wacrenier, “StarPU: A Unified Platform for Task Scheduling on Heterogeneous Multicore Architectures,” In Concurrency and Computation: Practice and Experience, Euro-Par 2009, best papers issue, pp. 863–874, 2009. [18] C. Harris, “A combined corner and edge detector,” In Alvey Vision Conference, pp. 147–152, 1988. [19] R. Deriche, “Using Canny’s criteria to derive a recursively implemented optimal edge detector,” Internat. J. Vision,Boston, pp. 167–187, 1987. [20] J. Y. Bouguet, “Pyramidal Implementation of the Lucas Kanade Feature Tracker, Description of the algorithm,” Intel Corporation Microprocessor Research Labs. [21] NVIDIA, “CUBLAS,” 2007. [Online]. Available: http://developer. download.nvidia.com/compute/cuda/1 0/CUBLAS Library 1.0.pdf [22] S. A. Mahmoudi, F. Lecron, P. Manneback, B. Mohammed, and M. Saı̈d, “GPU-Based Segmentation of Cervical Vertebra in X-Ray Images,” Proceeding of the workshop HPCCE. In Conjunction with IEEE Cluster, pp. 1–8, 2010. [23] OpenCV, “OpenCV computer vision library.” [Online]. Available: http://opencv.willowgarage.com/wiki/ [24] I. Foster, “Designing and Building Parallel Programs : Concepts and Tools for Parallel Software Engineering,” Addison Wesley, 1995. [25] THRUST, “Thrust,” 2007. [Online]. Available: http://code.google.com/ p/thrust/