Portage d'une application sur GPU CreditCruncher
Pourquoi les GPU ? Conçus initialement pour l'affichage 3D sur ordinateur De nombreux avantages Capacités de calcul graphique Intérêt environnemental Rendement énergétique (Flops/Watt) et compacité Prix (Flops/€) et disponibilité Architecture parallèle « multi-core »
Pourquoi les GPU ? « Le GPU est un peu au CPU ce qu'un supertanker est au hors-bord. » Jen-Hsun Huang, PDG et co-fondateur de nVidia
Mon application sur GPU ? → CUDA Développé par nVidia Extension du langage C Disponible en téléchargement sur Fonctions « kernel » exécutées sur le GPU Notions de programmation parallèle
Credit Cruncher... en quelques mots Calcul de value at risk (VAR) d'un portefeuille financier Fichiers XML à l'entrée Méthode de Monte Carlo Logiciel de statistique R pour le tracé des graphiques
Credit Cruncher Exemple de rapport
Credit cruncher sur GPU Première étape Appel d'une fonction exécutée sur le GPU à partir de Credit Cruncher
Portage sur GPU Première étape 1.Compilation de Credit Cruncher sur Eclipse 2.Compilation d'une fonction exécutée sur le GPU sous forme de bibliothèque (.so) 3.Appel d'une fonction de cette bibliothèque à partir d'une exécution de Ccruncher
Ccruncher et Monte Carlo Génération de nombres aléatoires - Mersenne Twister Transformation en nombres Gaussiens Multiplication par la matrice de Cholesky → Nombres aléatoires corrélés Calcul des pertes Tracé du(des) graphique(s) 1 2
Les étapes du Monte Carlo sur GPU 1. Mersenne Twister + Box Muller de nombres générés en 0,013 sec 2. Code de multiplication difficilement parallélisable ● Boucles dont l'incrément dépend d'une valeur arbitraire calculée à chaque tour de boucle ● Valeur i dépend de i-1 ➔ Force brute du GPU
Porte-feuille utilisé Nombre d'emprunts croissant ➔ Idéalement Ratings de AAA → D : 8 au total Idéalement 16 ? Nombre de secteurs = 100 (25 secteurs sur 75 pays) ● Matrice de corrélation entre secteurs ● Symétrique ● 1 sur la diagonale ● Valeurs aléatoires entre 0,5 et 0,7 ● Définie positive ?
Porte-feuille utilisé Emprunts 1 % = % = % = % = simulations ➔ Idéalement
Résultats
Problèmes rencontrés Programmation avec CUDA non triviale Gestion de mémoire Différents types de mémoire (mémoire partagée, mémoire globale, mémoire de texture,...) Laisser les variables sur la mémoire GPU pour éviter les transferts Multiplication matricielle Utilisation de la force brute du GPU actuellement CUBLAS VS. Multiplication optimisée « à la main » Passage de paramètres double → float
Perspectives Exécution avec un porte-feuille type « DEXIA » Contacts avec le créateur de Credit Cruncher Déploiement sur son site Rédaction d'un papier Bonnes bases pour le portage d'une autre application Autre langage ?