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 :

Comment on gagne du temp en ASM ?!!


Sujet :

Assembleur

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut Comment on gagne du temp en ASM ?!!
    La question est dans le titre du message

    autrement , dans mon code source ou je peux poser la question pour dire que ici il faut que j'appel qlq ligne assembleur pour que ce traitement soit rapide

    vu que les compilateur c/c++ ils ont option optimiser

  2. #2
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    moi pas vraiment comprendre quoi toi dire mais peut être tu chercher à insérer des lignes en assembleur dans ton source c/c++. Si ça être quoi toi chercher, alors souvent compilateur c/c++ tu peux utiliser ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    asm{
    ; là tu peut écrire en assembleur
    }
    sdx

    ps: la prochaine fois, essaie de poser une question plus précise et compréhensible.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    moi dire
    la question était un peu généraliste
    voila le prob en détail
    pour traiter plus 3 million de triangles j'ai deux fonctions qui sont le noyeau de ce programme
    types des fonctions :
    - calcul déterminant : 3 fois
    ..etc

    est ce que si j'utilise asm je gagne les petites ms

  4. #4
    sdx
    sdx est déconnecté
    Membre régulier Avatar de sdx
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 106
    Points : 90
    Points
    90
    Par défaut
    Oui, il est probable que tu gagne du temps, mais ce n'est pas sûr (les compilateurs C ou C++ optimisent le code d'une façon extraordinaire )

    Mais, il faudra que tu réécrive tes fonctions (ou qq morceaux) en assembleur, et si tu fait de la trigonométrie, je ne pense pas que l'assembleur soit un langage adapté Le calcul à virgule flottante, les fonctions style cosinus, sinus, tangeante etc ... je n'en ai jamais vu en assembleur, mais c'est forcément faisable ...

    je sais que le FPU sert à ce genre de choses, mais je n'ai jamais eu à m'en servir ...

    Quelqu'un d'autre peut surement aider ?

    sdx

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Il y a beaucoup à dire sur l'optimisation assembleur. Tellement que des gens ont écrit des bouquins dessus. Commencez par regarder vos algorithmes de traitement, et ceux qui existent, en particulier ceux qui sont expliqués sur le net (Une recherche sur le forum algorithme peut être fructueuse)

    Si vous êtes certain que vos algorithmes sont les meilleurs, vous pourrez commencer à optimiser. Regardez d'abord le code qu'à crée votre compilateur (Si un débugueur genre celui de Visual, ou celui de Borland, il suffit de mettre un point d'arrêt sur la fonction et regarder ce qu'elle a dans le ventre. Sinon, il est souvent possible de demander au compilateur une sortie asm intermédiaire. Dans le pire des cas, il faut désassembleur l'executable.

    Ensuite, essayez d'optimiser tant bien que mal en mesurant le temps d'execution. (Précision maximale via rdtsc)

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par maamar
    est ce que si j'utilise asm je gagne les petites ms
    Par expérience oui, mais :
    - On gagne beaucoup plus avant par optimisation du langage évolué ( C dans ton cas )
    - Il faut que ce soit la dernière optimisation car ensuite le retour Asm=>Evolué est plutôt ardu si tu jongles beaucoup avec les registres CPU et FPU.

    Ce sont justement sur la pile FPU que les compilateurs sont le moins optimisés et on peut gagner beaucoup de temps en jouant avec les 8 registres de la pile. Par contre si ton appli utilise beaucoup les fonctions trigos ( Sin Cos Asin Acos ) tu va gagner énormement de temps en réduisant simplement leur nombre. Quitte à utiliser des variables intermédiaires ( ou des registres, c'est encore mieux )
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Autre remarque, puisqu'on en parle, mais je ne vois pas encore ou les fonctions trigonométriques interviennent : Le FPU peut calculer un cosinus ET un sinus en même temps, pour un temps un peu plus rapide que de faire les deux l'un après l'autre (Peut être parce que le fpu utilise la formule de Taylor)

  8. #8
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Si c'est de l'affichage 3D ou un truc du genre et que tu doit effectuer les même calcul sur un grand nombre de point, tu peut utiliser les avantage des nouvelle architecture... les instruction MMX sont les plus simple, mais ne sont pas flotante, les instruction SIMD (MMX, SSE/2/3 et Extended/3DNow!) devrait t'aider.
    Rien qu'en utilisant ces instructions tu peut arriver a une vitesse de 2/4x assez fasilement.
    Si c'est des tableau tu a le Prefetching qui peut aider. ça force le chargement de la mémoire en cache pour les prochaine donnée. Et c'est cumulable avec les SIMD
    Mais il faut bien pense l'enchainement car ces instruction on quemlque restriction. Pour les SIMD je ne suis pas sur, mais pour le MMX, de sur ça bloque la FPU.
    Intel et AMD editent des informations sur leur architecture avec cycle orloge par instruction, temp de lantense estimer, et surtout obtimisation du ou pipeline et au cache. Leur site et un peut obscure (en fait j'y met le moins possible les pieds ) mais regorge d'information
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    dans ce contexte ,
    est ce que tu peux donner un exemple sur l'utilisation de ces instructions SSE ou 3Dnow

    car j'ai lu dans un article sur "la simulation d'un vole d'une 'hélécoptère dans maillage "
    il dise que pour gagner 30% du temps ils onts modifier la fonction SQRT utilisée dans leur programme par la fonction pfrsqrt (qlqsorte comme ca a vérifier je me rapppel pa du mo exacte) qui est intégré dans 3DNow du processeur AMD (si je le trouve l'article je le poste)

    pourquoi cette modification ?
    prcq dans leur calcul cette fonction est applé de millier de fois ou plus

    d'ou une autre question est c k'il y a une sdk pour la 3dnow ou SSE

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Oui, sur le site d'AMD & Intel

  11. #11
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    Si tu veut des infos... y'a
    MMX -> http://esibert.developpez.com/delphi/mmx/
    SIMD -> http://esibert.developpez.com/delphi/simd/
    Les deux sont sur www.developpez.com... faut chercher...

    C'est pour du Delphi, mais en ASM... la conversion devrait pas être trop dure

    Pour les SDK j'en suis pas sur que ça existe, et je ne vois pas trop l'intere... y'a un sdk pour utiliser les addition avec retenue ... enfin... y'en a peut être pour les FPUs alors... j'cranerai pas trop
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  12. #12
    mat.M
    Invité(e)
    Par défaut
    Je n'irai pas contredire les personnes qui m'ont précédées et j'approuve leur remarque;

    une optimisation toute bête parfois aussi c'est utiliser des décalages , rotations plutôt que multiplications.
    C'est le BA à BA un peu de l'assembleur
    Ou bien faire des additions n fois plutôt que multiplier
    Par exemple 2*4 c'est 2+2+2+2 et des additions ça consomme moins de cycles CPU que des multiplications..

  13. #13
    Membre actif
    Profil pro
    ----
    Inscrit en
    Mai 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ----

    Informations forums :
    Inscription : Mai 2004
    Messages : 185
    Points : 245
    Points
    245
    Par défaut
    +1

    Et j'ajouterait que la première optimisation est a faire sur l'algorithme en lui même... Ensuite seulement on commence a prendre en compte les contrainte architectural
    De toutes les choses que j'ai perdue,
    Celle qui me manque le plus...
    c'est mon esprit !

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Citation Envoyé par Blustuff
    Si vous êtes certain que vos algorithmes sont les meilleurs, vous pourrez commencer à optimiser.
    (Sous entendu "en asm")

    N'optimisez jamais les multiplication par des décalages en C/C++, le compilateur le fait déjà très bien et souvent mieux que vous. (Si vous ne connaissez pas l'atout de lea) En revanche, il faut parfois empêcher le compilateur d'optimiser, car parfois, la multiplication dure est belle et bien plus rapide que l'optimisation.

  15. #15
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    /dev/null tres bien expliqué tes pages web

    je paratge avec les lecteurs se lien :
    http://www.tommesani.com/Docs.html

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2002
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    C'est bon je crois, c'est résolu.
    Un bon exemple se trouve dans ce site :
    http://www.codeproject.com/cpp/ssein...684&tid=568493

    C'est ce que j'ai voulu chercher


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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/12/2007, 10h19
  2. [W2K] comment effacer les fichiers temp d'ie à distance?
    Par altadeos dans le forum Windows 2000/Me/98/95
    Réponses: 2
    Dernier message: 05/10/2007, 14h43
  3. Comment récupérer le dossier temp en C++
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 23/08/2005, 14h11
  4. Comment gérer ma carte réseau en ASM
    Par will1974 dans le forum Assembleur
    Réponses: 6
    Dernier message: 23/09/2003, 17h08

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