← Tous les projets

Science

Calcul parallèle CPU/GPU

Courbure calculée en OpenMP, CUDA et OpenCL, avec benchmarks comparés.

Terminé Sprint S28-S29 · 13 points
En bref, sans jargon pour les non-informaticiensLire le résuméRefermer
Ce que c'est
Le même calcul sur des objets 3D, fait de plusieurs façons : sur un seul cœur du processeur, sur tous ses cœurs, et sur la carte graphique, avec la comparaison des temps.
À quoi ça sert
Accélérer les calculs lourds, en simulation, en imagerie ou en intelligence artificielle.
Ce que ça montre
Savoir répartir un calcul pour le rendre jusqu'à six fois plus rapide, sans changer son résultat.

Calcul parallèle développé pendant ma thèse

Code source

Comment les morceaux tiennent ensemble

Schéma : Maillage → Deux passes (lu) ; Benchmarks → Deux passes (mesure chaque version) ; Deux passes → OpenMP (mêmes fonctions) ; Deux passes → OpenCL (en noyaux) ; Deux passes → CUDA (mêmes passes). lu mesure chaque version mêmes fonctions en noyaux mêmes passes Benchmarks bench.json, sur la fiche Maillage tableaux plats, voisinage Deux passes angles, puis courbure OpenMP séquentiel et parallèle OpenCL double précision CUDA double et simple

Benchmarks

La même courbure, calculée par chaque version sur des tores de 50 000 à 3,2 millions de triangles ; temps médian, voisinage déjà construit, copies vers la carte graphique comprises.

Mesuré sur Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz (6 threads OpenMP sur 12 processeurs logiques), carte graphique NVIDIA GeForce GTX 1660, sous WSL 2 ; médiane de 7 essais.

Temps sur 3 198 732 triangles (plus court est meilleur)

C++ séquentiel : 531 ms, ×1,0 C++ séquentiel 531 ms, ×1,0 OpenMP, 6 threads : 178 ms, ×3,0 OpenMP, 6 threads 178 ms, ×3,0 OpenCL (processeur, PoCL) : 332 ms, ×1,6 OpenCL (processeur, PoCL) 332 ms, ×1,6 CUDA, double précision : 110 ms, ×4,8 CUDA, double précision 110 ms, ×4,8 CUDA, simple précision : 85,5 ms, ×6,2 CUDA, simple précision 85,5 ms, ×6,2
TrianglesC++ séquentielOpenMP, 6 threadsOpenCL (processeur, PoCL)CUDA, double précisionCUDA, simple précision
49 7286,95 ms ×1,02,60 ms ×2,77,54 ms ×0,94,13 ms ×1,73,18 ms ×2,2
199 36230,4 ms ×1,08,91 ms ×3,421,6 ms ×1,410,6 ms ×2,912,3 ms ×2,5
799 236112 ms ×1,032,2 ms ×3,560,9 ms ×1,832,4 ms ×3,423,9 ms ×4,7
3 198 732531 ms ×1,0178 ms ×3,0332 ms ×1,6110 ms ×4,885,5 ms ×6,2

Sur la carte graphique, en double précision : 33,8 ms de copie vers la carte, 30,5 ms de calcul, 11,9 ms de retour, et 33,7 ms côté processeur (allocations). En simple précision, le calcul seul tombe à 1,94 ms : cette carte grand public a 32 fois moins d'unités de calcul en double qu'en simple. Pour une seule courbure, ce sont les copies qui coûtent : le calcul sur carte paie quand les données y restent.

La simple précision s'écarte au plus de 1.2e-6 sur un défaut angulaire : assez pour afficher des couleurs, pas pour vérifier Gauss-Bonnet au millionième.

Pourquoi OpenMP ne va pas six fois plus vite : la passe par sommet lit beaucoup de mémoire pour peu de calcul, et la bande passante de cette machine sous WSL plafonne à 5 ou 6 Go/s quel que soit le nombre de threads (mesuré) ; la passe par face, elle, va 4,5 fois plus vite sur 6 cœurs. Avec 12 threads, ceux qui attendent en boucle active sur les cœurs logiques ralentissent les autres : un thread par cœur physique est plus rapide ici.

Technologies

  • C++
  • OpenMP
  • CUDA
  • OpenCL

Qui fait quoi

C++
La version séquentielle de référence, identique au bit près à celle de topologie, et le code commun aux versions parallèles.
OpenMP
Répartit les deux passes sur tous les cœurs, avec le même résultat au bit près quel que soit le nombre de threads.
CUDA
Les mêmes passes sur la carte graphique NVIDIA (GTX 1660), en double précision (à 1e-12) et en simple précision (écart mesuré).
OpenCL
Les mêmes passes sur tout appareil OpenCL, processeur (PoCL) ou carte graphique, en double précision.

Definition of Done

  • Code relu, diff par diff
  • Tests unitaires et d'intégration verts
  • CI verte sur Linux, Windows et macOS si compilé
  • README, REVIEW.md et DECISIONS.md à jour
  • Textes en français et en anglais
  • Démo déployée et testée sur mobile