Qu'est qu'un register ?

aranaudaranaud Membre
13:49 modifié dans API AppKit #1
Si j'ai bien compris, le registre permet de mettre une variable directement dans le cache du processeur. Est que j'ai raison ?

Qu'est que sa rapport en termes de performance et qu'elles sont les contraintes ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    13:49 modifié #2
    Heu c'est à  peu près ça dans l'idée.
    Si tu n'as jamais fait d'assembleur c'est vrai que la notion de registres n'est pas forcément évidente.
    Ce sont des zones mémoires (des... ben merde, j'allais dire registre, tellement le mot est parlant pour moi ;D), qui sont situées juste à  côté voire dans le processeur.
    En général ces régistres sont petits (soit ils font 8 bits, soit ils sont groupés pour faire 16 voire 32 bits), et y'en a pas des masses. Enfin ça dépend du processeur.

    L'avantage des registres c'est qu'ils sont directement intégrés au processeur. D'ailleurs lorsque tu demandes à  faire un calcul, c'est l'UAL (Unité Arithmétique et Logique) qui se charge de faire le calcul en mettant les opérandes dans des registres, effectuant le calcul, et mettant les résultats dans un registre de résultat : en bref c'est les composants mémoire les plus proches du processeur, voire même parfois les zones où sont stockées les éléments de travail (les opérandes sur lesquelles le proc est en train de travailler).

    Voilà  pour la théorie. En résumé, c'est des zones mémoires les plus proches du proc/de l'UAL etc, qui sont en général câblées directement, et n'ont pas à  transiter par un bus.
    Utiliser le type "register" dans un programme en général c'est rare, sauf quand on veut optimiser un max son programme, et qu'on connait bien sa bête. Genre j'imagine que dans les sources d'AltiVec il doit y en avoir pas mal qui trainent ;)

    Côté performances on pourrait être tenté de croire que ça va forcément plus vite en mettant ses variables dans des registres puisqu'ils sont tout prêts du CPU et n'ont pas à  passer par un bus pour arriver aux UALs, mais si c'était aussi simple, on mettrait toutes nos variables en register ;) En réalité il n'y a pas des masses de registres et tout l'art est de bien les utiliser.
  • aranaudaranaud Membre
    13:49 modifié #3
    Je te remercie de ta réponse. Grâce à  toi, j'y vois plus claire.
  • LeChatNoirLeChatNoir Membre, Modérateur
    13:49 modifié #4
    Ceux du G5 doivent faire 64 bits non ?
  • AliGatorAliGator Membre, Modérateur
    13:49 modifié #5
    Alors là ...

    Et bien en toute logique, oui, j'imagine.
    Maintenant je n'ai pas étudié l'archi des G5 en détail, ils étaient pas au programme de mes cours d'archi :-\\ ;)
    Je veux dire ça pourrait être les bus qui sont à  64 bits, mais les UAL qui fonctionnent qu'en 32, par exemple. L'architechure d'un proc c'est pas toujours simple ;) Enfin bon oui pour le G5 en effet de ce que j'en sais les UAL fonctionnent directement sur 64 bits, permettant de faire soit des calculs sur 2 opérandes de 64 bits, soit faire en parallèle 4 opérations sur des opérandes 16 bits, par exemple... Enfin là  je vais pas m'aventurer à  donner plus de détails au risque de dire des conneries sur l'archi des G5 que je ne connais pas en détail ;)
  • BruBru Membre
    13:49 modifié #6
    dans 1132420933:

    qui sont situées juste à  côté voire dans le processeur.


    Ils sont toujours dans le processeur, puisque qu'ils sont partie intégrante de ce dernier.

    dans 1132420933:

    En général ces régistres sont petits (soit ils font 8 bits, soit ils sont groupés pour faire 16 voire 32 bits)


    il y a au moins 100 ans que les registres font plus de 8 bits...
    Actuellement, la taille "courante" est effectivement 32 bits.

    dans 1132420933:

    et y'en a pas des masses. Enfin ça dépend du processeur.


    Ca dépend surtout du type d'architecture RISC vs CISC. Sur un RISC, les registres sont plutôt nombreux car sur ces processeurs, on évite au maximum d'utiliser la mémoire (qui est externe, et donc lente). Par contre, en CISC, c'est l'inverse (il y a peu de registres, mais beaucoup d'instructions complexes -le CI de CISC- permettant des opérations directes sur la mémoire).

    .
  • aranaudaranaud Membre
    novembre 2005 modifié #7
    dans 1132505900:

    il y a au moins 100 ans que les registres font plus de 8 bits...
    Actuellement, la taille "courante" est effectivement 32 bits.

    Je présume que ceux d'Altivecs doivent être de 128 bits mais ceux de SSE d'intel, ils font combien ?
  • CéroceCéroce Membre, Modérateur
    novembre 2005 modifié #8
    dans 1132420933:


    En général ces régistres sont petits (soit ils font 8 bits, soit ils sont groupés pour faire 16 voire 32 bits), et y'en a pas des masses. Enfin ça dépend du processeur.



    Euh, bien sur un processeur 64 bits, qui adresse en 64 bits, les registres de données et d'adresses font très très probablement 64 bits!

    Sur les premiers PowerPC, il me semble qu'il y avait 32 registres de données, et 32 d'adresse. Moi j'appelle ça "beaucoup". D'ailleurs, autant que possible, le compilateur les utilise pour stocker les variables locales (et les passages de paramètres comme le disait très justement Bru), il est donc rare de devoir préciser register lors de la déclaration d'une variable.
    A noter qu'il existe aussi des registres de configuration et de statut.
Connectez-vous ou Inscrivez-vous pour répondre.