Contenu principal

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

gpuArray

Description

Un objet gpuArray représente un tableau stocké dans la mémoire du GPU. Un grand nombre de fonctions dans MATLAB® et dans d'autres toolboxes prennent en charge les objets gpuArray, vous permettant d'exécuter votre code sur des GPU avec des modifications minimales du code. Pour travailler avec des objets gpuArray, utilisez n'importe quelle fonction MATLAB compatible gpuArray telle que fft, mtimes ou mldivide. Pour trouver une liste complète des fonctions compatibles gpuArray dans MATLAB et dans d'autres toolboxes, voir Fonctions prises en charge par le GPU. Pour plus d'informations, voir Exécuter les fonctions MATLAB sur un GPU.

Si vous souhaitez récupérer le tableau à partir du GPU, par exemple lorsque vous utilisez une fonction qui ne prend pas en charge les objets gpuArray, utilisez la fonction gather.

Remarque

Vous pouvez charger des fichiers MAT contenant des données gpuArray sous forme de tableaux en mémoire lorsqu'un GPU n'est pas disponible. Un objet gpuArray chargé sans GPU est limité et vous ne pouvez pas l'utiliser pour des calculs. Pour utiliser un objet gpuArray chargé sans GPU, récupérez le contenu en utilisant gather .

Création

Utilisez gpuArray pour convertir un tableau de l'espace de travail MATLAB en un objet gpuArray. Certaines fonctions MATLAB vous permettent également de créer directement des objets gpuArray. Pour plus d'informations, voir Establish Arrays on a GPU.

Description

G = gpuArray(X) copie le tableau X sur le GPU et renvoie un objet gpuArray.

exemple

Arguments d'entrée

développer tout

Tableau à transférer vers le GPU, spécifié sous forme de tableau numérique ou logique. Le dispositif GPU doit disposer de suffisamment de mémoire libre pour stocker les données. Si X est déjà un objet gpuArray, gpuArray renvoie X inchangé.

Vous pouvez également transférer des tableaux parcimonieux vers le GPU. gpuArray ne prend en charge que les tableaux parcimonieux de double précision.

Exemple : G = gpuArray(magic(3));

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Support des nombres complexes : Oui

Fonctions d'objet

arrayfunApply function to each element of array on GPU
gatherTransférer un tableau distribué, un objet Composite ou un objet gpuArray vers l'espace de travail local
pagefunApply function to each page of distributed or GPU array

Il existe plusieurs méthodes pour examiner les caractéristiques d'un objet gpuArray. La plupart se comportent comme les fonctions MATLAB du même nom.

isgpuarrayDetermine whether input is gpuArray
existsOnGPUDetermine if gpuArray or CUDAKernel is available on GPU
isUnderlyingTypeDetermine whether input has specified underlying data type
ndimsNumber of array dimensions
sizeArray size
underlyingTypeType of underlying data determining array behavior

Plusieurs toolboxes MATLAB incluent des fonctions avec un support de gpuArray. Pour afficher les listes de toutes les fonctions de ces toolboxes qui prennent en charge les objets gpuArray, utilisez les liens dans le tableau suivant. Les fonctions dans les listes avec des indicateurs d'information ont des limitations ou des notes d'utilisation spécifiques à l'exécution de la fonction sur un GPU. Vous pouvez consulter les notes d’utilisation et les limitations dans la section Capacités étendues de la page de référence des fonctions. Pour plus d'informations sur les mises à jour des fonctions individuelles compatibles gpuArray, consultez les notes de version.

Nom de la toolboxListe des fonctions avec support de gpuArrayDocumentation spécifique au GPU
MATLABFonctions avec prise en charge gpuArray 
Statistics and Machine Learning Toolbox™Fonctions avec prise en charge gpuArray (Statistics and Machine Learning Toolbox)Analyze and Model Data on GPU (Statistics and Machine Learning Toolbox)
Image Processing Toolbox™Fonctions avec prise en charge gpuArray (Image Processing Toolbox)GPU Computing (Image Processing Toolbox)
Deep Learning Toolbox™

Fonctions avec prise en charge gpuArray (Deep Learning Toolbox)

*(voir aussi Deep Learning avec les GPU)

Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox)

Deep Learning with MATLAB on Multiple GPUs (Deep Learning Toolbox)

Computer Vision Toolbox™Fonctions avec prise en charge gpuArray (Computer Vision Toolbox)Génération et accélération de code GPU (Computer Vision Toolbox)
Communications Toolbox™Fonctions avec prise en charge gpuArray (Communications Toolbox)Génération de code C/C++ (Communications Toolbox)
5G Toolbox™Fonctions avec prise en charge gpuArray (5G Toolbox) 
Signal Processing Toolbox™Fonctions avec prise en charge gpuArray (Signal Processing Toolbox)Génération de code et support des cartes graphiques (Signal Processing Toolbox)
Audio Toolbox™Fonctions avec prise en charge gpuArray (Audio Toolbox)Code Generation and GPU Support (Audio Toolbox)
Wavelet Toolbox™Fonctions avec prise en charge gpuArray (Wavelet Toolbox)Génération de code et support des cartes graphiques (Wavelet Toolbox)
Curve Fitting Toolbox™Fonctions avec prise en charge gpuArray (Curve Fitting Toolbox) 

Pour obtenir une liste des fonctions prenant en charge gpuArray dans tous les produits MathWorks®, consultez Fonctions prises en charge par gpuArray. Alternativement, vous pouvez filtrer par produit. Dans la barre Help, cliquez sur Functions . Dans la liste des fonctions, parcourez le volet de gauche pour sélectionner un produit, par exemple, MATLAB . En bas du volet de gauche, sélectionnez GPU Arrays . Si vous sélectionnez un produit qui ne dispose pas de fonctions gpuArray, le filtre GPU Arrays n'est pas disponible.

Exemples

réduire tout

Pour transférer des données du CPU vers le GPU, utilisez la fonction gpuArray.

Créez un tableau X .

X = [1,2,3];

Transférez X vers le GPU.

G = gpuArray(X);

Vérifiez que les données sont sur le GPU.

isgpuarray(G)
ans = logical
   1

Calculez le carré élément par élément du tableau G .

GSq = G.^2;

Transférez le résultat GSq vers le CPU.

XSq = gather(GSq)
XSq = 1×3

     1     4     9

Vérifiez que les données ne sont pas sur le GPU.

isgpuarray(XSq)
ans = logical
   0

Vous pouvez créer des données directement sur le GPU en utilisant certaines fonctions MATLAB et en spécifiant l'option "gpuArray" .

Créez un tableau de nombres aléatoires directement sur le GPU.

G = rand(1,3,"gpuArray")
G =

    0.3640    0.5421    0.6543

Vérifiez que la sortie est stockée sur le GPU.

isgpuarray(G)
ans = logical
   1

Cet exemple montre comment utiliser les fonctions MATLAB compatibles gpuArray pour fonctionner avec les objets gpuArray. Vous pouvez vérifier les propriétés de votre GPU en utilisant la fonction gpuDevice.

gpuDevice
ans = 
  CUDADevice with properties:

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

  Show all properties.

Créez un vecteur de ligne qui répète les valeurs de -15 à 15. Pour le transférer au GPU et créer un objet gpuArray, utilisez la fonction gpuArray.

X = [-15:15 0 -15:15 0 -15:15];
gpuX = gpuArray(X);
whos gpuX
  Name      Size            Bytes  Class       Attributes

  gpuX      1x95              760  gpuArray              

Pour fonctionner avec les objets gpuArray, utilisez n'importe quelle fonction MATLAB compatible gpuArray. MATLAB exécute automatiquement les calculs sur le GPU. Pour plus d'informations, voir Exécuter les fonctions MATLAB sur un GPU. Par exemple, utilisez diag, expm, mod, round, abs et fliplr ensemble.

gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1));
gpuM = mod(round(abs(gpuE)),2);
gpuF = gpuM + fliplr(gpuM);

Tracez les résultats.

imagesc(gpuF);
colormap(flip(gray));

Si vous devez transférer les données depuis le GPU, utilisez gather . Le transfert de données vers le processeur peut être coûteux et n'est généralement pas nécessaire, sauf si vous devez utiliser votre résultat avec des fonctions qui ne prennent pas en charge gpuArray.

result = gather(gpuF);
whos result
  Name         Size            Bytes  Class     Attributes

  result      96x96            73728  double              

En général, l’exécution de code sur le CPU et le GPU peut produire des résultats différents en raison de la précision numérique et des différences algorithmiques entre le GPU et le CPU. Les réponses du CPU et du GPU sont toutes deux des approximations à virgule flottante tout aussi valables du véritable résultat analytique, ayant été soumises à un comportement d'arrondi différent pendant le calcul. Dans cet exemple, les résultats sont des entiers et round élimine les erreurs d'arrondi.

Cet exemple montre comment utiliser les fonctions et opérateurs MATLAB avec les objets gpuArray pour calculer l'intégrale d'une fonction en utilisant la méthode d'intégration de Monte Carlo.

Définissez le nombre de points à échantillonner. Échantillonnez des points dans le domaine de la fonction, l'intervalle [-1,1] dans les coordonnées x et y, en créant des points aléatoires avec la fonction rand. Pour créer un tableau aléatoire directement sur le GPU, utilisez la fonction rand et spécifiez "gpuArray" . Pour plus d'informations, voir Establish Arrays on a GPU.

n = 1e6;
x = 2*rand(n,1,"gpuArray")-1;
y = 2*rand(n,1,"gpuArray")-1;

Définissez la fonction à intégrer et utilisez la formule d'intégration de Monte Carlo dessus. Cette fonction approxime la valeur de π en échantillonnant des points dans le cercle unité. Étant donné que le code utilise des fonctions et des opérateurs compatibles gpuArray sur des objets gpuArray, les calculs s'exécutent automatiquement sur le GPU. Vous pouvez effectuer des opérations binaires telles que la multiplication élément par élément en utilisant la même syntaxe que celle que vous utilisez pour les tableaux MATLAB. Pour plus d'informations sur les fonctions compatibles gpuArray, voir Exécuter les fonctions MATLAB sur un GPU .

f = x.^2 + y.^2 <= 1;
result = 4*nnz(f)/n
result = 3.1433

Limites

  • Aucun des éléments suivants ne peut dépasser intmax("int32") :

    • Le nombre d'éléments d'un tableau dense.

    • Le nombre d'éléments non nuls d'un tableau parcimonieux.

    • La taille dans une dimension donnée. Par exemple, zeros(0,3e9,"gpuArray") n'est pas autorisé.

  • La distribution d'un gpuArray parmi les workers d'un pool parallèle à l'aide des fonctions distributed ou codistributed n'est pas prise en charge. Si vous disposez de plusieurs GPU et que chaque worker de votre pool parallèle a accès à un GPU unique, vous pouvez à la place diviser manuellement ou générer initialement vos données sous forme de plusieurs objets gpuArray sur différents workers. Pour des exemples montrant comment utiliser les données gpuArray dans un pool parallèle, voir Run MATLAB Functions on Multiple GPUs .

  • Limitations d'un gpuArray parcimonieux :

    • Les tableaux GPU parcimonieux prennent uniquement en charge le référencement de lignes ou de colonnes entières par index.

    • L'attribution de valeurs à des tableaux GPU parcimonieux par index n'est pas supporté.

    Pour plus d'informations, voir Travailler avec des tableaux parcimonieux sur un GPU.

Conseils

  • Si vous avez besoin de meilleures performances ou si une fonction n'est pas disponible sur le GPU, gpuArray prend en charge les options suivantes :

    • Pour précompiler et exécuter du code purement élément par élément sur des objets gpuArray, utilisez la fonction arrayfun.

    • Pour exécuter du code C++ contenant du code de périphérique CUDA® ou des appels de bibliothèque, utilisez une fonction MEX. Pour plus d'informations, voir Run MEX Functions Containing CUDA Code.

    • Pour exécuter les noyaux GPU existants écrits en CUDA C++, utilisez l'interface MATLAB CUDAKernel. Pour plus d'informations, voir Run CUDA or PTX Code on GPU.

    • Pour générer du code CUDA à partir du code MATLAB, utilisez GPU Coder™ . Pour plus d'informations, voir Get Started with GPU Coder (GPU Coder).

  • Pour contrôler le flux de nombres aléatoires sur le GPU, utilisez la fonction gpurng.

Alternatives

Vous pouvez également créer un objet gpuArray à l'aide de certaines fonctions MATLAB en spécifiant une sortie gpuArray. Le tableau suivant répertorie les fonctions MATLAB qui vous permettent de créer directement des objets gpuArray. Pour plus d’informations, consultez la section Capacités étendues de la page de référence des fonctions.

eye(___,"gpuArray")true(___,"gpuArray")
false(___,"gpuArray")zeros(___,"gpuArray")
Inf(___,"gpuArray")createArray(___,"gpuArray") (depuis R2024a)
NaN(___,"gpuArray")gpuArray.colon
ones(___,"gpuArray")gpuArray.freqspace
rand(___,"gpuArray")gpuArray.linspace
randi(___,"gpuArray")gpuArray.logspace
randn(___,"gpuArray")gpuArray.speye

Capacités étendues

développer tout

Historique des versions

Introduit dans R2010b