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

Assembleur Discussion :

Consommation en cycles d'horloge des instructions assembleur


Sujet :

Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut Consommation en cycles d'horloge des instructions assembleur
    Bonjour,

    Connaissez-vous une table "officielle" qui regroupe la consommation en cycle d'horloge des instructions asm des processeurs intel ?
    Je demande ça, pour une raison particulière.
    J'effectue un test actuellement pour voir la consommation en cycle d'horloge de plusieurs lignes de codes dans un langage de plus haut niveau, exécutés sur une machine temps réel (mono-coeur).
    Basiquement, je fais le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var64bits_1 = getNbCycles();
    //instructions
    var64bits_2 = getNbCycles();
    affichage(var64bits_2 - var64bits_1);
    getNbCycles n'est qu'une macro qui effectue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RDTSC;
    sauvegarde_eax_edx;
    Dès lors, si j'effectue ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var64bits_1 = getNbCycles();
    var64bits_2 = getNbCycles();
    affichage(var64bits_2 - var64bits_1);
    J'obtiens en asm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RDTSC;
    mov ebx, eax;
    mov ecx, edx;
    RDTSC;
    sbb...
    Ce qui m'étonne c'est que le résultat est de 84 cycles.
    Or un mov reg, reg ne devrait prendre que maximum 1 ou 2 cycles.. si j'ai bon souvenir...
    Dès lors, l'instruction RDTSC prendrait-elle 80 cycle à elle seule ?
    D'où ma question de départ : Connaissez-vous une table regroupant la consommation en cycle d'horloge des instructions asm des processeurs intel ?
    Cela m'aiderait à comprendre le résultat.

    Merci.

    PS : Dsl, j'ai écris ce message assez rapidement.

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je n'ai aucune information concernant des tables officielles de cycle d'horloge par instruction


    par contre essaye de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RDTSC;
    mov ebx, eax;
    mov ecx, edx;
    mov ebx, eax;
    mov ecx, edx;
    RDTSC;
    sbb...
    soustrait le résulta avec le 84 obtenue précédament et tu devrait théoriquement avoir le nombre de cycle réellement uttilisé par les deux instruction mov et par extension le temp prit par rdtsc

    finalement que rdtsc soit une instruction qui prenne du temps ça ne m'étonne pas trop, ça ne doit pas être tres optimisé parce que très peu utillisé

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Merci pour la suggestion. Je n'y avais pas pensé, je vais le faire

    Si quelqu'un a une source fiable pour le nombre de cycles / instruction, je suis intéressé

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jue,

    Les docs disponibles sur le site Intel contiennent tout ce qu'il te faut.

    Cependant, si c'est pour calculer le nombre de cycles d'une série d'instructions, ce n'est pas si simple avec les processeurs modernes, car il y a le problème de l'accessibilité de la mémoire (en cache [lequel?] ou pas ?), le pipeline des instructions, les interruptions qui changent le temps d'exécution d'un test à l'autre, le multitâche qui fait de même...

    Bref, pas évident.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Tout à fait droggo, je suis conscient que je n'aurais pas de résultats "exacts". C'est pourquoi je fais une série de 1000 000 de tests, en étant root, avec priorité maximale sur une machine temps réel qui ne fait quasiment rien, avec un processeur mono cœur possédant le moins de technologie possible(pipeline, ..).
    Dans mes test, sur une série de 1000 000 d'itération, il n'y a que 2 ou 3 valeurs qui ne sont pas les mêmes. Donc je peux supposer que mes tests sont "valables".

    Tu m'as dis que sur les pdf d'intel, on pouvait trouver ça. Mais, je t'avoue que j'ai bien "lu" des milliers de pages et je n'ai encore rien trouvé (tout du moins, rien qui ne m'aide vraiment) Tu aurais un pdf à me conseiller en particulier ?

    Merci

  6. #6
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    j'ai cherché dans le "Intel Architecture Software Developer’s Manual" le mots clock et je n'ai trouvé une référence au temps d'execution d'une instruction que pour l'instruction FPTAN (clock=17-173) ou SAHF (clock=2)

    l'information etait noté dans le chapitre 3.2 du volume 2 (le chapitre décrivant le fonctionnement de chaque instruction) mais je pense que c'est une information qui devait exister dans les précédente edition du document et qui a été effacé des edition récente (mon doc date de 97) l'information devait être trop peu pertinente pour être conservé

    le seul document que j'ai vu evoquer le nombre de cycle d'horloge par instruction est helppc (consultable en ligne ici) mais comme le nombre de cycle par instruction varie en fonction du processeur, ça n'est pas fiable pour determiner ce qui fonctionne sur les pross moderne

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Merci pour la page, c'est toujours intéressant

  8. #8
    Invité
    Invité(e)
    Par défaut oui mais
    Citation Envoyé par bifur Voir le message
    je n'ai aucune information concernant des tables officielles de cycle d'horloge par instruction


    par contre essaye de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RDTSC;
    mov ebx, eax;
    mov ecx, edx;
    mov ebx, eax;
    mov ecx, edx;
    RDTSC;
    sbb...
    soustrait le résulta avec le 84 obtenue précédament et tu devrait théoriquement avoir le nombre de cycle réellement uttilisé par les deux instruction mov et par extension le temp prit par rdtsc

    finalement que rdtsc soit une instruction qui prenne du temps ça ne m'étonne pas trop, ça ne doit pas être tres optimisé parce que très peu utillisé
    Même si c'est théorique je pense que vous avez oubliez de prendre en compte plusieurs facteur:
    Exemple: l'actualisation du registre PC(Pointeur d'instruction).

    Et de toute façon je pense que le nombre de cycle d'horloge par instruction varie en fonction du modèle, donc tu devrais faire tes recherche sur un microprocesseur (de la famille x86) précis.
    Dernière modification par Invité ; 12/08/2014 à 10h41.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 71
    Points
    71
    Par défaut
    Bonjour,
    S'il y a encore du besoin, il y a beaucoup de ressources ici : http://www.agner.org/optimize/
    Sont couverts les principes de base et un certain nombre de processeurs (Intel, AMD, VIA par exemple).

  10. #10
    Invité
    Invité(e)
    Par défaut cycles d'horloge
    Bonjour à toutes et à tous,
    Je ne suis pas certain s'avoir totalement assimilé à ce jour la philosophie des processeurs Intel multi-cœurs. Toutefois, je crois avoir compris que la durée d'exécution de nombreuses instructions est fortement subordonnée aux éléments de contexte : mémoire cache, optimisation de l'écriture, etc. C'est sans doute la raison pour laquelle on ne trouve plus d'indications précises en la matière. Par le passé, j'avais pris l'habitude de travailler avec ces données mais il semble que ce soit terminé depuis l'apparition de la génération "Core" d'Intel.
    J'ai appris beaucoup de choses à ce sujet en lisant l'ouvrage Intel® 64 and IA-32 Architectures Optimization Reference Manual. Notamment, entre autres, toutes les astuces pour éviter les branchements conditionnels (instructions CMOV et SETcc, notamment). Le lien suivant permet d'y accéder.
    http://www.intel.com/content/dam/www...ion-manual.pdf
    Quant à l'instruction RDTSC, elle m'a beaucoup servi en Power Basic où elle est utilisée par une instruction spécifique. C'est formidable pour optimiser un process.
    Dernière modification par Invité ; 19/03/2015 à 17h28.

Discussions similaires

  1. [TM5900 crusoe] Liste des instructions ?
    Par gijy dans le forum Autres architectures
    Réponses: 2
    Dernier message: 03/01/2006, 08h19
  2. [telnet] Exécuter des instructions en cas d'echec
    Par xjinh dans le forum Modules
    Réponses: 3
    Dernier message: 15/11/2005, 17h43
  3. Liste des instructions de la bibl. std c++
    Par BBric dans le forum SL & STL
    Réponses: 7
    Dernier message: 29/10/2004, 00h02
  4. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39
  5. Mesurer le temps des instructions
    Par luckylucke dans le forum Assembleur
    Réponses: 9
    Dernier message: 03/09/2003, 21h23

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