Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

gpuDevice

Interroger ou sélectionner un dispositif GPU

Description

Un objet GPUDevice représente une unité de traitement graphique (GPU) dans votre ordinateur. Vous pouvez utiliser le GPU pour exécuter du code MATLAB® qui prend en charge les variables gpuArray ou exécuter des noyaux CUDA® à l'aide d'objets CUDAKernel.

Vous pouvez utiliser un objet GPUDevice pour inspecter les propriétés de votre dispositif GPU, réinitialiser le dispositif GPU ou attendre que votre GPU termine l'exécution d'un calcul. Pour obtenir un objet GPUDevice, utilisez la fonction gpuDevice. Vous pouvez également sélectionner ou désélectionner votre dispositif GPU à l'aide de la fonction gpuDevice. Si vous avez accès à plusieurs GPU, utilisez la fonction gpuDevice pour choisir un dispositif GPU spécifique sur lequel exécuter votre code.

Vous n'avez pas besoin d'utiliser un objet GPUDevice pour exécuter des fonctions sur un GPU. Pour plus d'informations sur l'utilisation des fonctions compatibles GPU, voir Exécuter les fonctions MATLAB sur un GPU .

Création

Description

gpuDevice affiche les propriétés du dispositif GPU actuellement sélectionné. S'il n'y a aucun périphérique actuellement sélectionné, gpuDevice sélectionne le périphérique par défaut sans l'effacer. Utilisez cette syntaxe lorsque vous souhaitez inspecter les propriétés de votre dispositif GPU.

D = gpuDevice renvoie un objet GPUDevice représentant le périphérique actuellement sélectionné. S'il n'y a aucun périphérique actuellement sélectionné, gpuDevice sélectionne le périphérique par défaut et renvoie un objet GPUDevice représentant ce périphérique sans l'effacer.

exemple

D = gpuDevice(ind) sélectionne le dispositif GPU spécifié par l'index ind . Si le dispositif GPU spécifié n'est pas pris en charge, une erreur se produit. Cette syntaxe réinitialise le périphérique spécifié et efface sa mémoire, même si le périphérique est déjà actuellement sélectionné (équivalent à la fonction reset). Toutes les variables de l'espace de travail représentant les variables gpuArray ou CUDAKernel sont désormais invalides et doivent être supprimées de l'espace de travail ou redéfinies.

exemple

Dans gpuDevice([]), avec un argument vide (par opposition à aucun argument), désélectionne le dispositif GPU et efface sa mémoire des variables gpuArray et CUDAKernel. Cette syntaxe ne laisse aucun dispositif GPU sélectionné comme périphérique actuel.

exemple

Arguments d'entrée

développer tout

Index du dispositif GPU, spécifié sous la forme d'un entier compris entre 1 et gpuDeviceCount.

Exemple : gpuDevice(1);

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Propriétés

développer tout

Identité

Ce propriété est en lecture seule.

Nom du dispositif GPU, spécifié sous forme de tableau de caractères. Le nom attribué à l'appareil est dérivé du modèle de GPU.

Types de données : char

Ce propriété est en lecture seule.

Index du dispositif GPU, spécifié sous la forme d'un entier compris entre 1 et gpuDeviceCount. Utilisez cet index pour sélectionner un dispositif GPU particulier.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Depuis R2024a

Ce propriété est en lecture seule.

Identifiant unique universel (UUID) du périphérique, spécifié sous forme de tableau de caractères.

L'UUID commence généralement par 'GPU-' et comprend une séquence hexadécimale de 36 caractères. Vous pouvez utiliser l'UUID pour distinguer des GPU par ailleurs identiques.

Types de données : char

État

Ce propriété est en lecture seule.

Drapeau pour le périphérique actuellement sélectionné, spécifié par les valeurs logiques 0 (false) ou 1 (true).

Types de données : logical

Ce propriété est en lecture seule.

Drapeau pour le périphérique disponible, spécifié par les valeurs logiques 0 (false) ou 1 (true). Cette propriété indique si le périphérique est disponible pour une utilisation dans la session MATLAB en cours. Les périphériques non pris en charge avec une propriété DeviceSupported de 0 (false) sont toujours indisponibles. Un périphérique peut également être indisponible si sa propriété ComputeMode est définie sur 'Exclusive thread', 'Exclusive process' ou 'Prohibited'.

Types de données : logical

Ce propriété est en lecture seule.

Drapeau pour le périphérique pris en charge, spécifié par les valeurs logiques 0 (false) ou 1 (true). Tous les appareils ne sont pas pris en charge ; par exemple, les appareils avec ComputeCapability insuffisant.

Types de données : logical

Depuis R2024b

Ce propriété est en lecture seule.

Date et heure du dernier accès au périphérique par la session MATLAB actuelle, spécifiées sous la forme d'un tableau scalaire datetime. Si l'appareil n'a pas été consulté au cours de cette session, alors LastAccessed est Pas-un-Moment (NaT).

La plupart des utilisations d'un dispositif GPU dans MATLAB mettent à jour LastAccessed, notamment :

  • Sélection d'un dispositif à l'aide de gpuDevice .

  • Réinitialiser un appareil à l'aide de reset .

  • Créer ou utiliser un gpuArray .

L'interrogation des propriétés du périphérique actuellement sélectionné ne met pas à jour LastAccessed.

Types de données : datetime

Mémoire

Ce propriété est en lecture seule.

Mémoire totale (en octets) sur le périphérique, spécifiée sous forme de valeur scalaire.

Types de données : double

Ce propriété est en lecture seule.

Mémoire totale (en octets) disponible pour les données, spécifiée sous forme de valeur scalaire. Cette propriété est disponible uniquement pour l'appareil actuellement sélectionné. Cette valeur peut différer de la valeur signalée par l'interface de gestion du système NVIDIA® en raison de la mise en cache de la mémoire.

Types de données : double

Depuis R2023a

Politique de mise en cache du dispositif GPU, spécifiée comme 'balanced', 'minimum' ou 'maximum'. La politique de mise en cache détermine la quantité de mémoire GPU pouvant être mise en cache pour accélérer le calcul, spécifiée comme l'une des valeurs suivantes.

  • 'minimum' – La quantité de mémoire pouvant être mise en cache sur le dispositif GPU est minimal.

  • 'balanced' – La quantité de mémoire pouvant être mise en cache sur le dispositif GPU est équilibrée. Cette politique fournit un équilibre entre l’utilisation de la mémoire GPU et les performances de calcul.

  • 'maximum' – La quantité de mémoire pouvant être mise en cache sur le dispositif GPU n’est limitée que par la mémoire totale du dispositif.

La valeur par défaut est 'balanced' pour les périphériques en mode de calcul 'Default' ou 'Prohibited' et 'maximum' pour les périphériques en mode de calcul 'Exclusive process'. Pour plus d'informations sur la propriété du mode de calcul, voir ComputeMode .

Remarque

  • La réinitialisation de l'appareil à l'aide de reset, l'effacement de l'appareil à l'aide de gpuDevice([]) ou la sélection d'un autre appareil à l'aide de gpuDevice réinitialise la politique de mise en cache à la politique par défaut.

  • L'enregistrement et le chargement d'un fichier MAT contenant un objet GPUDevice ne préservent pas la politique de mise en cache.

  • Vous ne pouvez pas définir la politique de mise en cache d’un périphérique qui n’est pas sélectionné. Par exemple, après avoir stocké un premier objet GPUDevice dans un tableau et sélectionné un autre périphérique, vous ne pouvez pas définir la politique de mise en cache du premier objet GPUDevice.

Types de données : char | string

Driver

Depuis R2023a

Ce propriété est en lecture seule.

Version du pilote graphique actuellement utilisée par le dispositif GPU, spécifiée sous forme de tableau de caractères.

Téléchargez le dernier pilote graphique pour votre GPU sur NVIDIA Téléchargements de pilotes.

Types de données : char

Depuis R2023a

Ce propriété est en lecture seule.

Modèle de fonctionnement du pilote graphique, spécifié comme l'une de ces valeurs :

  • 'WDDM' – Utiliser le modèle de fonctionnement d’affichage.

  • 'TCC' – Utilise le modèle d’exploitation de calcul. 'TCC' désactive les graphiques Windows® et peut améliorer les performances des calculs à grande échelle.

  • 'N/A''WDDM' et 'TCC' ne sont disponibles que sur Windows . Sur d’autres systèmes d’exploitation, le modèle de pilote est 'N/A' .

Pour plus d'informations sur le changement de modèle et sur les dispositifs GPU prenant en charge 'TCC', consultez la documentation NVIDIA.

Types de données : char

Ce propriété est en lecture seule.

Mode de calcul de l'appareil, spécifié comme l'une des valeurs suivantes.

'Default'L'appareil n'est pas restreint et plusieurs applications peuvent l'utiliser simultanément. MATLAB peut partager l'appareil avec d'autres applications, y compris d'autres sessions ou workers MATLAB.
'Exclusive process'Une seule application à la fois peut utiliser l'appareil. Lorsque le périphérique est sélectionné dans MATLAB, les autres applications ne peuvent pas l'utiliser, y compris les autres sessions ou workers MATLAB.
'Prohibited'L'appareil ne peut pas être utilisé.

Pour plus d'informations sur la modification du mode de calcul de votre dispositif GPU, consultez la documentation NVIDIA.

Types de données : char

Ce propriété est en lecture seule.

Drapeau de dépassement de délai pour les noyaux de longue durée, spécifié comme 0 (false) ou 1 (true). Si KernelExecutionTimeout est 1 (true), alors le système d'exploitation place une limite supérieure sur le temps autorisé pour que le noyau CUDA s'exécute. Passé ce délai, le pilote CUDA fait expirer le noyau et renvoie une erreur.

Types de données : logical

Fonctionnalités

Ce propriété est en lecture seule.

Capacité de calcul du dispositif GPU, spécifiée sous forme de tableau de caractères. Pour utiliser le dispositif GPU sélectionné dans MATLAB, ComputeCapability doit répondre à la spécification requise dans Exigences de calcul du GPU.

Types de données : char

Ce propriété est en lecture seule.

Nombre de multiprocesseurs de streaming présents sur l'appareil, spécifié sous forme de valeur scalaire.

Ce propriété est en lecture seule.

Fréquence d'horloge maximale du GPU en kHz, spécifiée sous forme de valeur scalaire.

Types de données : double

Depuis R2024b

Ce propriété est en lecture seule.

Rapport entre les unités à virgule flottante (FPU) simple et double précision sur le périphérique, spécifié sous forme de valeur scalaire.

Le rapport indique la puissance de traitement simple précision par rapport à la puissance de traitement double précision de l'appareil. Les appareils adaptés aux calculs de double précision, tels que la résolution de systèmes linéaires, ont généralement un rapport plus faible. Les appareils adaptés aux calculs de précision simple, tels que la formation de réseaux neuronaux profonds et le rendu graphique, ont généralement un ratio plus élevé.

Types de données : double

Programmation du noyau

Ce propriété est en lecture seule.

Nombre maximal de threads pris en charge par bloc pendant l'exécution de CUDAKernel, spécifié sous forme de valeur scalaire.

Exemple : 1024

Types de données : double

Ce propriété est en lecture seule.

Quantité maximale prise en charge de mémoire partagée qu'un bloc de thread peut utiliser pendant l'exécution de CUDAKernel, spécifiée sous forme de valeur scalaire.

Types de données : double

Ce propriété est en lecture seule.

Taille maximale dans chaque dimension pour le bloc de thread, spécifiée sous forme de vecteur. Chaque dimension d'un bloc thread ne doit pas dépasser ces dimensions. De plus, le produit de la taille du bloc de thread ne doit pas dépasser MaxThreadsPerBlock.

Exemple : [1024 1024 64]

Types de données : double

Ce propriété est en lecture seule.

Taille maximale de la grille des blocs de threads, spécifiée sous forme de vecteur.

Exemple : [2.1475e+09 65535 65535]

Types de données : double

Ce propriété est en lecture seule.

Nombre de threads exécutés simultanément, spécifié sous forme de valeur scalaire.

Types de données : double

Ce propriété est en lecture seule.

Version de la toolbox CUDA utilisée par la version actuelle de MATLAB, spécifiée comme valeur scalaire.

Types de données : double

Fonctions d'objet

resetRéinitialiser le dispositif GPU et effacer sa mémoire
wait (GPUDevice)Wait for GPU calculation to complete

Les fonctions suivantes sont également disponibles :

parallel.gpu.GPUDevice.isAvailable(ind)Renvoie 1 ou true logique si le GPU spécifié par l'index ind est pris en charge et peut être sélectionné. ind peut être un entier ou un vecteur d'entiers ; l'index par défaut est le périphérique actuel.
parallel.gpu.GPUDevice.getDevice(ind)Renvoie un objet GPUDevice sans le sélectionner.

Pour une liste complète des fonctions, utilisez la fonction methods sur l'objet GPUDevice :

methods('parallel.gpu.GPUDevice')

Vous pouvez obtenir de l'aide sur n'importe quelle fonction d'objet avec la commande suivante 

help parallel.gpu.GPUDevice.functionname

functionname est le nom de la fonction. Par exemple, pour obtenir de l'aide sur isAvailable, tapez :

help parallel.gpu.GPUDevice.isAvailable

Exemples

réduire tout

Cet exemple montre comment utiliser gpuDevice pour identifier et sélectionner le périphérique que vous souhaitez utiliser.

Pour déterminer le nombre de dispositifs GPU disponibles sur votre ordinateur, utilisez la fonction gpuDeviceCount.

gpuDeviceCount("available")
ans = 2

Lorsqu'il y a plusieurs appareils, le premier est celui par défaut. Vous pouvez examiner ses propriétés avec la fonction gpuDeviceTable pour déterminer si c'est celle que vous souhaitez utiliser.

gpuDeviceTable
ans=2×5 table
    Index           Name           ComputeCapability    DeviceAvailable    DeviceSelected
    _____    __________________    _________________    _______________    ______________

      1      "NVIDIA RTX A5000"          "8.6"               true              false     
      2      "Quadro P620"               "6.1"               true              false     

Si le premier appareil est celui que vous souhaitez utiliser, vous pouvez continuer. Pour exécuter des calculs sur le GPU, utilisez les fonctions activées gpuArray. Pour plus d'informations, voir Exécuter les fonctions MATLAB sur un GPU.

Pour vérifier que MATLAB ® peut utiliser votre GPU, utilisez la fonction canUseGPU. La fonction renvoie 1 (true) s'il y a un GPU disponible pour le calcul et 0 (false) sinon.

canUseGPU
ans = logical
   1

Pour diagnostiquer un problème avec la configuration de votre GPU, par exemple si canUseGPU renvoie 0 (false), utilisez la fonction validateGPU. La validation de votre GPU est facultative.

validateGPU
# Beginning GPU validation
# Performing system validation
#    CUDA-supported platform .................................................PASSED
#    CUDA-enabled graphics driver exists .....................................PASSED
#        Version: 537.70
#    CUDA-enabled graphics driver load .......................................PASSED
#    CUDA environment variables ..............................................PASSED
#    CUDA device count .......................................................PASSED
#        Found 2 devices.
#    GPU libraries load ......................................................PASSED
# 
# Performing device validation for device index 1
#    Device exists ...........................................................PASSED
#        NVIDIA RTX A5000
#    Device supported ........................................................PASSED
#    Device available ........................................................PASSED
#        Device is in 'Default' compute mode.
#    Device selectable .......................................................PASSED
#    Device memory allocation ................................................PASSED
#    Device kernel launch ....................................................PASSED
# 
# Finished GPU validation with no failures.

Pour utiliser un autre périphérique, appelez gpuDevice avec l'index de l'autre périphérique.

gpuDevice(2)
ans = 
  CUDADevice with properties:

                 Name: 'Quadro P620'
                Index: 2 (of 2)
    ComputeCapability: '6.1'
          DriverModel: 'WDDM'
          TotalMemory: 2147352576 (2.15 GB)
      AvailableMemory: 1596066816 (1.60 GB)
      DeviceAvailable: true
       DeviceSelected: true

  Show all properties.

Vous pouvez également déterminer le nombre de dispositifs GPU disponibles, inspecter certaines de leurs propriétés et sélectionner un dispositif à utiliser à partir du bureau MATLAB®. Dans l'onglet Accueil, dans la zone Environnement, sélectionnez Parallèle > Sélectionner l'environnement GPU.

gpuDevice2.png

Créez un objet représentant le dispositif GPU par défaut et interrogez sa capacité de calcul.

D = gpuDevice;
D.ComputeCapability
ans = 
'8.6'

Interrogez les capacités de calcul de tous les dispositifs GPU disponibles.

for idx = 1:gpuDeviceCount
    D = gpuDevice(idx);
    fprintf(1,"Device %i has ComputeCapability %s \n", ...
        D.Index,D.ComputeCapability)
end
Device 1 has ComputeCapability 8.6 
Device 2 has ComputeCapability 6.1 

Comparez les capacités de calcul et la disponibilité des dispositifs GPU de votre système à l'aide de gpuDeviceTable.

gpuDeviceTable
ans=2×5 table
    Index           Name           ComputeCapability    DeviceAvailable    DeviceSelected
    _____    __________________    _________________    _______________    ______________

      1      "NVIDIA RTX A5000"          "8.6"               true              false     
      2      "Quadro P620"               "6.1"               true              true      

Modifiez la politique de mise en cache de votre GPU.

Créez un objet représentant le dispositif GPU par défaut.

D = gpuDevice
D = 
  CUDADevice with properties:

                 Name: 'NVIDIA RTX A5000'
                Index: 1 (of 2)
    ComputeCapability: '8.6'
          DriverModel: 'TCC'
          TotalMemory: 25544294400 (25.54 GB)
      AvailableMemory: 25120866304 (25.12 GB)
      DeviceAvailable: true
       DeviceSelected: true

  Show all properties.

Accédez à la propriété CachePolicy du dispositif GPU.

D.CachePolicy
ans = 
'balanced'

Modifiez la politique de mise en cache pour permettre au GPU de mettre en cache la quantité maximale de mémoire pour accélérer le calcul.

D.CachePolicy = "maximum";
D.CachePolicy
ans = 
'maximum'

Réinitialisez la politique de mise en cache sur la politique par défaut en définissant la propriété sur [] .

D.CachePolicy = [];

L'appel de reset(D) ou la sélection d'un autre périphérique avec gpuDevice réinitialise également la politique de mise en cache à sa valeur par défaut.

Si vous avez accès à plusieurs GPU, vous pouvez effectuer vos calculs sur plusieurs GPU en parallèle à l'aide d'un pool parallèle.

Pour déterminer le nombre de GPU disponibles pour une utilisation dans MATLAB, utilisez la fonction gpuDeviceCount.

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

Démarrez un pool parallèle avec autant de workers que de GPU disponibles. Pour de meilleures performances, MATLAB attribue par défaut un GPU différent à chaque worker.

parpool("Processes",availableGPUs);
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 3).

Pour identifier quel GPU chaque worker utilise, appelez gpuDevice à l'intérieur d'un bloc spmd. Le bloc spmd exécute gpuDevice sur chaque worker.

spmd
    gpuDevice
end

Utilisez des fonctionnalités de langage parallèle, telles que parfor ou parfeval, pour distribuer vos calculs aux workers du pool parallèle. Si vous utilisez des fonctions activées gpuArray dans vos calculs, ces fonctions s'exécutent sur le GPU du worker. Pour plus d'informations, voir Exécuter les fonctions MATLAB sur un GPU. Pour un exemple, voir Run MATLAB Functions on Multiple GPUs .

Lorsque vous avez terminé vos calculs, fermez le pool parallèle. Vous pouvez utiliser la fonction gcp pour obtenir le pool parallèle actuel.

delete(gcp("nocreate"));

Si vous souhaitez utiliser un choix différent de GPU, vous pouvez utiliser gpuDevice pour sélectionner un GPU particulier sur chaque nœud de calcul, en utilisant l'indice du dispositif GPU. Vous pouvez obtenir l'index de chaque dispositif GPU de votre système en utilisant la fonction gpuDeviceCount.

Supposons que vous ayez trois GPU disponibles dans votre système, mais que vous souhaitiez n'en utiliser que deux pour un calcul. Obtenir les indices des dispositifs.

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

Définissez les indices des appareils que vous souhaitez utiliser.

useGPUs = [1 3];

Démarrez votre pool parallèle. Utilisez un bloc spmd et gpuDevice pour associer chaque worker à l’un des GPU que vous souhaitez utiliser, à l’aide de l’index du périphérique. La fonction spmdIndex identifie l'index de chaque worker.

parpool("Processes",numel(useGPUs));
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(spmdIndex));
end

En tant que bonne pratique et pour de meilleures performances, attribuez un GPU différent à chaque worker.

Lorsque vous avez terminé vos calculs, fermez le pool parallèle.

delete(gcp("nocreate"));

Capacités étendues

développer tout

Historique des versions

Introduit dans R2010b

développer tout