EA2014 GPGPU: Difference between revisions

From air
Jump to navigation Jump to search
 
(29 intermediate revisions by the same user not shown)
Line 14: Line 14:
Nous prenons OpenCL comme exemple pour l’exécution de calcul sur le GPU.
Nous prenons OpenCL comme exemple pour l’exécution de calcul sur le GPU.
== Mots Clés ==
== Mots Clés ==
GPU, calculs hautes performances, OpenCL
GPGPU, GPU, calculs hautes performances, OpenCL


= Abstract =
= Abstract =
Line 21: Line 21:
We will use OpenCL to run algorithms on a GPU.
We will use OpenCL to run algorithms on a GPU.
== Key Words ==
== Key Words ==
GPU, HPC, OpenCL
GPGPU, GPU, HPC, OpenCL


= Synthèse =
= Synthèse =
Line 28: Line 28:


[[Image:EA2014_GPGPU_graph.png|300px|thumb|right|Puissances de calcul brutes comparées entre GPU NVidia et CPU Intel de 2003 à 2008.]]
[[Image:EA2014_GPGPU_graph.png|300px|thumb|right|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.
Les GPU ont été à l'origine concu pour les calculs graphiques permettant l'affichage sur un écran. Leur 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 leur nombre de coeur, les GPU ont gagné en puissance 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.
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.
C'est la naissance de la méthode GPGPU.
Line 34: Line 34:


==Motivations==
==Motivations==
De nombreux domaines nécessitent de calcul à haute performance. Le fait d'utiliser GPGPU pour une application est appelé acceleration GPU.
De nombreux domaines nécessitent des calculs à hautes performances. Le fait d'utiliser GPGPU pour une application est appelé acceleration GPU.
Les principaux domaines sont :
Les principaux domaines sont :
* Le traitement de l'image
* Le traitement de l'image
* Les simulations (Météorologique, simulation neuronal, simulation de fluide etc )
* Les simulations (Météorologique, simulation neuronal, simulation de fluide etc )
* Les outils scientifique tel que Matlab
* Les outils scientifiques tel que Matlab
* Tout ce qui calcul sur de grand ensemble de données (Moteur physique etc..)
* Tout ce qui calcul sur de grands ensembles de données (Moteur physique etc..)
Les calcul hautes performance 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.
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émocratisent l'utilisation de GPU.


==Pre-conditions==
==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 parallelle
Les algorithmes exécutés 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.
[[Image:EA2014_GPGPU_algorithme.png|300px|thumb|center|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 grandes solutions.

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 est celle présenté : OpenCL.

==OpenCl==

[[Image:EA2014_GPGPU_OpenClSurcouche.png|300px|thumb|right|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.

[[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.
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.


[[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.
*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".

==Conclusion==
L'un des principaux problème de accélération GPU et qu'ils étaient soit difficile à utiliser (au travers des shader) soit limité à certaines machine de par l’implémentation propre à chaque propriétaire. OpenCl résout ce problème partiellement en offrant un standard inter-constructeur. OpenCl est maintenant disponible dans plusieurs langages, permet à toutes les cartes compatibles d'utiliser GPGPU et d'effectuer des calculs hautes performances. CUDA reste tout d même le plus utilisé pour l'acceleration GPU.


= Notes et références =
= Notes et références =
*Alexandre Chariot, Quelques Applications de la Programmation des Processeurs Graphiques à la Simulation Neuronale et à la Vision par Ordinateur, Thèse, [https://tel.archives-ouvertes.fr/file/index/docid/501212/filename/These_AChariot.pdf]
-

* [https://software.intel.com/en-us/intel-opencl https://software.intel.com/en-us/intel-opencl]

* [http://jorudolph.wordpress.com/2012/02/03/opencl-work-item-ids-globalgrouplocal/ http://jorudolph.wordpress.com/2012/02/03/opencl-work-item-ids-globalgrouplocal/]
Permet de comprendre le fonctionnement des ID dans OpenCl

*[http://gpgpu.org/ http://gpgpu.org/]

*[https://www.khronos.org/registry/cl/specs/opencl-1.2.pdf OpenCl specification]

*[https://www.khronos.org/ https://www.khronos.org/]

Latest revision as of 12:07, 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

GPGPU, 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

GPGPU, 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 calculs graphiques permettant l'affichage sur un écran. Leur 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 leur nombre de coeur, les GPU ont gagné en puissance 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 des calculs à hautes performances. 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 scientifiques tel que Matlab
  • Tout ce qui calcul sur de grands ensembles 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émocratisent l'utilisation de GPU.

Pre-conditions

Les algorithmes exécutés 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 grandes solutions.

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 est celle 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".

Conclusion

L'un des principaux problème de accélération GPU et qu'ils étaient soit difficile à utiliser (au travers des shader) soit limité à certaines machine de par l’implémentation propre à chaque propriétaire. OpenCl résout ce problème partiellement en offrant un standard inter-constructeur. OpenCl est maintenant disponible dans plusieurs langages, permet à toutes les cartes compatibles d'utiliser GPGPU et d'effectuer des calculs hautes performances. CUDA reste tout d même le plus utilisé pour l'acceleration GPU.

Notes et références

  • Alexandre Chariot, Quelques Applications de la Programmation des Processeurs Graphiques à la Simulation Neuronale et à la Vision par Ordinateur, Thèse, [1]

Permet de comprendre le fonctionnement des ID dans OpenCl