
Bien l'implémentation de i7z dans libcpuid pour les core Intel.
ps ton avatar ressemble bigrement à celui de Xpra

Oui, ce que j'ai fait dansbenjarobin a écrit :Belle contribution, mais je ne comprend vraiment pas ce code : https://github.com/X0rg/libcpuid/commit ... b60ca4a8c0
Pourquoi utiliser une variable static et vérifier le coup précédent ? Cela me semble complètement faux. Et pourquoi ces goto, ils sont moches et inutile. Les goto ne devraient utilisé que pour améliorer la lecture ici tu fait des nœuds au cerveaux
INFO_CUR_MULTIPLIER
n'est pas très beau, je sais pas je devais manquer d'idées quand j'ai fait ça. C'est un peu mieux dans le commit 32ddb7d.Il faudrait que je bosse aussi sur l'implémentation du TPC pour les CPUs AMD. Mais n'ayant pas de CPU AMD, c'est moins évident de faire quelques tests basiques.kozaki a écrit :Bien l'implémentation de i7z dans libcpuid pour les core Intel.
ps ton avatar ressemble bigrement à celui de Xpra
L'idée c'est de déclarer une variable statique nulle. Au premier test, elle est affectée, et aux tests suivants l'affectation est volontairement sautée. J'ai mis en statique car c'est des variables qui ne changent pas, alors autant éviter de recalculer systématiquement les mêmes valeurs.benjarobin a écrit :Tu as certes supprimé les goto, mais quel est le besoin du static, pourquoi vérifier l'appel précédent de cette fonction ? Ce que tu fais est toujours très très étrange !
Comprends tu le sens d'une variable static ? Son implication ?
Code : Tout sélectionner
static int a = 0;
if(!a)
a = fonction();
Code : Tout sélectionner
static int a = 0;
a = fonction();
On est d'accord, niveau syntaxique c'est correct.benjarobin a écrit :La 2ième proposition n'est pas du tout équivalente à la 1ier.
J'aurais tendance à dire que le BCLK est toujours le même, peu importe le nombre de CPUs.benjarobin a écrit :Mais cela reste faux ! En effet tu un handle, tu n'as pas forcément qu'un CPU ! Si tu dois cacher l'information, alors elle doit être stocké avec le handle, enfin je ne connais pas le code de la lib, mais cela me semble 1000 fois plus propre.
Pour moi, enum = int. Mais c'est vrai que j'aurais dû mettre cpu_vendor_t, ça aurait été plus clair.benjarobin a écrit :Tout d'abord pourquoi ne pas retourner le type enum au lieu du int ?
Oui. Mais il me semble qu'on ne peut jamais arriver dans le else en réalité. Cela dit, j'avais effectivement pas pensé à ce détail.benjarobin a écrit :La dernière ligne r = est forcément égale à 0, donc tu ignore une erreur et tu dis que le CPU est de type intel...
Du moment que c'est un minimum argumenté et que les arguments se valent, je ne le prends pas mal. Je sais très bien qu'on peut toujours faire mieux en programmation, on écrit du code et quelques jours après on se dit "Ah mais non, j'aurais dû faire comme ça !". Puis je commence à te connaître, je sais bien que si tu as posté c'est aussi pour m'aider à avancer.benjarobin a écrit :C'est pour cela qu'il ne faut pas prendre mal mes remarques, certes elles sont peu brutales, mais c'est mieux que c'est nul
Oui, je suis d'accord que retourner un entier pour dire "Aller voir là-bas pour voir à quoi cet entier correspond" n'est pas l'idéal, autant retourner directement le type concerné. Fait dans 63907c.benjarobin a écrit :Pour le enum et int, non ce n'est pas forcément le même type, c'est architecture dépend que je sache. Mais en tout cas certain compilateur (clang) vérifie que l'on assigne pas un mauvais type dans un autre, donc si tu assignes un enum dans un autre type de enum, clang te met un warning, de plus c'est mieux de mettre directement le type, tu sais ce que retourne la fonction, pas besoin de lire sa doc / description.
Oui en plus j'appelle plusieurs fois cette fonction, c'est vrai que c'était plutôt là qu'un static aurait été utile. Grosso-modo je m'y prends de la même manière que la première proposition (message posté à 16:18) ou bien il y a une méthode plus "propre" pour cacher cette variable ?benjarobin a écrit :Surtout que le pour cpu_vendor() tu peu cacher sans aucun souci et que tu ne l'as pas fait.
Code : Tout sélectionner
memcpy(data->vendor_str + 0, &raw->basic_cpuid[0][1], 4);
memcpy(data->vendor_str + 4, &raw->basic_cpuid[0][3], 4);
memcpy(data->vendor_str + 8, &raw->basic_cpuid[0][2], 4);
Code : Tout sélectionner
data->vendor = matchtable[i].vendor;
cpu_vendor_t cpu_vendor(void)
, car il me faut forcément les deux structures cpu_raw_data_t et cpu_id_t pour pouvoir extraire cette donnée (mais justement, la partie MSR n’utilise pas ces structures). Donc à un moment ou à un autre, je suis obligé d'extraire quelques informations du CPU.J'y travaille. Pour prouver que ce n'est pas un fake, voici un screenshot : http://i.imgur.com/MMnDyif.png. De toute façon, c'est le code qui est actuellement présent sur mon dépôt Git.BlondVador a écrit :Salut Xorg,
Juste une petite idée, serait-il possible d'intégrer la T° des CPU (et éventuellement des GPU) ?
Code : Tout sélectionner
Error opening terminal: xterm.
Code : Tout sélectionner
CPU-X:core.c:314: erreur lors de la recherche de la tension du CPU
CPU-X:core.c:340: erreur lors de la recherche de la température du CPU
Erreur de segmentation (core dumped)
cpu-x -v
s'il vous plaît ? Ça me permettra de voir si c'est le même soucis ou non. Je suis désolé que ça rende le logiciel inutilisable pour vous, mais j'ai besoin de vos sorties pour patcher tout ça et sortir rapidement un fix.Code : Tout sélectionner
$ cpu-x -v
Configuration de la locale accomplie
Configuration des pointeurs pour les labels
Configuration du nom des labels
Lecture de la valeur BogoMIPS
Remplissage partiel des labels (étape libsystem)
Remplissage partiel des labels (étape libprocps)
Remplissage des labels (étape libcpuid)
Recherche de la finesse de gravure du CPU
Recherche de la tension du CPU
CPU-X:core.c:314: erreur lors de la recherche de la tension du CPU
Recherche de la température du processeur
CPU-X:core.c:340: erreur lors de la recherche de la température du CPU
Suppression des espaces non-nécessaires dans le label Spécification
Amélioration du label Vendeur pour le CPU
Recherche des instructions du CPU
Filling labels (libbandwidth step)
Erreur de segmentation (core dumped)