FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 43, dernière mise à jour : 16 juin 2021
Il s'agit d'une simple idée : pour simplifier le développement, il faut utiliser partout la même architecture, parfois au détriment des performances.
Le CPU tend à être le meilleur pour les opérations sérielles, avec beaucoup de branchements et d'accès aléatoires à la mémoire. Le GPU, a contrario, excelle sur des calculs massivement parallèles avec des flottants.
Le calcul homogène, c'est simplement utiliser le même processeur pour toutes les opérations.
On parle aussi de calcul homogène s'il est effectué sur une seule et même plateforme : Windows, macOS, GNU/Linux, GNU/Hurd…
Lien : Le calcul sériel
Il s'agit d'une simple idée : pour obtenir la meilleure efficacité, les applications devraient utiliser les deux processeurs des ordinateurs : le CPU et le GPU.
Le CPU tend à être le meilleur pour les opérations sérielles, avec beaucoup de branchements et d'accès aléatoires à la mémoire. Le GPU, a contrario, excelle sur des calculs massivement parallèles avec des flottants.
Le calcul hétérogène, c'est simplement utiliser le bon processeur pour la bonne opération.
On parle aussi de calcul hétérogène s'il est effectué sur différentes plateformes : Windows, macOS, GNU/Linux, GNU/Hurd…
Lien : Le calcul sériel
Aussi dit calcul en série ou calcul séquentiel.
Il s'agit de calcul qui ne peut se diviser en parties distinctes : elles doivent se dérouler l'une après l'autre.
Les données sur lesquelles un processeur de calcul sériel seront envoyées une à une, en file.
Les CPU sont des processeurs à calcul sériel. En effet, on leur demande d'effectuer de longs calculs complexes (c'est-à-dire à multiples embranchements) sur une assez petite quantité de données. Jusqu'à présent, ils étaient aussi utilisés pour des tâches relevant du calcul parallèle, parce que leur puissance le leur permettait. Désormais, la fréquence des processeurs ne peut plus augmenter (les limites de la physique sont presque atteintes à des fréquences de 5 Ghz).
Lien : Le calcul hétérogène
Lien : Données parallèles
Il s'agit de calcul qui peut être divisé en parties distinctes, chacune exécutée en même temps que les autres.
Les données sur lesquelles un processeur de calcul parallèle seront envoyées ensemble, d'un seul coup, pour autant que la bande passante le permette.
Les GPU sont des processeurs à calcul parallèle. En effet, on leur demande d'effectuer peu de traitements quantitatifs, mais sur une masse énorme de données. De plus, ils ont des restrictions budgétaires, qui ont fait qu'ils ne peuvent pas intégrer des processeurs rapides (c'est-à-dire cadencés à plusieurs gigahertz, le premier ayant été atteint il y a peu). Les ingénieurs ont donc dû trouver un moyen de traiter autant de données en très peu de temps. La solution retenue a été beaucoup d'unités de calculs à faible fréquence, qui fonctionnent en parallèle.
Lien : Le calcul hétérogène
Des données sont parallèles si elles peuvent être traitées séparément, et en parallèle. Par exemple, des phénomènes physiques indépendants (agissant sur des objets différents). Des données parallèles peuvent aussi arriver parallèlement au processeur pour traitement.
Ce concept de données parallèles doit être compris avec celui de calcul parallèle. L'un ne peut aller sans l'autre : dans le cas de calcul sériel, pas besoin de données parallèles. Seules les données parallèles permettent de pleinement utiliser la capacité d'un processeur à calcul parallèle. Ce genre de processeur peut en effet traiter des flux de données, sans cesse augmentés.
Lien : Calcul parallèle
Lien : Calcul sériel
L'hôte est le processeur qui ordonne à l'autre (un GPU) d'effectuer des calculs précis sur un ensemble de données donné. Pour le moment, l'hôte est le CPU.
Le processeur de l'hôte effectue du calcul sériel, toujours, pour le moment.
L'hôte est chargé de fournir le travail, de l'ordonner, d'en récupérer les résultats, mais aussi de gérer les différentes erreurs qui pourraient advenir.
Lien : Calcul sériel
Le périphérique est celui qui effectue les calculs demandés par l'hôte. Pour le moment, il s'agit du GPU.
Le processeur du périphérique effectue du calcul parallèle, toujours, pour le moment.
Le périphérique est chargé de recevoir le travail, de l'exécuter, d'écrire le résultat sur la mémoire du GPU, de retourner les erreurs éventuelles.
Lien : Calcul parallèle
Un kernel est une fonction qui sera exécutée, sur le CPU, sur le GPU ou n'importe où.
Un kernel a, pour vocation, d'être souvent instancié, pour respecter le principe de la parallélisation des données.
Un kernel doit commencer par choisir ses données, ensuite il effectue sa tâche sur ces données uniquement et retourne le résultat dans la mémoire du GPU.
Les kernels sont limités en longueur : sous CUDA, ils sont limités à 2 000 000 d'instructions PTX, ce qui est fort long.
Lien : Parallélisme des données
Lien : PTX
Si un kernel est appelé de manière synchrone, il ne retournera que quand les calculs auront été effectués.
Si un kernel est appelé de manière asynchrone, il retournera avant que les calculs soient effectués.
Les fonctions d'accès à la mémoire (lecture et écriture sur le GPU depuis le CPU) sont synchrones : elles attendent que tous les threads aient fini de travailler avant d'effectuer leur opération.
Lien : Parallélisme des données