Leçon 27 : Multiplication de matrices avec tiling
La multiplication de matrices C = A * B calcule chaque élément C[row][col] comme une somme de produits le long de la dimension K : C[row][col] = somme sur k de A[row][k] * B[k][col]. Dans la version naïve, chaque thread responsable d'un élément de C lit toute une ligne de A et toute une colonne de B
Imagine que tu prépares un plat et que tu cours à répétition à l'entrepôt éloigné pour les mêmes ingrédients. À la place, tu ramènes une caisse entière une fois sur le plan de travail de la cuisine (l'étagère proche), et tous les cuisiniers y prennent rapidement. Le tiling, c'est exactement ça : tu ramènes un tile de données une fois dans la mémoire partagée proche, et tu le réutilises encore et encore.
- multiplication de matrices avec tiling
- Un algorithme de matmul qui charge des tiles de A et B en mémoire partagée, synchronise, et accumule à partir de là — économisant des lectures de mémoire globale.
- tile
- Un sous-bloc de TILE x TILE de la matrice, chargé en une fois en mémoire partagée et utilisé par tous les threads du block.
- réutilisation en mémoire partagée
- Chaque élément chargé en mémoire partagée est lu par TILE threads différents, donc une lecture globale sert à de nombreux produits.
- dimension K
- La dimension partagée dans le produit : A est M x K et B est K x N. La somme sur k parcourt K et se calcule tile par tile.