Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
developpement:productions:logiciels:incns [2013/06/29 08:59]
cicaluga
developpement:productions:logiciels:incns [2015/01/07 10:04] (Version actuelle)
Ligne 1: Ligne 1:
 [[developpement:​productions:​logiciels|Logiciels]] [[developpement:​productions:​logiciels|Logiciels]]
  
-====== Logiciel INCNS - Parallel INCompressible Navier-Stokes solver ======+======= Logiciel INCNS - Parallel INCompressible Navier-Stokes solver ​=======
  
  
Ligne 16: Ligne 16:
  
  
-**Développements au CBP :** +**Développements au CBP ** 
  
 L’outil doxygen qui permet aussi la génération du graphe d’appels, nous a servis au CBP d’analyser le code et suite à un profilage du code, on est arrivés à la conclusion que dans un premier temps la partie du code la plus adaptée à porter sur GPU est la partie FFT. Dans le code originel, cette partie fait appel à la bibliothèque open source FFTw et plus précisément à des sousroutines permettant le traitement de plusieurs vecteurs à la fois. L’outil doxygen qui permet aussi la génération du graphe d’appels, nous a servis au CBP d’analyser le code et suite à un profilage du code, on est arrivés à la conclusion que dans un premier temps la partie du code la plus adaptée à porter sur GPU est la partie FFT. Dans le code originel, cette partie fait appel à la bibliothèque open source FFTw et plus précisément à des sousroutines permettant le traitement de plusieurs vecteurs à la fois.
  
-Le code étant écrit en Fortan90, la méthode la plus naturelle qui a été envisagé pour porter cette partie de code a été d’utiliser les compilateurs commerciaux PGI CUDA. En effet, l’utilisation du langage CUDA ne semblait pas appropriée. Pour des tels codes, l’outil PGI CUDA développé par Portland Group en collaboration avec NVIDIA devrait théoriquement permettre le portage avec une quantité relativement réduite des modifications à apporter au code. En contrepartie,​ son application directe au code IncNS s’est avérée difficile dans ce contexte où la maturité du produit n’était pas encore achevée pour toutes ses fonctionnalités. En effet, dans les versions initiales (compatibles CUDA 3.2) de la librairie CuFFT (qui fait partie du produit PGI CUDA SDK) disponibles au début de nos travaux (2011), il n’y avait pas encore les sousroutines équivalentes à celles existantes dans la bibliothèque FFTw et utilisées dans IncNS pour le traitement simultané de plusieurs vecteurs. Etant donné que l’implantation de cette fonctionnalité était annoncée de façon imminente, il nous a paru plus raisonnable d’attendre cette évolution. Cependant, les versions ultérieures que j’ai testées (CUDA 4.0 et 4.1) n’ont pas entièrement intégré cette fonctionnalité,​ bien que quelques modifications (p.ex. rajout d'​arguments des procédures,​ mais sans que ceux ci soient effectivement prisent en compte) ont été apportées. Pour toutes ces versions, il y a eu besoin d'​installer de drivers et du SDK et nous avons effectué des tests de fonctionnement pour les diverses cartes GPU que nous avons eu temporairement à notre disposition (Tesla 1070 puis M2070). Les **tests de performance sur les cartes GPU NVIDIA** que nous avons effectués pour des transformées de Fourrier directes et inverses ont montré un speed-up intéressant lors du passage CPU vers GPU. L’acquisition de nouvelles cartes GPU et utilisation de la version actuelle CUDA 5 (une fois supportée dans les produits PGI) permettront la finalisation de ce travail d’optimisation du code sur ces architectures. ​+Le code étant écrit en Fortan90, la méthode la plus naturelle qui a été envisagé pour porter cette partie de code a été d’utiliser les compilateurs commerciaux PGI CUDA. En effet, l’utilisation du langage CUDA ne semblait pas appropriée. Pour des tels codes, l’outil PGI CUDA développé par Portland Group en collaboration avec NVIDIA devrait théoriquement permettre le portage avec une quantité relativement réduite des modifications à apporter au code. En contrepartie,​ son application directe au code IncNS s’est avérée difficile dans ce contexte où la maturité du produit n’était pas encore achevée pour toutes ses fonctionnalités. En effet, dans les versions initiales (compatibles CUDA 3.2) de la librairie CuFFT (qui fait partie du produit PGI CUDA SDK) disponibles au début de nos travaux (2011), il n’y avait pas encore les sousroutines équivalentes à celles existantes dans la bibliothèque FFTw et utilisées dans IncNS pour le traitement simultané de plusieurs vecteurs. Etant donné que l’implantation de cette fonctionnalité était annoncée de façon imminente, il nous a paru plus raisonnable d’attendre cette évolution. Cependant, les versions ultérieures que j’ai testées (CUDA 4.0 et 4.1) n’ont pas entièrement intégré cette fonctionnalité,​ bien que quelques modifications (p.ex. rajout d'​arguments des procédures,​ mais sans que ceux ci soient effectivement prisent en compte) ont été apportées. Pour toutes ces versions, il y a eu besoin d'​installer de drivers et du SDK et nous avons effectué des tests de fonctionnement pour les diverses cartes GPU que nous avons eu temporairement à notre disposition (Tesla 1070 puis M2070). Les tests de performance sur les cartes GPU NVIDIA que nous avons effectués pour des transformées de Fourrier directes et inverses ont montré un speed-up intéressant lors du passage CPU vers GPU. L’acquisition de nouvelles cartes GPU et utilisation de la version actuelle CUDA 5 (une fois supportée dans les produits PGI) permettront la finalisation de ce travail d’optimisation du code sur ces architectures. ​
developpement/productions/logiciels/incns.1372489151.txt.gz · Dernière modification: 2015/01/07 10:04 (modification externe)