IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Cherche documentation sur CPUID


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut Cherche documentation sur CPUID
    Bonjour,

    malgré mes recherches sur internet, je n'est trouvé que cette doc sur CPUID : http://softpixel.com/~cwright/progra...simd/cpuid.php
    le problème, c'est que mon code détecte que mon processeur supporte l'Hyper Threading alors que c'est un Intel Core 2 Duo. Donc comment savoir que ce n'est que le support de l'hyper threading et pas un processeur HTT.
    De plus, comment lire le registre eax de la fonction 0x80000001 ?
    Comment savoir si le processeur support EM64T et SSSE3 (et pas SSE3) ?

    J'aimerais avec la doc pour intel et amd (transmetta sera un plus).

    Et sur les sites officels rien (enfin je sais peut-être pas chercher comme il faut)

    J'ai trouvé que ça comme doc sur intel http://www.intel.com/software/produc...32_hh/vc46.htm

    Merci

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Intel

    Tu trouvera tous les détails de l'instruction CPUID dans le manuel 2A d'INTEL (plus exactement : Manuel 2A, Chapitre 3 ; 3.2 Instructions A-M ; instruction CPUID).

    Tu peux télécharger les manuels ici :

    http://developer.intel.com/products/...uals/index.htm

    Intel détails précisément les fonctions de CPUID dans cette AP (Application Note) :

    http://download.intel.com/design/pro...s/24161832.pdf

    N.B : attention (voir messages en dessous) il semblerait qu'il y ait des erreurs dans les derniers manuels à ce jour...

    AMD :

    La doc pour cette instruction est dans le Volume 3, Chapitre 3 ; Instruction CPUID :

    http://www.amd.com/us-en/Processors/...5_7044,00.html

    Mais ce chapitre redirige en fait vers cette specification, nommée "AMD CPUID Specification, order# 25481." que l'on peut trouver ici :

    http://www.amd.com/us-en/assets/cont...docs/25481.pdf

    Doc annexe

    Tu peux aussi jeter un coup d'œil à la documentation sur Sandpile, mais réfère toi en priorité aux documentations constructeur (je ne suis pas sûr que les tableaux de Sandpile soit vraiment à jour) :

    http://www.sandpile.org/ia32/cpuid.htm

    Il suffit de bien lire les documents, CPUID est "relativement" complexe à gérer sur les processeurs modernes (il y a beaucoup d'options) mais en suivant bien la doc ça ne devrait pas poser de problèmes.

    Si jamais tu bloques, n'hésites pas à revenir

  3. #3
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Super merci c'est ce que je cherchais.

    J'ai trouvé dans la doc le 64 bits et le disabled execution bit http://developer.intel.com/design/pr...als/253666.pdf

    Milles mercis

    Mais pour ExtendedSteppingNumber, ExtendedModelNumber, ExtendedFamilyNumber ça ne fonctionne pas.
    car j'ai 0 dans eax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            mov eax, $80000001
            cpuid
            mov RegistreEdx, edx
            mov RegistreEax, eax
    J'en déduis donc que ce n'est pas le Ext.Family et Ext.Model et Revision de CPU-Z mais où va-t-il chercher ça ???

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par bubulemaster Voir le message
    Mais pour ExtendedSteppingNumber, ExtendedModelNumber, ExtendedFamilyNumber ça ne fonctionne pas.
    car j'ai 0 dans eax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            mov eax, $80000001
            cpuid
            mov RegistreEdx, edx
            mov RegistreEax, eax
    J'en déduis donc que ce n'est pas le Ext.Family et Ext.Model et Revision de CPU-Z mais où va-t-il chercher ça ???
    Ah !!! Tu as mis le doigt sur un erreur dans le manuel...

    Tableau 3-20, page 184, il est effectivement dit que c'est la fonction 80000001 pour avoir ce que tu cherches (retour dans EAX).

    Si on regarde page 207 au pseudocode de CPUID, on voit que la fonction 80000001 ne retourne pas sur EAX (en fait la valeur de EAX est réservée).

    C'est bien cette dernière donnée qui est juste.

    Je suis (re)tombé sur l'Intel AP (Intel Application note) qui détail vraiment très bien CPUID et qui est très récente :

    http://download.intel.com/design/pro...s/24161832.pdf

    Ce que tu cherches est accessible via la fonction 1 (EAX = 1 avant CPUID) et dans le registre EDX après l'exécution de CPUID. (regarde page 18 de l'AP).

  5. #5
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    J'ai trouvé dans de la doc qu'il n'y a qu'AMD qui utilise cette valeur. Il faut que je vérifie.

    Par contre ta doc est super, je peux déterminer si l'instruction CPUID est supportée !

    Etrange phénomène. Sur un processeur AMD Athlon 64, il m'indique 2 processeurs et 1 seul coeur alors que c'est l'inverse.
    Je vais creuser la doc AMD.

  6. #6
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Pour AMD j'ai compris que cet algo qu'il faut, j'essaye ce soir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
            asm
                mov eax, 1
                cpuid
            end ;
     
            LogicalProcessorCount = (RegistreEbx >> 16) && 0xFF ;
     
            asm
                mov eax, 0x80000001
                cpuid
            end ;
     
            if RegistreEax <> 0x80000001
            then
                CmpLegacy = (RegistreEcx && 2) <> 0
            else
                CmpLegacy = false ;
     
            asm
                mov eax, 0x80000008
                cpuid
            end ;
     
            if RegistreEax <> 0x80000008
            then begin
                NC = (RegistreEcx and 0xFF) ;
                ApicIdCoreIdSize = (RegistreEcx >> 12) && 0xF ;
            end
            else begin
                NC = 0 ;
                ApicIdCoreIdSize = 0 ;
            end ;
     
            if not FHTT
            then begin
    		    // PAs de support HyperThreading
                FNumberOfProcessor = 1 ;
                FNumberOfCore = 1 ;
            end
            else begin
                if ApicIdCoreIdSize = 0
                then
                    NC = NC + 1
                else
                    NC = Puissance(2, ApicIdCoreIdSize) ;
     
                FNumberOfProcessor = LogicalProcessorCount / NC ;
                FNumberOfCore = NC ;
            end ;
        end ;
    Nickel ça fonctionne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cherche documentation sur le format COM
    Par Piano dans le forum Windows
    Réponses: 17
    Dernier message: 08/01/2008, 09h40
  2. Cherche documentation sur protocole RIPv1 et surtout RIPv2
    Par vonemya dans le forum Développement
    Réponses: 1
    Dernier message: 26/12/2007, 08h53
  3. [Liferay] cherche documentation sur Liferay (en français)
    Par nadhem dans le forum Portails
    Réponses: 1
    Dernier message: 21/03/2007, 14h45
  4. [PEAR][LiveUser] Cherche documentation sur le pckage LiveUser
    Par cespiau dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/04/2006, 15h11
  5. Commande top Cherche documentation sur Load ave
    Par New dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/12/2005, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo