Archives pour la catégorie Windows

La calculatrice de Windows, quatre pour le prix d’une !

Je me suis octroyé une pause dans mes activités de développement habituelles (MATLAB et autres). Pour effectuer quelques opérations mathématiques élémentaires, j’ai donc utilisé la calculatrice de Windows.

Pas de quoi écrire un billet de blog me direz-vous. Je ne dois pourtant pas être le seul à n’avoir jamais fais attention au menu « Affichage » de la calculatrice.

Menu affichage calculatrice Windows

Il y a donc en fait quatre calculatrices, plus quelques outils. Pas besoin de présentation exhaustive, quelques captures d’écran suffiront.

Standard

Calculatrice standard Windows

Scientifique

Calculatrice scientifique Windows

Programmeur

Calculatrice programmeur Windows

Statistiques

Calculatrice statistiques Windows

Conversion d’unités

Outil de conversion de données Windows

Conclusion

Je ne suis pas certain d’utiliser plus souvent cette calculatrice dans l’avenir mais elle est néanmoins dorénavant réglée en mode scientifique.

Gestion des cartes graphiques NVIDIA dans MATLAB : le NVIDIA System Management Interface

NVIDIA fournit un utilitaire de monitoring avec les drivers récents des cartes Tesla et Quadro. Cet outil s’appelle le « NVIDIA System Management Interface » ou « nvidia-smi ». Il est disponible sur Linux, et avec les versions 64bit de Windows Server 2008 R2 et de Windows 7. Il est également fournit avec les drivers des cartes GeForce avec une prise en charge limitée pour ces modèles (voir la liste à la fin de ce billet).

Je vais vous montrer comment appeler cet exécutable à partir de MATLAB pour récupérer des informations sur votre carte NVIDIA (nom, température, mémoire, fréquence…).

1) nvidia-smi

nvidia-smi est donc un exécutable 64 bits qui est installé en même tant que le driver de la carte graphique.

Le dossier d’installation par défaut sur Windows 7 est « C:\Program Files\NVIDIA Corporation\NVSMI ». Pour plus de souplesse, vous pouvez ajouter ce chemin dans la variable d’environnement PATH de Windows.

Sur Linux, il faut utiliser le driver propriétaire fournit par NVIDIA. Le dossier d’installation par défaut est « /usr/bin »

Pour vérifier que vous êtes prêt à utiliser cet outil, vous pouvez simplement exécuter la commande suivante dans une invite de commande de votre système d’exploitation :

nvidia-smi -L

Indice du GPU

Pour simplifier la suite de ce billet, je partirai du principe qu’il n’y a qu’une seule carte graphique présente sur votre machine. La commande utilisée commencera donc toujours par :

nvidia-smi -i 0

Le « 0 » étant l’indice du premier GPU détecté sur la machine.

Liste des propriétés

La commande pour récupérer les propriétés est la suivante :

nvidia-smi -i 0 --query-gpu=

Le signe « = » est alors suivi de la liste des propriétés à récupérer, séparées par des virgules. Pour obtenir la liste de toutes les propriétés, utilisez la commande suivante dans une console de votre système d’exploitation :

nvidia-smi --help-query-gpu > list.txt

Ouvrez le fichier list.txt et cherchez la propriété qui vous intéresse.

Vous pouvez consulter la liste générée sur ma machine ici.

Format

Sans trop rentrer dans le détail, on utilisera le formatage --format=csv,noheader lors des appels à nvidia-smi

2) nvidia-smi & MATLAB

Pour résumer, on utilisera ce modèle de commande :

nvidia-smi -i 0 --format=csv,noheader --query-gpu=

Que ce soit sur Windows, Linux ou Mac OS X, MATLAB est capable d’exécuter des programmes externes grâce aux fonctions system, dos ou unix.

On peut donc tester comme précédemment dans le Command Window de MATLAB :

[status, data] = system('nvidia-smi -L')
status =

     0


data =

GPU 0: Quadro K2000 (UUID: GPU-66119846-d929-fb76-3d19-b9056e2e00ab)

Il est très important de tester la valeur de retour de la variable status. Elle vaut 0 en cas de succès et une valeur différente de 0 en cas d’échec. Tout le travail consiste ensuite à extraire les informations de la chaine de caractère contenue dans la variable data

Version du driver

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=driver_version')
data =

320.00

Nom

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=name')
data =

Quadro K2000

Numéro de série

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=serial')
data =

0321113022548

Identifiant unique (UUID)

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=uuid')
data =

GPU-66119846-d929-fb76-3d19-b9056e2e00ab

Vitesse ventilateur

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=fan.speed')
data =

30 %

Température

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=temperature.gpu')
data =

32

Mémoire totale

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.total')
data =

2047 MB

Mémoire disponible

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.free')
data =

34 MB

Mémoire utilisée

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.used')
data =

2013 MB

3) Fonctions MATLAB

J’ai écris deux fonctions MATLAB pour vous permettre de récupérer aisément certaines informations sur votre carte graphique NVIDIA.

Vous pouvez télécharger les deux codes sources ici : Informations sur la carte graphique NVIDIA avec MATLAB et le NVIDIA System Management Interface

Voici un exemple d’utilisation :

>> [gpuInfo, sysInfo] = nvsmiQuery;
>> nvsmiLog(gpuInfo, sysInfo);

Voici un aperçu des informations renvoyées :

query nvidia gpu property with MATLAB

4) Multiple GPUs

Si vous avez plusieurs cartes graphiques installées sur votre machine, il serait tentant d’utiliser les syntaxes suivantes pour accéder aux différents GPU :

nvidia-smi -i 0 ...

Puis

nvidia-smi -i 1 ...

Mais, il faut savoir que l’ordre des indices peut changer à chaque démarrage de la machine. Dans ce cas, il est donc plus prudent d’utiliser l’identifiant unique de chaque GPU :

nvidia-smi -i GPU-66119846-d929-fb76-3d19-b9056e2e00ab ...

5) Alternative à l’utilisation de la fonction system

L’outil fourni par NVIDIA permet de stocker le résultat dans un fichier CSV, comme par exemple :

status = system('nvidia-smi -i 0 -f gpuprop.csv --format=csv,noheader --query-gpu=driver_version,serial,name,uuid,temperature.gpu,fan.speed')

Ou encore dans un fichier XML :

status = system('nvidia-smi -q -f gpuprop.xml -x ')

Il faudra alors ensuite extraire les informations de ces fichiers.

Vous pouvez consulter les fichiers issus des lignes précédentes :

6) Conclusion

Vous avez maintenant un outil à disposition pour récupérer des informations sur les GPUs NVIDIA directement depuis MATLAB.

En réalité, l’exécutable nvidia-smi est basé sur la bibliothèque NVIDIA Management Library (NVML) disponible gratuitement avec le GPU Deployment Kit. De ce fait, on peut faire directement appel à cette librairie via un fichier MEX depuis MATLAB. C’est ce que je vous montrerai dans un prochain billet ;)

N’hésitez pas à me faire des retours si vous rencontrez des difficultés dans l’utilisation des codes présentés dans ce billet.

7) Produits pris en charge

Voici une liste des GPUs pris en charge par nvidia-smi :

  • Full Support
    • NVIDIA Tesla Line:
      • S2050, C2050, C2070, C2075,
      • M2050, M2070, M2075, M2090,
      • X2070, X2090,
      • K10, K20, K20X, K20Xm, K20c, K20m, K20s
    • NVIDIA Quadro Line:
      • 410, 600, 2000, 4000, 5000, 6000, 7000, M2070-Q
      • K2000, K2000D, K4000, K5000, K6000
    • NVIDIA GRID Line:
      • K1, K2, K340, K520
    • NVIDIA GeForce Line: None
  • Limited Support
    • NVIDIA Tesla Line: S1070, C1060, M1060
    • NVIDIA Quadro Line: All other current and previous generation Quadro-branded parts
    • NVIDIA GeForce Line: All current and previous generation GeForce-branded parts

8) Liens utiles

Identifier le processeur avec MATLAB via la base de registre de Windows

La fonction winqueryreg de MATLAB permet de récupérer les valeurs stockées dans la base de registre de Windows. Il est donc possible de s’en servir pour identifier le processeur présent sur la machine en interrogeant la clé « HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor ». En fonction du nombre de cœurs (N) présents sur le processeur, vous obtenez autant de sous-clés, numérotées de 0 à N-1 :

base-registre-windows-processeur

Les codes MATLAB qui suivent sont exécutés sur un ordinateur portable Asus K53SC. Comme vous pourrez le remarquer, seul le troisième argument change à chaque exemple.

Note : un souci d’édition avec le blog ne me permet pas de vous fournir des lignes de codes facilement copiables. Désolé.

Désignation du vendeur

winqueryreg-matlab-cpu-vendoridentifier

ans =

GenuineIntel

C’est donc ici un processeur Intel. Pour AMD, la valeur serait « AuthenticAMD ».

Identifiant du processeur

winqueryreg-matlab-cpu-identifier

ans =

Intel64 Family 6 Model 42 Stepping 7

Voir ici pour quelques explications sur ces valeurs.

Désignation du processeur

winqueryreg-matlab-cpu-processornamestring

ans =

Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz

C’est le bon !

Fréquence du processeur

winqueryreg-matlab-cpu-mhz

ans =

        2394

Ce qui correspond bien à la fréquence affichée précédemment (2394 MHz contre 2,40 GHz)

Conclusion

Vous connaissez maintenant une méthode rapide pour identifier le processeur présent sur votre machine avec MATLAB sur Windows. Pour aller plus loin, je vous renvoi vers la série de trois billets sur le thème de l’identification de processeur avec MATLAB (1, 2 et 3).

Vous pouvez explorer le registre en tapant « regedit » dans la barre de commandes du menu Démarrer de Windows. Mais prenez bien garde à ne rien modifier.

Ce billet a été inspiré par le code source de la fonction getdebuginfo de Scilab.