Utilisation avancée des processeurs graphiques avec Qt
Utilisation avancée des processeurs graphiques avec Qt
Utilisation avancée des processeurs graphiques avec Qt
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Utilisation</strong> <strong>avancée</strong> <strong>des</strong> <strong>processeurs</strong> <strong>graphiques</strong> <strong>avec</strong> <strong>Qt</strong> par Rémi Achard Guillaume Belz<br />
On a donc deux contraintes importantes à ce niveau <strong>avec</strong> l'approche GPU Computing : il faut que l'algorithme utilisé<br />
soit parallélisable et il faut que le rapport temps de calcul / temps de transfert soit maximum. On comprend donc<br />
bien l'importance de bien choisir quelle partie du code optimiser et quel algorithme utiliser. Un algortihme réalisant<br />
beaucoup de calculs sur peu de données donnera les performances les plus intéressantes en GPU Computing. On<br />
voit également qu'il est important de systématiquement mesurer les performances pour n'optimiser au mieux que<br />
ce qui est nécessaire.<br />
Pourquoi présenter l'utilisation d'OpenCL pour le GPU Computing plutôt que CUDA<br />
ou d'autres solutions ? La principale raison est que OpenCL est une API portable,<br />
indépendante d'un constructeur en particulier. Il sera possible de garder le même code<br />
quelque soit la machine sur laquelle s'exécute le programme. De plus, les utilisateurs<br />
habitué à OpenGl se retrouveront dans un environnement familier et il sera plus facile de<br />
le prendre en main. Par exemple, les fonctionnalités spécifiques à un contructeur de GPU<br />
seront disponibles, comme dans OpenGL, sous forme d'extensions.<br />
5.0.2 - Les API OpenCL<br />
Les API d'OpenCL se divise en trois :<br />
• Le Plateform layer API est appelé depuis le code du programme hôte. Cette API permet de gérer les<br />
ressources offertes par OpenCL (rechercher et initialiser les périphériques compatibles OpenCL, créer <strong>des</strong><br />
contextes de travail, etc.)<br />
• L'OpenCL Language est utilisé pour écrire le code <strong>des</strong> fonctions exécutées sur les périphériques compatibles<br />
OpenCL (kernels). Ce langage est basé sur le C version 99 <strong>avec</strong> <strong>des</strong> extensions de langage. Ce langage<br />
fournit en particulier un certain nombres fonctions et variables accessibles dans les kernels (build-in).<br />
• Le Runtime API permet de compiler et d'exécuter les kernels et de gérer la mémoire vidéo. Il prend<br />
également en charge la configuration de l'exécution <strong>des</strong> kernels en créant le nombre de kernels nécessaires<br />
et en leurs attribuant un index à 1D, 2D ou 3D. Chaque kernels (work item) est identifié de façon unique<br />
par un index global et exécute le même code sur <strong>des</strong> données différentes. Le runtime se charge aussi de<br />
regrouper les kernels dans <strong>des</strong> work group (les work group sont alors identifié par un index unique et chaque<br />
work item dans un work group est identifié par un index unique dans ce work group).<br />
5.0.3 - Installer OpenCL<br />
Pour exécuter un programme contenant du code OpenCL, un seul fichier suffit généralement : libopencl (.dll sous<br />
Windows et .so sous Linux). Depuis quelques temps, les constructeurs de GPU incluent ce fichier directement dans<br />
les pilotes et il n'est donc pas nécessaire de le fournir. Donc, si la machine sur laquelle vous souhaitez exécuter votre<br />
programme est à jour et correctement configurée, vous n'avez pas de fichier supplémentaire à fournir.<br />
Pour compiler un programme contenant du code OpenCL, il faut donc simplement ajouter les fichiers d'en-têtes.<br />
Ces fichiers étant spécifiques du constructeur, il est nécessaire de se reporter aux pages de téléchargement<br />
<strong>des</strong> constructeurs et à la documentation fournie (par exemple NVIDIA et AMD). VS2010 et CUDA 3.2 : http://<br />
www.codeproject.com/Tips/186655/CUDA-3-2-on-VS2010-in-9-steps.aspx<br />
- 57 -<br />
http://gbelz.developpez.com/remi-achard/gpu-avance-<strong>avec</strong>-qt/modified/