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 :

Des maths lourdes dans le processeur ?


Sujet :

Assembleur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Des maths lourdes dans le processeur ?
    Bonjour, je viens d'apprendre qu'il existait des fonctions comme fsin, fcos ou fsqrt pour faire des opérations de math lourdes sur des flottants directement avec des opcodes. par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    float sinus(float r) {
            float s;
            asm("flds 8(%ebp)");
            asm("fsin");
            asm("fstp -4(%ebp)");
            return s;
    }
    Depuis combien de temps ce genre de trucs existe t-il ?
    Est-ce que c'est dans tous les processeurs ?
    Les performances sont t-elles vraiment améliorées par l'utilisation d'opcodes comme fsin (au lieu d'algorithme comme un développement en série de Taylor) ?


    Greg

  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,

    Depuis combien de temps ce genre de trucs existe t-il ?
    Dans leur première forme, depuis 28 ans (1980 : premier 8087). Pour une implémentation qui suit fidèlement la norme IEEE 754, depuis 1987 (80387).

    Est-ce que c'est dans tous les processeurs ?
    Oui, tous les x86 actuels implémentent un FPU (Floating Point Unit) on-chip. Depuis le 486DX en fait. Autant dire que les x86 sans coprocesseur pour flottants n'existent plus.

    Les performances sont t-elles vraiment améliorées par l'utilisation d'opcodes comme fsin (au lieu d'algorithme comme un développement en série de Taylor) ?
    Oui, ça ira plus vite qu'une série de taylor sur l'ALU.

    Maintenant, pour être tout à fait complet, le FPU est en perte de vitesse par rapport aux instructions SIMD (Single Instruction Multiple Data), les "fameux" SSE lorsqu'il s'agit d'optimisation (toutes les fonctions trigos ne sont pas non plus présentes dans les jeux SIMD). Pour de l'utilisation de base, le FPU reste majoritaire.

  3. #3
    Membre confirmé Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Points : 567
    Points
    567
    Par défaut
    Citation Envoyé par GregWar Voir le message
    Les performances sont t-elles vraiment améliorées par l'utilisation d'opcodes comme fsin (au lieu d'algorithme comme un développement en série de Taylor) ?
    Ça dépend de la précision qu'il te faut à mon avis. Je crois qu'Intel et AMD fournissent des fonctions mathématiques optimisées et qu'elles ne sont pas IEEE compliantes, donc elles n'utilisent sûrement pas les instructions comme FSIN.
    Le code que tu montres est "evil", tu ne peux pas deviner ce que contient EBP à l'appel de la fonction (ça dépend des flags d'optimisation). Il faut utiliser la syntaxe de l'ASM inline pour accéder aux paramètres ou écrire toute la fonction toi-même en assembleur pour être sûr que le compilateur ne vienne pas ajouter sa tambouille.
    :wq

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Je sais bien, c'est juste un exemple. Et quant bien même je voudrais utiliser une fonction comme sinus, je prendrais celle de la libc et non pas ce genre d'horreur . C'est juste que ça m'impressione.

    Si je poste c'est surtout parce que je suis perplexe, en désasemblant la fonction sin (faisant partie de la libC) de tomber sur un opcode fsin. Je pensais que la libc integrait un algorithme pour calculer un sinus et que ça n'était pas directement une opération du processeur

    Ca veut dire qu'il existe quelque part un circuit booléen (avec uniquement des transistor) qui sert à calculer un sinus, un cosinus ou encore une racine carrée ?

    Dans ce cas là ces circuits doivent être encore extremement lourds pour que des algorithmes comme l'approximation de John Carmack (http://fr.wikipedia.org/wiki/John_Carmack) soient intéréssantes, non ?

    Grégoire

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par GregWar Voir le message
    Ca veut dire qu'il existe quelque part un circuit booléen (avec uniquement des transistor) qui sert à calculer un sinus, un cosinus ou encore une racine carrée ?
    Objectivement, un microprocesseur est un circuit intégré logique hardware, le fait qu'il y ait une couche de soft par dessus ne l'éloigne pas tant que ça d'un circuit « statique » câblé dédié au calcul ...

    Plus précisément, je ne sais pas ce qu'il en coûte de calculer un sinus parce que je ne me suis jamais penché sur l'algorithme, mais en ce qui concerne la racine carrée, c'est une opération purement arithmétique, dont la complexité ne dépend que du nombre de chiffres.

    La bonne vieille méthode que l'on enseignait autrefois à l'école est tout-à-fait applicable au binaire, qui la simplifie d'autant, d'ailleurs.

Discussions similaires

  1. Afficher des maths dans un canevas
    Par magicvinni dans le forum Bibliothèques tierces
    Réponses: 0
    Dernier message: 26/05/2014, 17h12
  2. Réponses: 14
    Dernier message: 14/09/2010, 23h04
  3. un swf dans un swf trop lourd pour le processeur
    Par yuyuboy dans le forum Intégration
    Réponses: 0
    Dernier message: 04/03/2010, 10h45
  4. Manière d'écrire des math dans du texte
    Par JeanMi66 dans le forum Mathématiques - Sciences
    Réponses: 3
    Dernier message: 21/09/2007, 15h56
  5. Réponses: 10
    Dernier message: 27/08/2002, 23h24

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