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 :
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{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{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 :
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 :
Avec Linux :
Avec Mac OS X :
Ce qui donne par exemple :
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.