Parallélisation d’un Algorithme CNFT SIDP-SID Supélec Parallélisation d’un Algorithme CNFT Olivier Gilloire, Issa Kebe (2A) Stéphane Vialle, Hervé Frezza-Buet Février-Juin 2002
La CNFT: définition succincte Algorithme qui permet de déterminer le meilleur neurone dans l’algorithme de Kohonen (phase de compétition)… Algorithme de calcul numérique intensif en virgule flottante, régulier. Exemple : extraction de contours démo
La CNFT: objectifs du projet Concevoir une algorithmique parallèle et séquentielle optimisée pour la CNFT Développement parallèle optimisé en environnement de bas niveau (C, MPI, Pthreads) Développement parallèle en environnement de haut niveau (bibliothèque ParCeL-6/NRV) Expérimentation sur Cluster de PC multiprocesseurs : Séq +Parallèle ShM +Blocage en cache +Parallèle Cluster
Version séquentielle de référence L’algorithme CNFT Version séquentielle de référence
L’algorithme CNFT Données de type double (utilisation du FPU) Balayage d’une image d’entrée de taille m x m Influence du voisinage dans un rayon n avec un poids précalculé « chapeau mexicain » Environ M.N calculs, M=m² et N=n² Démonstration
L’algorithme CNFT Erreur = |Sortie(influence ) - Sortie(influence n)| Taux d’erreurs en fonction du rayon d’influence : minimal à partir de 35 : nmin = 35
L’algorithme CNFT Performances (image 300x300, voisinage 50, 10 itérations) Algorithme « naïf » : 2m27s Avec optimisations sérielles : 44s +70,1% (Loop Unrolling, etc…)
L’algorithme CNFT Performances en séquentiel, en fonction de la taille du fichier d’entrée… cache resonance! Athlon 1GHz, L2=256Ko, L1=64Ko
L’algorithme CNFT P-III Xeon 700MHz L2=1Mo, L1=16Ko Performances en fonction de la taille du voisinage pris en compte… cache resonance! P-III Xeon 700MHz L2=1Mo, L1=16Ko
L’algorithme CNFT Performances indépendantes de la taille du fichier Performances dépendantes de la taille du voisinage (vs. taille cache). Bilan de l’algorithme séquentiel : Optimisation de l’utilisation des caches Parallélisation : décomposition en domaines
Version Parallèle SPMD CNFT Parallèle Version Parallèle SPMD
CNFT Parallèle Multiprocesseur PC à mémoire partagée - Pthreads Découpage de l’image en tranches horizontales SPMD-Barrière de synchronisation Pas de problèmes de False Sharing (perte du cache) Pas d’exclusions mutuelles nécessaires Démonstration du balayage P0 P1 P2 P3
CNFT Parallèle Multiprocesseur Performances en fonction de la taille de voisinage, sur QuadX1: PC 4-Xeon 700MHz, L2=1Mo, L1=16Ko, RAM=1Go
CNFT Parallèle Multiprocesseur Accélération réelle sur QuadX1 MAIS Fonction de la taille de voisinage
CNFT Parallèle Multiprocesseur Performances (image 300x300, voisinage 50, 10 itérations) Parallèle sur 4 processeurs avec optimisations sérielles : 12,7s +91,2% (+71% par rapport au séquentiel optimisé)
CNFT Parallèle Multiprocesseur Bilan parallélisation en mémoire partagée : Gain de performances x4 dans le cache Les performances s’écroulent en dehors du cache : En Mflops : normal En Speed up : anormal (S < 1,2 pour 4 processeurs) Phénomène classique sur PC multiprocesseur. Nécessité de blocage des données à la taille du cache
CNFT Parallèle Bloquée Nouvelle optimisation sérielle : blocage des données en cache
CNFT Parallèle Bloquée Dans chaque thread : Limite du calcul à un sous-ensemble du voisinage Nécessité de plusieurs passes (sommes partielles) Démonstration
CNFT Parallèle Bloquée Performances sur QuadX1, 4 PIII-Xeon utilisés (700 MHz, L2=1Mo, L1=16Ko) Chute réduite/annulée hors du cache
CNFT Parallèle Bloquée Bilan du blocage Ce type de problèmes se prête bien au blocage Blocage efficace mais imparfait, impossible de contrôler précisément le niveau de performances Performances aussi grandes sur des processeurs simples (Athlon, Pentium…) que sur des Pentium III Xeon (2Mo cache, quadri-processeurs…)
L’algorithme CNFT Version Cluster MPI
CNFT Parallèle Cluster Même distribution de données qu’en parallèle local Conservation du multithread sur nœud multiprocesseur Utilisation de MPI : envoi de messages Utilisation d’un maître pour la gestion des données (le numéro 0). Ethernet 100Mbits
CNFT Parallèle Cluster Évaluation des pertes dues à MPI Comparaison de deux configurations à 4 threads : Pertes indépendantes de la taille de l’image
CNFT Parallèle Cluster Performances en fonction de la taille de voisinage (Volume de communications constant) Comparaison de deux configurations à 4 et 8 threads :
CNFT Parallèle Cluster Accélération en fonction de la taille du voisinage : globalement bénéfique 2 machines 1 machine
CNFT Parallèle Cluster Inefficace pour des voisinages trop petits. Mais dans un cas réel (n 35 50Ko), gain de performances notable. Supérieur au multiprocesseur en terme de €/Mflops dans la zone de rendement optimal (données 100Ko).
CNFT Cluster Test sur un cluster plus étendu : 6 machines/14 processeurs : 6,2 Gflops en pointe.
Courbe de performances sur Cluster Speed up en fonction du nombre de processeurs : proche de l’optimum
Conclusion L’élément d’importance majeure dans ces algorithmes est le cache. Nécessité de « cache-driven parallelization ». Bon résultat général sur un calcul flottant intensif : Version séquentielle naïve : 120Mflops puis :
Parallélisation d’un Algorithme CNFT Questions ?