FT-BLAS : Performance et tolérance aux pannes
Les tests du FT-BLAS par rapport aux meilleures bibliothèques montrent de bonnes performances et une tolérance aux pannes efficace.
― 8 min lire
Table des matières
- Performance de FT-BLAS Sans Tolérance aux Erreurs
- Amélioration du BLAS de Niveau-1
- Amélioration du BLAS de Niveau-2
- Amélioration du BLAS de Niveau-3
- Performance de FT-BLAS Avec Capacité de Tolérance aux Erreurs
- Optimisation de DSCAL Avec et Sans Tolérance aux Erreurs
- Optimisation de DGEMM Avec Tolérance aux Erreurs
- Comparaison Générale des Performances
- Benchmarking sur Processeur Intel Cascade Lake
- Activation du Support Parallèle
- Extension aux Processeurs AMD
- Expériences d'Injection d'Erreurs
- Performance Sous Injection d'Erreurs sur Skylake
- Performance Sous Injection d'Erreurs sur Cascade Lake
- Performance Parallèle Sous Injection d'Erreurs sur Cascade Lake
- Performance Sous Injection d'Erreurs sur AMD Zen2
- Source originale
Pour voir comment notre nouvelle version de BLAS (appelée FT-BLAS) fonctionne, on l'a comparée à trois bibliothèques bien connues : Intel oneMKL, OpenBLAS et BLIS. Les tests ont été faits sur plusieurs ordinateurs, notamment un processeur Intel Gold 5122 Skylake à 3,60 GHz avec 96 Go de RAM, et un processeur Intel Xeon W-2255 Cascade à 3,70 GHz avec 32 Go de RAM. On a aussi testé FT-BLAS sur un processeur AMD Ryzen7 3700X qui tourne à 3,60 GHz avec 32 Go de RAM.
On a répété chaque test vingt fois et calculé les résultats moyens. Pour des opérations simples (Niveau-1), on a fait la moyenne des performances sur différentes tailles de tableaux. Pour les opérations plus complexes (Niveau-2 et Niveau-3), on a fait la moyenne sur différentes tailles de matrices. On a utilisé le compilateur icc 19.0 avec un drapeau d'optimisation à -O3.
Performance de FT-BLAS Sans Tolérance aux Erreurs
Avant d'ajouter des fonctionnalités de tolérance aux erreurs, FT-BLAS propose une nouvelle implémentation de BLAS qui est tout aussi bonne, voire plus rapide que les bibliothèques actuelles. On appelle cette version FT-BLAS : Ori.
Amélioration du BLAS de Niveau-1
Les opérations de BLAS de Niveau-1 sont souvent limitées par la vitesse de la mémoire. Pour les rendre plus rapides, on a utilisé trois stratégies principales : 1) utiliser des ensembles d'instructions avancées pour le traitement parallèle, 2) dérouler les boucles pour de meilleures performances, et 3) précharger les données pour améliorer l'accès à la mémoire. Nos tests montrent qu'OpenBLAS n'a pas bien optimisé certaines routines, comme DSCAL et DNRM2. En ajoutant le préchargement à DSCAL, on a réussi à obtenir des améliorations de vitesse par rapport à OpenBLAS et BLIS. Pour DNRM2, qu'OpenBLAS ne prend en charge qu'avec des instructions plus anciennes, notre version mise à jour a fourni des gains de performance significatifs. Dans l'ensemble, nos optimisations nous ont permis d'égaler ou de dépasser les performances de la MKL d'Intel.
Amélioration du BLAS de Niveau-2
Pour les routines de BLAS de Niveau-2, on s'est concentré sur la réutilisation des données pour les rendre plus rapides. Suivant nos stratégies, notre opération DGEMV a dépassé OpenBLAS et BLIS. Contrairement à OpenBLAS, qui utilise une approche similaire, notre version de DGEMV a montré une meilleure efficacité. De même, pour DTRSV, on a découvert que l'utilisation de la routine de Niveau-2 la plus rapide (DGEMV) nous a aidés à surpasser toutes les autres bibliothèques.
Amélioration du BLAS de Niveau-3
Dans le cas du BLAS de Niveau-3, en particulier DGEMM, on a appliqué des méthodes traditionnelles de mise en cache et de regroupement des données. Notre mise en œuvre de DGEMM a bien fonctionné, similaire à OpenBLAS, mais a réussi à surpasser MKL et BLIS. Pour DTRSM, on a créé une routine hautement optimisée qui a considérablement amélioré les performances par rapport à OpenBLAS et BLIS, avec un petit avantage sur MKL.
Performance de FT-BLAS Avec Capacité de Tolérance aux Erreurs
Après avoir établi de bonnes performances sans tolérance aux erreurs, on a introduit des fonctionnalités pour gérer les erreurs. Pour les routines de Niveau-1 et de Niveau-2, on a créé une nouvelle méthode de vérification qui minimisait l'impact de la tolérance aux erreurs sur la vitesse. Pour les routines de Niveau-3, on a combiné le contrôle d'erreurs avec nos calculs habituels, ce qui a limité le besoin de déplacements de données supplémentaires et maintenu la performance élevée.
Optimisation de DSCAL Avec et Sans Tolérance aux Erreurs
On a évalué l'efficacité et l'impact de nos méthodes de tolérance aux erreurs sur DSCAL. On a commencé par une version simple, qui avait de faibles performances. En appliquant progressivement des optimisations, on a réduit la perte de performance due aux fonctionnalités de tolérance aux erreurs. La version améliorée a montré une vitesse considérable, surtout quand on a ajouté des techniques plus avancées comme le déroulement de boucles et le préchargement. À la fin de ce processus, notre version sans tolérance aux erreurs a égalé la performance d'OpenBLAS.
Optimisation de DGEMM Avec Tolérance aux Erreurs
On a comparé deux approches pour intégrer la tolérance aux erreurs dans l'opération DGEMM : améliorer la MKL existante et intégrer nos contrôles directement dans le calcul. La version basée sur MKL a montré un overhead plus élevé quand des erreurs étaient injectées, tandis que la méthode fusionnée avait un impact beaucoup plus faible. Cette approche signifie qu'on pouvait gérer des erreurs sans ralentissements significatifs.
Comparaison Générale des Performances
Nos comparaisons ont montré que la version FT-BLAS avec capacité de tolérance aux erreurs restait performante. L'overhead supplémentaire pour les routines dépendantes de la mémoire était mineur, la plupart restant en dessous de 3 %. Pour les routines de Niveau-3, on a maintenu un faible overhead similaire à travers différentes implémentations. Dans l'ensemble, notre FT-BLAS est resté compétitif, voire plus rapide que les bibliothèques leaders.
Benchmarking sur Processeur Intel Cascade Lake
Tester FT-BLAS sur un processeur Intel Cascade Lake a montré qu'il fonctionnait bien en continu, similaire aux résultats du processeur Skylake. L'overhead supplémentaire pour les routines dépendantes de la mémoire était minimal. Les stratégies fusionnées fonctionnaient très bien, maintenant la performance compétitive contre les bibliothèques bien connues.
Activation du Support Parallèle
Après avoir activé le support pour le traitement parallèle, on a constaté que les routines de Niveau-1 et de Niveau-2 maintenaient leur faible overhead, similaire aux implémentations à un seul thread. Notamment, OpenBLAS ne prend pas en charge le traitement parallèle pour toutes les routines, et cette limitation signifie que notre conception parallèle peut le surpasser.
Extension aux Processeurs AMD
On a aussi testé nos routines sur un processeur AMD R7 3700X. Étant donné que ce processeur a moins de registres disponibles, on a décidé de ne faire la détection d'erreurs que pour les routines plus simples. Les résultats ont confirmé que nos méthodes de tolérance aux erreurs fonctionnaient toujours bien, avec très peu d'overhead par rapport aux bibliothèques existantes.
Expériences d'Injection d'Erreurs
Pour valider encore plus nos fonctionnalités de tolérance aux erreurs, on a introduit des erreurs directement dans nos processus de calcul et vérifié les résultats par rapport à MKL. En injectant des erreurs au niveau du code, on visait à minimiser tout impact sur la performance. On a injecté 20 erreurs dans chaque routine, et pour nos routines de Niveau-3, ce processus était assez simple. On pouvait facilement modifier des éléments de matrice à des points spécifiques.
Pour les routines de Niveau-1 et de Niveau-2, où du code assembleur était utilisé, injecter des erreurs nécessitait des méthodes plus complexes. On a développé un mécanisme pour introduire des fautes et comparer les résultats pour identifier les erreurs. La récupération impliquait de recomputer rapidement les sections défectueuses.
Performance Sous Injection d'Erreurs sur Skylake
Nos tests ont montré que même dans des conditions d'injection d'erreurs, FT-BLAS maintenait de bonnes performances avec un overhead minimal. Dans tous les cas, nos routines surpassaient les bibliothèques existantes, confirmant que les méthodes de tolérance aux erreurs avaient un impact limité sur la vitesse.
Performance Sous Injection d'Erreurs sur Cascade Lake
Sur le processeur Cascade Lake, notre stratégie de tolérance aux erreurs a aussi bien fonctionné, continuant de surpasser d'autres bibliothèques même sous injection d'erreurs. Le temps pris pour différentes tailles de matrices a confirmé que FT-BLAS pouvait tolérer efficacement de nombreuses erreurs sans affecter significativement la performance.
Performance Parallèle Sous Injection d'Erreurs sur Cascade Lake
Quand parallélisées, notre routine DGEMV a toujours surpassé OpenBLAS et MKL, même sous conditions d'erreurs. Notre DGEMV optimisé FT était nettement plus rapide que le BLIS non threadé, confirmant que nos techniques s'adaptent bien même avec une complexité supplémentaire.
Performance Sous Injection d'Erreurs sur AMD Zen2
Enfin, on a examiné la performance de FT-BLAS sous injection d'erreurs sur le processeur AMD Zen2 Ryzen. On a trouvé que la performance globale restait compétitive avec les bibliothèques leaders, même dans des conditions d'erreurs. Cela a confirmé que nos méthodes fonctionnent bien sur différentes plateformes matérielles.
Titre: FT-GEMM: A Fault Tolerant High Performance GEMM Implementation on x86 CPUs
Résumé: General matrix/matrix multiplication (GEMM) is crucial for scientific computing and machine learning. However, the increased scale of the computing platforms raises concerns about hardware and software reliability. In this poster, we present FT-GEMM, a high-performance GEMM being capable of tolerating soft errors on-the-fly. We incorporate the fault tolerant functionality at algorithmic level by fusing the memory-intensive operations into the GEMM assembly kernels. We design a cache-friendly scheme for parallel FT-GEMM. Experimental results on Intel Cascade Lake demonstrate that FT-GEMM offers high reliability and performance -- faster than Intel MKL, OpenBLAS, and BLIS by 3.50\%$\sim$ 22.14\% for both serial and parallel GEMM, even under hundreds of errors injected per minute.
Auteurs: Shixun Wu, Yujia Zhai, Jiajun Huang, Zizhe Jian, Zizhong Chen
Dernière mise à jour: 2023-05-08 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2305.02444
Source PDF: https://arxiv.org/pdf/2305.02444
Licence: https://creativecommons.org/licenses/by-sa/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.