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 :

Unité arithmétique et flottante


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Inactif  

    Inscrit en
    Juillet 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 46
    Points : 135
    Points
    135
    Par défaut Unité arithmétique et flottante
    N'ayant pas obtenu de reponse sur le forum harware et ayant hésité à venir importuner les programmeurs assembleur je me decide toute fois à les deranger:

    Sur un processeur type IntAMD nous avons une unité arithmétiqe et un unité en flottant (ex-coprocesseur)
    ces deux unités travaillent-elle parellement ou conjointement

    Ex:
    Je fais un Move en entier suivi d'un Move en flottant

    les deux move vous s'effectuer en même temps, l'un apres l'autre ou en leger disséré le temps que le pros chnage d'unité.

    Sur les PowerMAC les unites étaient parrallèle mais je ne sais pas si sur un CISC c'est possible

    Merci de vos réponses éclairées.

    John

  2. #2
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 124
    Points : 368
    Points
    368
    Billets dans le blog
    1
    Par défaut Re: Unite arithmetique et flottante
    Citation Envoyé par John Fullspeed
    Sur un processeur type IntAMD nous avons une unité arithmétiqe et un unité en flottant (ex-coprocesseur)
    ces deux unités travaillent-elle parellement ou conjointement
    John
    le FPU (float processor unit) est asynchrone sur les PC. depuis le début, depuis le x387.

    par conséquent , les instruction CPU et FPU sont parallélisable. En calcul numérique on entrelace volontier instruction CPU et FPU pour éviter de perdre de temps. notamment après un FMUL qui prend pas mal de cycle

    la fonction __ProcessFrameSPP2 sur la page web suivante :
    http://perso.wanadoo.fr/vb-audio/us/mm/test_spp/test_spp.htm
    est un exemple pratique de ce qui se fait en matière de parallélisation CPU / FPU pour du calcul numérique , ici un IIR order 1 compensé, sur deux buffer tournant.

    VB

  3. #3
    Inactif  

    Inscrit en
    Juillet 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 46
    Points : 135
    Points
    135
    Par défaut Unite arithmetique et flottante
    Merci de ces precisions mais sans abuser:

    Mon but est de faire un mem copy sur les deux unités en même temps
    en partant donc pour cela je voudrais savoir si les données transitent par le même bus DANS le pros? La vietesse d'un FPU par rapport au CPU et la largeur respective des bus et Registre FPU

    Sur des Power PC on avait derive le move sur le FPU car les registres etaient
    plus 'grands ' 64 bits au lieu des 32 donc les moves allaient un peu moins vite
    mais comme il en fallait deux fois moins on gagnait


    John

  4. #4
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 124
    Points : 368
    Points
    368
    Billets dans le blog
    1
    Par défaut Re: Unite arithmetique et flottante
    Citation Envoyé par John Fullspeed
    Mon but est de faire un mem copy sur les deux unités en même temps
    en partant donc pour cela je voudrais savoir si les données transitent par le même bus DANS le pros? La vietesse d'un FPU par rapport au CPU et la largeur respective des bus et Registre FPU
    bon, usuellement, on n'utilise pas le FPU pour faire une move mémoire. On utilise le CPU , ou plutot le double CPU puisque depuis le pentium on a un certain nombre d'instructions de base qui sont devenu RISC (1cycle) et Paralélisable par le pipelinging du processor.

    Par conséquent, pour faire des opérations classique sur la mémoire (mov/copy/set) on utilise plus les instruction REP et STRING, mais des simple MOV, et de préférence parallélisable (c'est à dire indépendant 2 à 2).

    ce qui fait que la suite d'instruction suivante prend 2 cycles théorique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mov eax,DWORD PTR [esi]
    mov DWORD PTR [edi],eax
    mais à partir du pentium la suite suivante prend aussi 2 cycles seulement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mov eax,DWORD PTR [esi]
    mov ebx,DWORD PTR [esi+4]
    mov DWORD PTR [edi],eax
    mov DWORD PTR [edi+4],ebx

    maitenant que se passe -t-il si on utilise le FPU en plus ! ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fld DWORD PTR [esi]
    mov eax,DWORD PTR [esi+4]
    mov ebx,DWORD PTR [esi+8]
    fstp DWORD PTR [edi]
    mov DWORD PTR [edi+4],eax
    mov DWORD PTR [edi+8],ebx
    ben je ne sais pas, pour faire du MOV, j'ai jamais eu l'idée de faire intervenir le FPU. (ou le MMX d'ailleurs)...

    il faudrait faire une mesure pour voir, (sur de un grand espace de mémoire et sur un petit mais en boucle, pour voir la diff avec et sans cache) ...

    REM : on ne peut pas garantir que la donnée qui transite dans le FPU ressort tel quel (la valeur float est convertie en float80bit au FLD et reconvertie en float32 en sortie au FSTP)

    REM 2 : la RAM va bien moins vite que le processeur et donc l'optimization prend tout son sens quand la mémoire sur laqelle on travaille est déjà en cache (c'est à dire quand on est dans une boucle et qu'on acte avec la méme mémoire).

  5. #5
    Inactif  

    Inscrit en
    Juillet 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 46
    Points : 135
    Points
    135
    Par défaut Unite arithmetique et flottante
    D'accord avec toi bien sur sur la RAM et le cache. Mais c'est aussi un faux probleme : de toute façon si la zone est grande il n'y a opas d'autre solution;quelque soit la taille du cache.
    L'idée est plutot dirigée vers les jeux où tu depalec du 32x32 TRES frequemment et que si par exemple to perso qui est affiché en permanence peut beneficier d'un traitement cache Hyper optimiser on gagne beaucoup . Tu ne le sais peut etre pas mais les jeux vidéo se mesurent sur le nombre de VBL necessaire au refresh tu as un jeux deux, trois voir quatre VBLs(hou) alors quelques cycles de volés c'est toujours bon a prendre. Surtout qu'en general les sprites sont codés en dur donc le code d'affichage est en cache.

    Merci pour ses précisions

    Jon

  6. #6
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 124
    Points : 368
    Points
    368
    Billets dans le blog
    1
    Par défaut Re: Unite arithmetique et flottante
    Citation Envoyé par John Fullspeed
    L'idée est plutot dirigée vers les jeux où tu depalec du 32x32 TRES frequemment et que si par exemple to perso qui est affiché en permanence peut beneficier d'un traitement cache Hyper optimiser on gagne beaucoup. Tu ne le sais peut etre pas mais les jeux vidéo se mesurent sur le nombre de VBL necessaire au refresh tu as un jeux deux, trois voir quatre VBLs(hou) alors quelques cycles de volés c'est toujours bon a prendre. Surtout qu'en general les sprites sont codés en dur donc le code d'affichage est en cache.
    oulah, c'est quoi ce paragraphe ! ? c'est pas très clair votre truc ! :-)

    primo parler de cache hyper optimisé avec une carte vidéo, c'est un peu olé olé, faut passer dans un BUS AGP au mieux, bonjour le goulot d'étanglement... !

    Ensuite, la stratégie de déplacement des sprite dans un jeux video, ne fait pas intervenir le processeur, mais celui de la carte video, le cache PC ne sert à rien dans cette opération puisque les transferts effectifs se font dans la mémoire de la carte vidéo (c'est pourquoi les carte vidéo ont de plus en plus de RAM). Ca se pratiquait déjà au temps des VGA, vous pouvez essayer d'optimizer de l'affichage avec du bloc picture en RAM :-) mais c'est pas la méthode employée actuellement et pour cause : ca sert à rien.

    Merci pour ses précisions
    De rien ! :-) pour ce que cela vous servira...

Discussions similaires

  1. unité arithmétique sous labview
    Par sajaya dans le forum LabVIEW
    Réponses: 5
    Dernier message: 13/12/2013, 14h00
  2. Réponses: 0
    Dernier message: 04/12/2011, 12h29
  3. Bash et arithmétique flottante
    Par lgndslpgs dans le forum Linux
    Réponses: 9
    Dernier message: 10/07/2010, 17h27
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 11h46
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 11h13

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