Courbure calculée en OpenMP, CUDA et OpenCL, avec benchmarks comparés.
TerminéSprint S28-S29 · 13 points
En bref, sans jargonpour 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.
Maillage (tableaux plats, voisinage) → Deux passes (angles, puis courbure) : lu
Benchmarks (bench.json, sur la fiche) → Deux passes (angles, puis courbure) : mesure chaque version
Deux passes (angles, puis courbure) → OpenMP (séquentiel et parallèle) : mêmes fonctions
Deux passes (angles, puis courbure) → OpenCL (double précision) : en noyaux
Deux passes (angles, puis courbure) → CUDA (double et simple) : mêmes passes
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)
Triangles
C++ séquentiel
OpenMP, 6 threads
OpenCL (processeur, PoCL)
CUDA, double précision
CUDA, simple précision
49 728
6,95 ms ×1,0
2,60 ms ×2,7
7,54 ms ×0,9
4,13 ms ×1,7
3,18 ms ×2,2
199 362
30,4 ms ×1,0
8,91 ms ×3,4
21,6 ms ×1,4
10,6 ms ×2,9
12,3 ms ×2,5
799 236
112 ms ×1,0
32,2 ms ×3,5
60,9 ms ×1,8
32,4 ms ×3,4
23,9 ms ×4,7
3 198 732
531 ms ×1,0
178 ms ×3,0
332 ms ×1,6
110 ms ×4,8
85,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.