EA2014 GPGPU: Difference between revisions

From air
Jump to navigation Jump to search
Line 68: Line 68:
Il est possible de créer un pont entre OpenCl et OpenGl pour échanger des objets tel que des buffers.
Il est possible de créer un pont entre OpenCl et OpenGl pour échanger des objets tel que des buffers.


[[Image:EA2014_GPGPU_OpenClexecution.jpg|300px|thumb|right|Organisation des executions dans OpenCl]]

Le CUDA se basait sur l'unité "Thread" pour exprimé l’exécution parallèle.
Le CUDA se basait sur l'unité "Thread" pour exprimé l’exécution parallèle.
Pour OpenCl, l'unité est le work-item. Pour chaque work-item, une execution de l'algorithme est invoqué. Chaque work-item a une memoire privée.
Pour OpenCl, l'unité est le work-item. Pour chaque work-item, une execution de l'algorithme est invoqué. Chaque work-item a une memoire privée.
Line 75: Line 75:


OpenCl utilise la notion de dimension. Les work-item et les work-group peuvent être déclaré avec des indices dimensionnel plutôt qu'un entier simple.
OpenCl utilise la notion de dimension. Les work-item et les work-group peuvent être déclaré avec des indices dimensionnel plutôt qu'un entier simple.
[[Image:EA2014_GPGPU_OpenClexecution.jpg|300px|thumb|right|Organisation des executions dans OpenCl]]



[[Image:EA2014_GPGPU_OpenClClasse.jpg|300px|right|center|Diagramme de classe de l'API]]
[[Image:EA2014_GPGPU_OpenClClasse.jpg|300px|right|right|Diagramme de classe de l'API]]
L'API bien qu'initialement prevu en C est aussi decliné en C++. Le diagramme de classe associé permet de mieux comprendre la construction de l'API.
L'API bien qu'initialement prevu en C est aussi decliné en C++. Le diagramme de classe associé permet de mieux comprendre la construction de l'API.
*Platform : Versions d'OpenCL exécutables sur cette machines
*Platform : Versions d'OpenCL exécutables sur cette machines

Revision as of 11:12, 17 October 2014

Logo d'OpenCL

Présentation

  • Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
  • Sujet : GPGPU
  • Date : 17 octobre 2014
  • Auteur : William Bobo <william.bobo@e.ujf-grenoble.fr>
  • Lien vers les slides de la présentation : [Transparents]

Résumé

GPGPU ou General-purpose Processing on Graphics Processing Units. C'est une méthode permettant l’exécution de calculs hautes performances sur des GPU. Ces calculs peuvent ne pas être des calculs graphique pour lesquels ont été conçu les GPU à l'origine. Nous prenons OpenCL comme exemple pour l’exécution de calcul sur le GPU.

Mots Clés

GPU, calculs hautes performances, OpenCL

Abstract

GPGPU or General-purpose Processing on Graphics Processing Units. It's a methodology for high-performance computing that uses graphics processing. Accelerated algorithms can be others than graphics algorithms that have enabled the development of GPU. We will use OpenCL to run algorithms on a GPU.

Key Words

GPU, HPC, OpenCL

Synthèse

Introduction

Puissances de calcul brutes comparées entre GPU NVidia et CPU Intel de 2003 à 2008.

Les GPU ont été à l'origine concu pour les calcul graphique permettant l'affichage sur un écran. Leurs architecture est différente des CPU, les GPU contiennent beaucoup plus de cœurs permettant la parallélisation d'une même tache. Les écrans se modernisant, les besoins en calcul ont aussi augmenté et avec leurs nombre coeur, les GPU ont gagné en puissant brut comparé aux CPU. En 2002, une importante avancée dans la flexibilité de la programmation des GPU facilite les calculs autres que graphiques sur ces circuits. C'est la naissance de la méthode GPGPU.

Representation schematique des coeurs des CPU et GPU

Motivations

De nombreux domaines nécessitent de calcul à haute performance. Le fait d'utiliser GPGPU pour une application est appelé acceleration GPU. Les principaux domaines sont :

  • Le traitement de l'image
  • Les simulations (Météorologique, simulation neuronal, simulation de fluide etc )
  • Les outils scientifique tel que Matlab
  • Tout ce qui calcul sur de grand ensemble de données (Moteur physique etc..)

Les calculs hautes performances peuvent aussi être fait sur des CPU à l'aide de cluster mais le coût est incomparable. Le rapport prix/puissance baisse régulièrement grâce aux jeux vidéos qui démocratise l'utilisation de GPU.

Pre-conditions

Les algorithmes exécuté sur les GPU ne sont pas les même que ceux sur les CPU. Les algorithmes doivent être re-écris pour une exécution parallèle.

Exécution en série et exécution parallèle

Ce type d’exécution rend très efficace le traitement de grands ensembles de données dans le cas où le traitement est identique pour chacun de ces éléments.

Solutions

Il y a trois grand type de solution.

La plus ancienne est celle des shaders qui semblera familière aux utilisateurs d'OpenGL.

La second méthode est conçu par les constructeurs de GPU. Nvidia a fait CUDA et AMD FireStream par exemple.

La dernière méthode et celle qui est présenté : OpenCL.

OpenCl

OpenCl et certaines de ses surcouche

OpenCl ou Open Computing Langage est un standard proposé par le Khronos Group. C'est un consortium industriel dont font parti entre autres Nvidia, ATI, AMD, ARM et Intel.

OpenCL spécifie une API et un langage. Le langage est un dérivé du C et permet d’écrire les algorithme à exécuter dans des fichiers ".cl" . L'API permet de gérer les entré sorties de l'algorithme, la synchronisation et l’exécution. OpenCL permet d'utiliser GPGPU mais va au delà. Ce standard est conçu pour qu'avec le même code, l’exécution puisse être faite sur un GPU ou un CPU.

Principes

Les programmes crées dans le langage OpenCl sont compilé à l’exécution à l'aide de l'API OpenCl. Cela rappel l'utilisation des shader dans OpenGl. Il est possible de créer un pont entre OpenCl et OpenGl pour échanger des objets tel que des buffers.

Organisation des executions dans OpenCl

Le CUDA se basait sur l'unité "Thread" pour exprimé l’exécution parallèle. Pour OpenCl, l'unité est le work-item. Pour chaque work-item, une execution de l'algorithme est invoqué. Chaque work-item a une memoire privée. Les work-item sont rassemblé dans es work-group. Chaque work-item d'un work-group partagent une mémoire local. Le nombre total de work-item est specifié par la taille des données à traiter. Il y a une memoire constante et une memoire globale partagé par tout les work-item.

OpenCl utilise la notion de dimension. Les work-item et les work-group peuvent être déclaré avec des indices dimensionnel plutôt qu'un entier simple.


Diagramme de classe de l'API

L'API bien qu'initialement prevu en C est aussi decliné en C++. Le diagramme de classe associé permet de mieux comprendre la construction de l'API.

  • Platform : Versions d'OpenCL exécutables sur cette machines
  • Device : Les GPU ou CPU supportant la plateformes.
  • Program : Un fichier .cl une fois compilé.
  • Kernel : L'un des points d'entré du programme.
  • Command Queue : La serie de command que devra executer un "device".

Notes et références

-