Le document CUDA ne précise pas combien de processus CUDA peuvent partager un GPU. Par exemple, si je lance plusieurs programmes CUDA par le même utilisateur avec une seule carte GPU installée dans le système, quel est l'effet? Garantira-t-il l'exactitude de l'exécution? Comment le GPU planifie-t-il les tâches dans ce cas?
L'activité CUDA à partir de processus hôtes indépendants créera normalement CUDA --- contextes , un pour chaque processus. Ainsi, l'activité CUDA lancée à partir de processus hôtes distincts aura lieu dans des contextes CUDA distincts, sur le même appareil.
L'activité CUDA dans des contextes séparés sera sérialisée. Le GPU exécutera l'activité d'un processus, et lorsque cette activité est inactive, il peut et va basculer dans un autre contexte pour terminer l'activité CUDA lancée à partir de l'autre processus. Le comportement de planification inter-contexte détaillé n'est pas spécifié. (L'exécution de plusieurs contextes sur un seul GPU ne peut pas non plus normalement violer les limites de base du GPU, telles que la disponibilité de la mémoire pour les allocations de périphériques.)
L '"exception" à ce cas (sérialisation de l'activité GPU à partir de processus hôtes indépendants) serait le serveur multi-processus CUDA. En bref, le MPS agit comme un "entonnoir" pour collecter l'activité CUDA émanant de plusieurs processus hôtes, et exécuter cette activité comme si elle émanait d'un seul Processus hôte. Le principal avantage est d'éviter le sérialisation de noyaux qui pourraient autrement fonctionner simultanément . Le cas d'utilisation canonique serait de lancer plusieurs rangs MPI qui ont tous l'intention d'utiliser une seule ressource GPU.
Notez que la description ci-dessus s'applique aux GPU qui sont dans le "Default" mode de calcul . Les GPU en modes de calcul "Processus exclusif" ou "Thread exclusif" rejetteront toutes les tentatives de création de plusieurs processus/contextes sur un seul appareil. Dans l'un de ces modes, les tentatives d'autres processus d'utiliser un appareil déjà utilisé entraîneront un échec de l'API CUDA. Le mode de calcul est modifiable dans certains cas à l'aide de l'utilitaire nvidia-smi .