Nvidia CUDA : aperçu

Tags : CUDA; GPGPU; Nvidia;
Publié le 02/03/2007 par
Imprimer
Conclusion
Cette première prise en main de CUDA nous a été relativement agréable. Agréable puisque nous avons été surpris par la facilité avec laquelle il est maintenant possible d'accéder aux unités de calcul du GeForce 8800. Relativement parce qu'il y a un monde entre faire tourner quelques fonctions sur un GPU et l'exploiter efficacement.

Nous avons, pour l'exercice de style, décidé de porter sur GPU (presque totalement) une version basique de pacman écrite en C. Il ne nous a fallu que quelques heures pour disposer d'un code fonctionnel (bien que peu performant et d'une robustesse approximative). Le but était ici d'observer avec quelle facilité il était possible de faire ses premiers pas avec CUDA. Examen réussi donc, approcher CUDA n'est pas réservé aux ingénieurs de Nvidia et à quelques chercheurs, à l'inverse de la solution d'AMD. Bien que nous n'ayons pas accès à la CTM, la documentation publique nous a rapidement permis de nous rendre compte de la difficulté de réaliser un tel portage, une idée que nous aurions donc abandonné directement quand bien même nous aurions eu accès à la CTM.


Ceci étant dit exploiter pleinement un GPU tel que le GeForce 8800 à travers CUDA n'est pas une tâche aisée, bien au contraire. Optimiser en profondeur est complexe quelle que soit la méthode. A partir d'un certain niveau d'efficacité, il est probable que la CTM reprenne les devants sur CUDA mais probablement au prix d'un temps de développement bien plus long.

Si au départ nous avions une préférence pour l'approche d'AMD qui permet de connaître le GPU en détail et de l'exploiter d'une manière plus efficace, au fil de notre analyse de CUDA et de la CTM, notre avis a changé. D'une part à cause de la complexité importante du côté de la CTM. A temps de développement identique, il nous paraît évident que CUDA permettra d'obtenir de meilleurs résultats.

Et d'autre part parce que nous avons constaté que l'écart entre la puissance de calcul des GPUs et des CPUs n'est pas aussi gigantesque qu'on pourrait le penser. Aussi puissant que soit le G80, les CPUs ont eux aussi fortement progressés avec l'apparition successive du dualcore puis du quadcore. Attention, les GPUs disposent d'une puissance de calcul supérieure, c'est un fait, mais il n'est pas question ici d'un ordre de grandeur de type x20 ou x100. Un x10 est péniblement atteint dans certains cas et ce sans compter l'efficacité moindre en pratique. Bien entendu dans certains cas le GPU peut prendre une avance plus importante mais globalement le GPU n'offre pas encore assez pour justifier ses désavantages.

Cette génération nous apparaît avant tout comme une première base de travail intéressante pour le développement d'applications pratiques, le GeForce 8800 associé a CUDA représentant la solution GPGPU la plus aboutie du moment. Autrement dit, si les GPUs s'imposent comme unités de calcul dans des domaines variés, en dehors de quelques exceptions, ce sont des GPUs futurs qui seront utilisés. Contrairement à la CTM, la force de CUDA est de ne pas être spécifique à un GPU et donc de permettre aujourd'hui le développement d'applications qui tourneront sur des GPUs de la prochaine génération, voire de la suivante. Nvidia conseille d'ailleurs aux développeurs de viser le traitement de 100 voire de 1000 blocks au lieu de 32 sur un GeForce 8800 GTX, de manière à profiter directement des futures générations de GPUs, ce qui annonce clairement la couleur concernant leur évolution.


Bien entendu, rien n'est tout noir ou tout blanc et CUDA est lui aussi en partie dépendant des capacités des GPUs, qu'il permet d'ailleurs de reporter, la GeForce 8800 représentant une capacité 1.0. De futurs GPUs, par exemple en version 1.1, pourraient supporter les opérations flottantes en double précision (FP64) ou des mémoires différentes ce qui pourra changer significativement la manière d'optimiser le code. Mais celui-ci restera fonctionnel, via une recompilation si nécessaire.

Selon nous, le succès de l'utilisation des GPUs en tant qu'unités de calcul dépendra avant tout de la capacité de ceux-ci à continuer à évoluer plus vite que les CPUs de manière à pouvoir s'installer sur ce nouveau marché avant que le massivement multicore débarque chez le numéro un du processeur, c'est-à-dire Intel. Après ce sera trop tard. Pour les simples utilisateurs que nous sommes, tout ceci ne devrait pas avoir de grande importance, tout du moins à court terme. Il faudra du temps avant de voir débarquer des applications utiles. Quant à la possibilité de voire CUDA utilisé pour traiter la physique dans les jeux, nous ne nous y attendons pas pour le moment, ces développeurs ayant déjà fort à faire avec l'exploitation des CPU multicores.


Pour plus d'informations :

CUDA : http://developer.nvidia.com/object/cuda.html 
CTM : http://ati.amd.com/companyinfo/researcher/Documents.html 
Vos réactions

Top articles