Pour compléter un peu ce qu'a dit Robin, la structure physique des GPU est conçue pour effectuer des opérations massivement parallèle.
En gros mettons qu'on ait deux listes de 1000 nombres à multiplier entre eux un à un (en gros, on cherche une troisième liste de 1000 nombres contenant le produit du premier de la première liste par le premier de la seconde liste, du second de la première par le second de la deuxième, etc)
Un processeur classique va aller charger la première paire, calculer le produit, la mettre dans la liste de sortie, et répéter mille fois cette opération pour les mille paires à calculer. On sent bien que ça va prendre du temps, surtout si la liste fait plus de mille nombres ou que les opérations sont plus complexes qu'un simple produit de Hadmard (qui est en fait le nom du truc que j'ai grossièrement utilisé comme exemple ici)
Un GPU va pouvoir effectuer la multiplication "en une seule fois". Il faut un peu visualiser ça comme une sorte d'énorme usine avec plein de chaînes de montage en parallèle, qui effectuent toutes la même opération au même moment, mais pas sur les mêmes données).
Ces chaînes de montage ne peuvent pas être contrôlées indépendamment les unes des autres, et ont une performance moyenne. Ça les rend pas très efficaces pour faire une tâche complexe en continu, mais extrêmement efficaces pour faire un nombre énorme de tâches simples en même temps.
Après, pour aller avec tout ça, les GPUs sont munis de mémoires particulièrement bien étudiées qui permettent de mettre a profit cette architecture parallèle. L'idée est d'implémenter sur silicium tout le bazar nécessaire au calcul parallèle / multidimensionnel, c'est à dire que la mémoire des GPUs fonctionne plutôt comme des tableaux de dimensions variables contenant des éléments que comme une mémoire classique qui contient juste des listes unidimensionnelles d'éléments (après y'a des optims dans les 2 cas sur des sujets d'adressage, de continuité, de lecture séquentielle et tout mais en gros c'est l'idée).
Tout ceci rend les GPU extrêmement performants pour les domaine suivants (suivant les problèmes et les algos en jeu, la performance peut en gros aller de x10 à x10000)
Le calcul matriciel de de manière plus générale, l'algèbre linéaire
Le DSP entre autres par le calcul de transformée de Fourier
L'analyse de données automatisée
Le deep learning / l'IA
Le hachage / toutes sortes d'applications en crypto (et donc le minage de cryptomonnaies aussi)
Les statistiques
Le traitement d'image
Le rendu 3D
La compression / décompression et donc le codage / décodage de toutes sortes de flux
...encore plein d'autres que j'oublie
En gros mettons qu'on ait deux listes de 1000 nombres à multiplier entre eux un à un (en gros, on cherche une troisième liste de 1000 nombres contenant le produit du premier de la première liste par le premier de la seconde liste, du second de la première par le second de la deuxième, etc)
Un processeur classique va aller charger la première paire, calculer le produit, la mettre dans la liste de sortie, et répéter mille fois cette opération pour les mille paires à calculer. On sent bien que ça va prendre du temps, surtout si la liste fait plus de mille nombres ou que les opérations sont plus complexes qu'un simple produit de Hadmard (qui est en fait le nom du truc que j'ai grossièrement utilisé comme exemple ici)
Un GPU va pouvoir effectuer la multiplication "en une seule fois". Il faut un peu visualiser ça comme une sorte d'énorme usine avec plein de chaînes de montage en parallèle, qui effectuent toutes la même opération au même moment, mais pas sur les mêmes données).
Ces chaînes de montage ne peuvent pas être contrôlées indépendamment les unes des autres, et ont une performance moyenne. Ça les rend pas très efficaces pour faire une tâche complexe en continu, mais extrêmement efficaces pour faire un nombre énorme de tâches simples en même temps.
Après, pour aller avec tout ça, les GPUs sont munis de mémoires particulièrement bien étudiées qui permettent de mettre a profit cette architecture parallèle. L'idée est d'implémenter sur silicium tout le bazar nécessaire au calcul parallèle / multidimensionnel, c'est à dire que la mémoire des GPUs fonctionne plutôt comme des tableaux de dimensions variables contenant des éléments que comme une mémoire classique qui contient juste des listes unidimensionnelles d'éléments (après y'a des optims dans les 2 cas sur des sujets d'adressage, de continuité, de lecture séquentielle et tout mais en gros c'est l'idée).
Tout ceci rend les GPU extrêmement performants pour les domaine suivants (suivant les problèmes et les algos en jeu, la performance peut en gros aller de x10 à x10000)
Le calcul matriciel de de manière plus générale, l'algèbre linéaire
Le DSP entre autres par le calcul de transformée de Fourier
L'analyse de données automatisée
Le deep learning / l'IA
Le hachage / toutes sortes d'applications en crypto (et donc le minage de cryptomonnaies aussi)
Les statistiques
Le traitement d'image
Le rendu 3D
La compression / décompression et donc le codage / décodage de toutes sortes de flux
...encore plein d'autres que j'oublie