26.06.2013 Views

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

SHOW MORE
SHOW LESS

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/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!