Archive for the ‘CUDA’ Category
Visualisation de Molécules
Tombé par hasard sur VMD – Visual Molecular Dynamics, un logiciel scientifique Open Source disponible sur Windows, Linux et MacOS-X. Il permet de visualiser en 3D temps réel des molécules complexes et se combine avec de nombreux plugins et autres logiciels pour réaliser des rendus assez spectaculaires :
La modélisation des molécules demande énormément de puissance de calcul car il faut simuler les attractions/répulsions électrostatiques entre de très nombreux atomes pour trouver les positions de chacun. L’équipe de développement de VMD a beaucoup utilisé les GPU pour accélérer ces simulations, et CUDA en particulier (seulement sur Linux pour l’instant).
L’article « GPGPUs: Neat Idea or Disruptive Technology? » sur ce sujet est très intéressant : l’auteur montre que les GPU peuvent apporter un gain d’un facteur 10 en puissance de calcul, mais que ce n’est pas suffisant pour changer radicalement la face de l’informatique.
VMD supporte une ribambelle de formats de fichier de représentation des molécules dont certains, comme PDB, sont des fichiers textes, donc potentiellement importables dans d’autres logiciels …
Programmation des GPU en C++
La montée en puissance des GPUs s’est accompagnée du développement de langages de programmation spécifiques comme Cg ou GLSL pour tirer parti de leurs performances. La syntaxe de ces langages est proche du C, mais ils sont clairement destinés à la programmation d’applications graphiques, et demandent une bonne connaissance du fonctionnement interne des GPU.
Pour exécuter des programmes plus généraux sur les GPUs, l’idéal serait de disposer de compilateurs capables de générer « tout seuls » du code optimisé pour les GPU à partir d’un source C++ standard. On n’y est pas encore, mais ça progresse.
Actuellement, il existe des librairies permettant d’utiliser le GPU comme coprocesseur au travers d’un API comme:
Dans sa thèse de doctorat « GPU++ – An Embedded GPU Development System for General-Purpose Computations » Thomas Jansen a franchi une étape de plus en permettant de développer des shaders directement en C++ à l’aide d’une librairie qui génère du code GPU (je n’ai pas encore compris comment) à la compilation sur un compilateur standard.
RapidMind propose une « plateforme » basée sur une idée similaire, mais en la généralisant encore. Leur système permet d’optimiser le même code sur des processeurs aussi différents que les GPU multi-coeurs, les GPU et le processeur Cell qui équipe les PlayStation 3. Mais comme on le voit ci-dessous, le langage C++ est difficilement reconnaissable derrière l’utilisation d’un API et de macros:

Cette approche est cependant très générale et efficace, comme on le voit sur la page des « Case Studies« , qui inclut au moins deux domaines qui m’intéressent:
- La simulation des fluides
- Les fractales. J’y reviens dans un prochain article
Documents intéressants:
- Mike Houston « General Purpose Computation on Graphics Processors (GPGPU) », 2005, ATI X1000 Series Launch, Ibiza, Spain