Identification de processeur sous MATLAB (2/3)

Dans mon précédent billet, je vous ai montré qu’il ne fallait pas faire confiance à la fonction feature(‘GetCPU’) pour obtenir les caractéristiques du processeur (CPU) de votre machine.

Il existe une méthode plus robuste dépendante du système d’exploitation

Avec Windows, il est possible d’utiliser la fonction getenv dans MATLAB comme ceci :

getenv('PROCESSOR_IDENTIFIER')

ans =

Intel64 Family 6 Model 42 Stepping 7, GenuineIntel

Avec Linux, il suffit de traiter les données contenues dans /proc/cpuinfo avec MATLAB comme ceci :

[status,data{1}] = system('grep -m 1 "vendor_id" /proc/cpuinfo | cut -d: -f2');
[status,data{2}] = system('grep -m 1 "cpu family" /proc/cpuinfo | cut -d: -f2');
[status,data{3}] = system('grep -m 1 "model" /proc/cpuinfo | cut -d: -f2');
[status,data{4}] = system('grep -m 1 "stepping" /proc/cpuinfo | cut -d: -f2');

Avec Mac OS X, il faut exploiter les retours de la commande sysctl machdep.cpu :

[status,data{1}] = system('sysctl machdep.cpu | grep cpu.vendor | cut -d: -f2');
[status,data{2}] = system('sysctl machdep.cpu | grep cpu.family | cut -d: -f2');
[status,data{3}] = system('sysctl machdep.cpu | grep cpu.model | cut -d: -f2');
[status,data{4}] = system('sysctl machdep.cpu | grep cpu.stepping | cut -d: -f2');

Ce qui donne par exemple :

fprintf('Family %s Model %s Stepping %s, %s\n',strtrim(data{2}),strtrim(data{3}),strtrim(data{4}),strtrim(data{1}));

Family 6 Model 42 Stepping 7, GenuineIntel

Pour rappel, la valeur de Model était 10 dans le précédent billet et cela posait problème pour déterminer avec exactitude le CPU.

Ici, il faut convertir 42 en binaire, soit 00101010. Il faut ensuite séparer les bits en deux paquets comme ceci : 0010 et 1010. La première valeur correspond à l’Extended Model qui si on se reporte au tableau Intel nous permet bien de cibler : « 2nd Generation Intel core Processor Family Mobile (Sandy Bridge) ». Ce qui correspond bien à la famille de mon CPU.

Note : avec Mac OS X, on peut directement récupérer l’Extended Model en passant cpu.extmodel à grep.

Pour identifier le CPU avec précision dans sa famille, il faut identifier plusieurs paramètres comme la fréquence, les mémoire caches… Ce qui peut s’avérer assez fastidieux.

Il nous faudrait une solution plus rapide qui donnerait la désignation commerciale du CPU en une seule ligne.

Avec Windows (la plupart des versions) :

[status,cpuname] = system('wmic cpu get name /format:value');
cpuname = strtrim(cpuname);
cpuname = strrep(cpuname,'Name=','');

Avec Linux, il suffit de faire :

[status,cpuname] = system('grep -m 1 "model name" /proc/cpuinfo | cut -d: -f2');

Avec Mac OS X :

[status,cpuname] = system('sysctl machdep.cpu | grep brand_string | cut -d: -f2');

Ce qui donne par exemple :

cpuname =

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

C’est beaucoup mieux :)

Dans le prochain billet, je vous montrerai comment demander directement ces informations au CPU lui-même à l’aide de l’opcode CPUID. Cette dernière solution sera portable et fonctionnera donc quelque soit le système d’exploitation.

2 réflexions au sujet de « Identification de processeur sous MATLAB (2/3) »

  1. tug83

    Salut

    D’autres lignes qui peuvent interesser:

    %% CPU Speed
    mhz = num2str(ceil(feature('timing', 'cpuspeed')/1000000));

    disp(['The measured CPU speed is ' mhz ' MHz']);
    %% RAM
     pts    = strfind(cmp, 'Total:');
        mem    = regexp(cmp(pts(1):end), '[0-9]+', 'once', 'match');
        disp(['RAM is ' mem ' MB']);
    %% SWAP
        mem    = regexp(cmp(pts(2):end), '[0-9]+', 'once', 'match');
        disp(['Swap space is ' mem ' MB'])

    Aurélien

    Répondre
  2. Ping : Identification de processeur sous MATLAB (3/3) | Demande à la poussière

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>