Exécuter les fonctions MATLAB sur un GPU
Vous pouvez accélérer votre code en exécutant les fonctions MATLAB® sur un GPU. Le calcul GPU dans MATLAB nécessite Parallel Computing Toolbox™ .
Fonctions MATLAB avec arguments gpuArray
De nombreuses fonctions dans MATLAB et d'autres toolboxes s'exécutent automatiquement sur un GPU si vous fournissez un argument de données gpuArray
. Un gpuArray
dans MATLAB représente un tableau qui est stocké sur le GPU.
A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]); e = eig(A);
Chaque fois que vous appelez l’une de ces fonctions avec au moins un gpuArray
comme argument d’entrée de données, la fonction s’exécute sur le GPU. La fonction génère un gpuArray
comme résultat, à moins que le renvoi de données numériques à l'espace de travail local ne soit plus approprié (par exemple, size
). Vous pouvez mélanger des entrées en utilisant à la fois des données gpuArray
et des tableaux stockés dans la mémoire hôte dans le même appel de fonction. Les fonctions compatibles gpuArray
incluent la transformée de Fourier discrète (fft
), la multiplication matricielle (mtimes
), la division matricielle gauche (mldivide
) et des centaines d'autres.
Conditions pour les entrées gpuArray
Les fonctions compatibles GPU s'exécutent sur le GPU uniquement lorsque les données d'entrée se trouvent sur le GPU. Le type de données des arguments de paramètre tels que les dimensions ou les indices n'affecte pas l'endroit où la fonction est exécutée. Par exemple, la fonction sum
dans ce code s'exécute sur le GPU car les données, la première entrée, se trouvent sur le GPU.
A = rand(10); d = 2; sum(gpuArray(A),d);
sum
dans ce code ne s'exécute pas sur le GPU car les données, la première entrée, ne sont pas sur le GPU.A = rand(10); d = 2; sum(A,gpuArray(d));
Travailler avec des nombres complexes sur un GPU
Si la sortie d’une fonction exécutée sur un GPU peut potentiellement être complexe, vous devez spécifier explicitement ses arguments d’entrée comme complexes. Pour plus d'informations, voir Work with Complex Numbers on a GPU.
Travailler avec des tableaux parcimonieux sur un GPU
La fonction sparse
peut être utilisée pour créer des objets gpuArray
parcimonieux. De nombreuses fonctions MATLAB prennent en charge les objets gpuArray
parcimonieux. Pour plus d'informations, voir Travailler avec des tableaux parcimonieux sur un GPU.
Vérifier les fonctions supportées par gpuArray
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 toolbox | Liste des fonctions avec support de gpuArray | Documentation spécifique au GPU |
---|---|---|
MATLAB | Fonctions 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 *(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.
Deep Learning avec les GPU
Pour de nombreuses fonctions dans Deep Learning Toolbox, la prise en charge du GPU est automatique si vous disposez d'un GPU pris en charge et de Parallel Computing Toolbox. Vous n'avez pas besoin de convertir vos données en gpuArray
. Voici une liste non exhaustive de fonctions qui, par défaut, s'exécutent sur le GPU s'il est disponible.
trainnet
(Deep Learning Toolbox)minibatchpredict
(Deep Learning Toolbox)
Pour plus d'informations sur la prise en charge automatique du GPU dans Deep Learning Toolbox, voir Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox) .
Pour les boucles d'entraînement personnalisées, convertissez vos données en gpuArray
et utilisez des fonctions avec prise en charge gpuArray
(Deep Learning Toolbox).
Vérifier ou sélectionner un GPU
Si vous disposez d'un GPU pris en charge, MATLAB l'utilise automatiquement pour le calcul GPU. Si vous disposez de plusieurs GPU, vous pouvez utiliser gpuDeviceTable
pour examiner les propriétés de tous les GPU détectés dans votre système. Vous pouvez utiliser gpuDevice
pour sélectionner l’un d’entre eux ou utiliser plusieurs GPU avec un pool parallèle. Pour plus d'informations, voir Identifier et sélectionner un dispositif GPU et Run MATLAB Functions on Multiple GPUs . Pour vérifier si votre GPU est pris en charge, consultez Exigences de calcul du GPU .
gpuDeviceTable
Index Name ComputeCapability DeviceAvailable DeviceSelected _____ __________________ _________________ _______________ ______________ 1 "NVIDIA RTX A5000" "8.6" true true 2 "Quadro P620" "6.1" true false
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 Home, dans la zone Environment, sélectionnez Parallel > Select GPU Environment .
Utiliser les fonctions MATLAB avec le GPU
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.
Exemples d'utilisation de GPU
Exemples d'exécution de fonctions MATLAB sur des GPU
Les exemples suivants transmettent des objets gpuArray
aux fonctions MATLAB prises en charge, ce qui entraîne l'exécution de ces fonctions sur le GPU.
Autres exemples utilisant des GPU
Les exemples suivants utilisent d’autres supports GPU automatiques.
Nom de la toolbox | Exemples |
---|---|
Deep Learning Toolbox |
|
Communications Toolbox |
|
Remerciements
MAGMA est une bibliothèque de routines d'algèbre linéaire qui tirent parti de l'accélération GPU. Les fonctions d'algèbre linéaire implémentées pour les objets gpuArray
dans Parallel Computing Toolbox exploitent MAGMA pour obtenir des performances et une précision élevées.
Voir aussi
gpuArray
| gpuDevice
| gpuDeviceTable
| canUseGPU
| validateGPU