Journal Informatique : Optimisation, minimisation, projet

Posté par  (site web personnel) .
Étiquettes : aucune
0
13
juin
2003
Vu le manque de documentation a ces sujets en francais sur le net, je me suis attele a la tache.

Liste des optimisations connues (en C)
Minimisation Kit (Comment faire un serveur web de 16ko)
Les Lois qui régissent la réussite d'un développement logiciel
Définition du programmeur
Livres de sciences et de programmation

Tous ces articles sont sur http://tuan.kuranes.free.fr/#ik

Voila, j'ai regroupe mes connaissances, experiences et infos glanes sur le net a ces sujet ne faisant des articles en francais (enfin la plupart).

J'attends vos reactions, ajouts, precision et autres commentaires constructif.

(je cherche particulierement des optimisations binaires sur low endian ?)
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  (site web personnel) . Évalué à 2.

    Precision : selon les gouts, preferences de lisibilite ou configuration ecran, vous pouvez changer de feuille de style.
    (sur les navigateurs qui supportent les feuilles de styles alternatives (moz, firebird, opera...))
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  (site web personnel) . Évalué à 3.

    "# Avez-vous les meilleurs outils de développements possible, quelqu'en soit le prix?"

    ca veut dire quoi, quel que soit le prix?
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  (site web personnel) . Évalué à 2.

    Tu ne parle pas de la différence entre ++i et i++ dans l'optimisation c ?
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  (site web personnel) . Évalué à 1.

      A part la difference d'ordre d'execution,
      je ne connais pas les effets sur l'optimisation.

      Dis-m'en plus !
      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  (site web personnel) . Évalué à 3.

        d'apres mon prof de c++ du semestre dernier, il vaut mieux utiliser
        for(i=0;i<max;++i){...}
        que
        for(i=0;i<max;i++){...}
        car dans le premier cas, il n'utilise pas de variable temporaire pour stocker le résultat de l'incrémentation... je l'avais déjà lu autre part, mais je ne connais pas le fondement exact. Faudrait rechercher...
        Le premier lien correcpondant sur google (recherche: "++i plutot que i++") c'est
        http://www.cppfrance.com/article.aspx?Val=1073(...)
        • [^] # Re: Informatique : Optimisation, minimisation, projet

          Posté par  (site web personnel) . Évalué à 1.

          Je le rajoute !

          Bien que je suspecte fortement ce genre d'optimisation risque d'etre effectue par le compilateur.

          Tres interressant, merci.
          • [^] # Re: Informatique : Optimisation, minimisation, projet

            Posté par  (site web personnel) . Évalué à 1.

            Il y a des chances, oui. Mais le compilo doit quand-même faire attention aux cas où l'on a besoin du i++, du genre tab[i++]=i;
            • [^] # Re: Informatique : Optimisation, minimisation, projet

              Posté par  (site web personnel) . Évalué à 1.

              Je l'ai mis quand meme.
              C'est toujours mieux de le savoir plutot que de demander au compilos...

              En tout cas Merci !!

              (Je ferais les greeting a la fin, je mettrais les pseudos, a moins d'informations contraires...)
              • [^] # Re: Informatique : Optimisation, minimisation, projet

                Posté par  (site web personnel) . Évalué à 1.

                C'est clair. En tout cas bravo pour ton site, il n'est pas mal du tout! :-)
                Je suis étudiant en mathématiques et informatique, et j'ai vu que tu avais participé à une conférence consacrée à MathML. C'est comment, à utiliser (je connais juste LaTeX et HTML/XML/PHP, mais utiliser les deux en même temps, ça me tente de + en +).
                • [^] # Re: Informatique : Optimisation, minimisation, projet

                  Posté par  (site web personnel) . Évalué à 1.

                  A utiliser, c'est dur et complique.
                  Le plus facile, c'est avec amaya, mais faut apprendre les raccourcis clavier.

                  Mais ca te permet d'avoir des documents tres flexibles (XML oblige).

                  Le seul probleme vient que TRES PEU de conference te permettent de proposer des papiers avec du MathML dedans.

                  Mais en comparaison, c'est la maniere la plus puissante d'ecrire des maths dans un doc.
                  • [^] # Re: Informatique : Optimisation, minimisation, projet

                    Posté par  . Évalué à 1.

                    <rêve>
                    Ce qui serait bien, ce serait un convertisseur \LaTeX{} ==> MathML
                    (uniquement pour les formules de math, évidemment)
                    </rêve>

                    Les formules de math, c'est quand même vraiment agréable à taper
                    en \LaTeX{} et beaucoup de mathématiciens savent le faire.

                    OK, je sais, latex c'est un format de présentation et pas de structure comme
                    XML, ce qui rend la chose difficile, mais un convertisseur intelligent doit
                    pouvoir arriver à le faire, non ?
                    • [^] # Re: Informatique : Optimisation, minimisation, projet

                      Posté par  (site web personnel) . Évalué à 1.

                      C'etait un projet de fin d'étude donné par des profs l'an dernier (il y avait aussi un viewer de MAthMl a faire). Je ne sais pas par contre si le projet a été correctement réalisé, ce qui est advenu du code ni des étudiants ;-). Avec un peu de chance google t'aidera.
        • [^] # Re: Informatique : Optimisation, minimisation, projet

          Posté par  . Évalué à 1.

          Je trouve que ce n'est pas un bon conseil à donner. Le compilateur va lui-même optimiser ce code.

          Ensuite, l'économie réalisée est parfaitement négligeable par rapport à une mauvaise utilisation des printf par exemple.

          Enfin, pour permettre une bonne relecture, il vaut mieux respecter certaines règles d'écriture, et toujours écrire i++ en fait partie. Un truc du genre: tableau[i++] n'est pas joli du tout, parce qu'il va falloir toujours se reposer la question, la variable est-elle incrémentée avant ou après ?

          Bref, dans la majorité des projets, il vaut mieux d'abord faire un code lisible lorsque l'on parle de petites optimisations, et savoir que certaines opérations sont très couteuses, plutôt que d'obscurcir le code pour des gains négligeables.

          PS: j'ai eu aussi un prof qui m'avait donné le conseil d'écrire ++i dans les boucles, mais un autre m'a par la suite convaincu du contraire.
          • [^] # Re: Informatique : Optimisation, minimisation, projet

            Posté par  . Évalué à 1.

            Et, euh, pour se convaincre, le plus simple ce serait pas de demander à gcc ?...



            $ cat postinc.c
            #include <stdio.h>
            int main(int argc, char **argv){
            int a,i;

            a = 0;
            for (i=0; i<100000; i++)
            a+=i;
            printf(" a = %d\n", a);
            return 0;
            }
            $ diff postinc.c preinc.c
            6c6
            < for (i=0; i<100000; i++)
            ---
            > for (i=0; i<100000; ++i)
            $ gcc -Wall -O0 -S postinc.c preinc.c
            $ diff postinc.s preinc.s
            1c1
            < .file "postinc.c"
            ---
            > .file "preinc.c"


            Voila, meme en optimisation 0, aucune différence dans le code assembleur généré.
      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  (site web personnel) . Évalué à 1.

        Je pense aussi à un autre truc, dans "Les Lois qui régissent la réussite d'un développement logiciel:": les conventions de nommage des variables, fonctions et types (du genre à la Java, ou en utilisant la notation hongroise utilisée par M$ [http://www.osinet.fr/code/glo.asp?Initial=N(...)] )...
        • [^] # Re: Informatique : Optimisation, minimisation, projet

          Posté par  (site web personnel) . Évalué à 1.

          J'y avais pense, mais je suis moins a l'aise pour le mettre comme une obligations...
          peut-etre dans une section, mais en l'absence de preference en la matiere je sais pas trop...

          J'ai toujours trouve ca trop verbeux, la notation polonaise...
          j'aime bien les concepts a la java (minuscules - majuscule) mais ca m'a jamais vraiment gene...
          En fait, en matiere de doc, a part les specifs technique et les docs de l'analyse (genre graph heritage) le reste ne m'a jamais servi a rien....

          Je vais reflechir a une section documentation -
          nom de variables, Code style, documentation automatique...
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  . Évalué à 1.

      Sur des exemples a la con :


      =========== i++ VS ++i ==================
      $diff test1.c test2.c
      7c7
      < for(i=0; i<12000; i++)
      ---
      > for(i=0; i<12000; ++i)
      [13:39:45] cykl ~/test ¤ gcc -S test1.c
      [13:39:52] cykl ~/test ¤ gcc -S test2.c
      [13:39:55] cykl ~/test ¤ diff test1.s test2.s
      1c1
      < .file "test1.c"
      ---
      > .file "test2.c"

      Quelqu'un peu me presenter un exemple concret ???
      notez qu'il n'y a meme pas d'O.


      ============== x*2 VS x + x ================
      [13:47:03] cykl ~/test ¤ diff test3.c test4.c
      7c7
      < x = x * 2;
      ---
      > x = x + x;
      [13:48:03] cykl ~/test ¤ gcc -S test3.c
      [13:48:10] cykl ~/test ¤ gcc -S test4.c
      [13:48:12] cykl ~/test ¤ diff test3.s test4.s
      1c1
      < .file "test3.c"
      ---
      > .file "test4.c"
      21,23c21,23
      < movl -4(%ebp), %eax
      < sall $1, %eax
      < movl %eax, -4(%ebp)
      ---
      > movl -4(%ebp), %edx
      > leal -4(%ebp), %eax
      > addl %edx, (%eax)
      [13:48:15] cykl ~/test ¤ gcc -O3 -S test4.c
      [13:48:20] cykl ~/test ¤ gcc -O3 -S test3.c
      [13:48:22] cykl ~/test ¤ diff test3.s test4.s
      1c1
      < .file "test3.c"
      ---
      > .file "test4.c"
      ==================== x / 2 VS x * 0.5 ====================
      [13:49:54] cykl ~/test ¤ diff test3.c test4.c
      7c7
      < x = x / 2;
      ---
      > x = x * 0.5;
      [13:49:33] cykl ~/test ¤ gcc -S test3.c
      [13:49:39] cykl ~/test ¤ gcc -S test4.c
      [13:49:42] cykl ~/test ¤ diff test3.s test4.s
      1c1
      < .file "test3.c"
      ---
      > .file "test4.c"
      4a5,8
      > .align 8
      > .LC1:
      > .long 0
      > .long 1071644672
      21,27c25,34
      < movl -4(%ebp), %edx
      < movl %edx, %eax
      < sarl $31, %eax
      < shrl $31, %eax
      < leal (%eax,%edx), %eax
      < sarl $1, %eax
      < movl %eax, -4(%ebp)
      ---
      > fildl -4(%ebp)
      > fldl .LC1
      > fmulp %st, %st(1)
      > fnstcw -6(%ebp)
      > movw -6(%ebp), %ax
      > movb $12, %ah
      > movw %ax, -8(%ebp)
      > fldcw -8(%ebp)
      > fistpl -4(%ebp)
      > fldcw -6(%ebp)
      [13:49:45] cykl ~/test ¤ gcc -O3 -S test4.c
      [13:49:50] cykl ~/test ¤ gcc -O3 -S test3.c
      [13:49:52] cykl ~/test ¤ diff test3.s test4.s
      1c1
      < .file "test3.c"
      ---
      > .file "test4.c"
      =============================================


      Toutes ces astuces me paraisse etre un peu de l'enculage de mouche puisque a premiere vu le compilateur peut tres bien le faire tout seul. C'est un peu la meme chose que les multiplications par un multiple de 2 qui sont transformée en decallage de bit. A priori le compilateur le fait et l'ecrire en dur sert juste a rendre le code illisible.

      S'amuser a lire les sorties assembleurs de l'ami gcc est parfois tres interessant meme si ce n'est faisable que sur de petits codes.

      Donc je suis _VRAIMENT_ interessr pour qu'on me montre du code ou de telles optimisations _DOIVENT_ etre faites a la main et pourquoi le compilateur ne le fait pas lui meme. Il y'a d'autres optimisations (voir le lien que je donne plus bas) qui elles ont vraiment un impacte sur la vitesse d'execution en tenant compte des caracteristiques des processeurs (dependances des variables etc...). Mais bien entendu il est tres difficile d'ecrire du code comme ca :-)


      De plus tes optimisations des operateurs binaires sont vraiment attroces. Et permettrons a ton programme de ne jamais etre portable. On pourrait aussi faire les syscalls en assembleur :-)
      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  (site web personnel) . Évalué à 1.

        Pour les avoir testée sur du traitement d'image en temps réel, ou les algos sont deja bien trapus, avec des matrices lourdes; j'ai constaté de réelles différences entre mon code genere a la main et du code optimise par compilo.

        Essaye de comparer ces 3 fonctions en temps d'executions, et imagine toi 5000 appels de cette fonction par secondes... la difference est visible.

        Si t'arrives a genere un code aussi rapide sans optimisations juste avec les optimisations compilo, ca m'interresse !!!!

        Prb :
        Recherche de la plus proche puissance de 2 superieure.

        /*sans optimisation*/
        int p2(p)
        {
        return 1 << (int) ceilf(logf((float) p) / M_LN2);
        }
        ===========================
        /*avec*/
        #define lowest_bit(x) (x & -x)
        #define is_pow2(x) (x != 0 && x == lowest_bit(x))
        static int ceil_pow2_minus_1(unsigned int x)
        {
        unsigned int i;

        for (i=1; i; i <<= 1)
        x |= x >> i;
        return x;
        }
        #define p2(p) (is_pow2(p)?p:ceil_pow2_minus_1((unsigned int) p) + 1)
        ====================
        /* pareil*/
        int p2(p){
        p -= 1;
        p |= p >> 16;
        p |= p >> 8;
        p |= p >> 4;
        p |= p >> 2;
        p |= p >> 1;
        return p + 1;
        }
        =========================
        • [^] # Re: Informatique : Optimisation, minimisation, projet

          Posté par  . Évalué à 1.

          bin round2up(int x) puisque java est rapide :-))) (oups je m'egare)

          J'ai trouve dans le noyau une telle fonction et j'ai benchmarke rapidos et salement sur 1000000 de passage (les fonctions traite un tableau d'entier remplis aleatoirement qui reste le meme pour les 3 fonctions).

          [14:51:05] cykl ~/test ¤ gcc test5.c -Wall -lm
          [14:51:24] cykl ~/test ¤ ./a.out
          Temps pris par la version de base : 567250
          Temps pris par la version de optimisee : 414988
          Temps pris par la version noyau : 275745
          [14:51:26] cykl ~/test ¤ gcc test5.c -Wall -lm -O3
          [14:53:16] cykl ~/test ¤ ./a.out
          Temps pris par la version de base : 393512
          Temps pris par la version de optimisee : 199696
          Temps pris par la version noyau : 185453

          Ca vaut ce que ca vaut....
          Comme tout benchmark hors contexte. Je colle pas l'horible .c qui ma servit au test :-)

          Je dois par contre avoue que la fonction est pas vraiment mieux ce qui repond pas vraiment a la question! elle se trouve dans pci_st40.c nommee r2p2().

          Je suis tout a fait d'accord que dans certains cas particuliers cela vaut le cout, il s'agit simplement de ne pas croire qu'il faut bousillier le code de partout avec des bizarries que meme les Perlistes comprennent pas.


          On pourrait se faire des Golfs en plus pour vraiment plus rien comprendre
      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  (site web personnel) . Évalué à 1.

        Faut pas oublié que tu utilises un compilateur récent... Sur des machines plus vieilles, ou sur des machines exotiques, peut-être les compilateurs ne sont pas aussi performants, et là il faut se faire à la main l'optimisation...
        Evidemment, ces optimisations sont négligeables par rapport à une optimisation du genre:
        transformée de fourier discrète o(n^2) => transformée de fourier rapide o(nln(n)).
        Mais les optimisations décrites ci-dessus sont intéressantes si tu doit écrire le compilateur... Evidemment, ca n'arrive pas souvent, mais une nouvelle archi (type embarqué) a souvent besoin d'un compilo léger, et faut parfois mettre la main à la pâte...

        Mais je le reconnais, et c'est con pour les mouches, qui vont avoir mal au c*, ça ne vole pas haut...
      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  . Évalué à 3.

        Pour completer ce qui vient de se dire, je travaille avec des compilo proprio (et buggué ...) pour des chip prorio. Il arrive souvent que des optimisations comme sur ++i et i++ soient mal prises en compte. Et souvent, des optimisations d'accès à des éléments de tableau dans des boucles ne sont pas du tout optimisés (genre for(i=0;i<N;++i) a[i] += i; qui va devenir for( i=0,t = a; i < N; ++i,++t) *t +=i; avec n'importe quel compilo sur x86 ne sera jamais fait).

        Je crois que bien des gens ici ne se rende pas compte que des outils de compilations comme gcc, icc ou MCVS sont d'une qualité rare et le fruit d'années de travail par des gens de qualité.

        Programmer certains chip proprio demande à la fois de bien choisir les algo mais aussi de veiller à une implementation qui fait aussi de l'optimisation. Ne pas faire confiance au compilo est souvent de règle (sauf si c'est gcc, pas mal présent dans l'embarquée mais encore assez à mon goût).
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  (site web personnel) . Évalué à 2.

    "Meilleurs papiers de recherche du siecle"
    Il en manque quand même:
    - L'article de Huffman (de 1952) "A method for the construction of minimum redundancy codes" (?) consacré à la compression (de Huffman), utilisé par bzip2, JPEG, ...
    - Le papier de Laurent Schwartz sur les distributions qui a révolutionné les calculs d'EDP et validé le point de vue physique des calculs d'EDP(http://www-gap.dcs.st-and.ac.uk/~history/Mathematicians/Schwartz.ht(...))
    - Et Turing dans tout ça?

    ... y'en a pas mal d'autres, mais déjà, avec ça... Faut vraiment pas oublier Schwartz, notre génie des mathématiques décédé l'été dernier...
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  (site web personnel) . Évalué à 1.

      Je sais pas si on peut mettre la compression huffman dans les meilleurs papiers...
      Peut-etre une section meilleurs papiers informatique ?

      Pour turing, dans cette meme nouvelle categorie, c'est difficile de sortir un papier ou de composer un titre... Si t'as un titre ou une reference, je suis preneur ?

      je vais quand meme pas mettre : Turing on computer ?


      Pour Swartchz, il me faudrait un titre de papiers ou d'oeuvre, sinon, je mets
      Laurent Schwartz on partial differential equations
      C'est un peu juste, non ?
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  . Évalué à 1.

      Tant qu'à faire, autant y rajouter le papier de Gödel (1931)
      "Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme"
      traduit en anglais dans "From Frege to Gödel" de J. van Heijenoort (truffé d'articles repères pour l'informatique et les maths
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  (site web personnel) . Évalué à 3.

    Voici mes réactions sur le sujet, pour avoir codé pas mal en C durant mon cursus universitaire, principalement sur du calcul numérique :

    - l'optimisation du code : TRUST the compiler !!!

    J'ai vite préféré user du temps à écrire des algorithmes déjà optimisés (méthodes de recherche opérationnelle, algo génétiques ...) que de me demander si je devais utiliser i++ plutot que i=i+1 dans mon code.

    - Utiliser les principes de la programmation structurée :

    Citation :
    [...]Programmation dans laquelle on utilise des structures de contrôle (boucles do, for, while...) standardisées qui permettent d'écrire un code plus clair et plus simple à maintenir. [...] La programmation structurée est un nom générique qui couvre un courant de pensée. Ce courant de pensée s'est développé entre les années 1965 et 1975. La programmation structurée a pour but de faciliter le travail de relecture des programmes et de minimiser le travail de maintenance[...]

    un bon exemple sur ces principes ici :

    http://etna.int-evry.fr/COURS/COURSC/node88.html(...)

    le même algo est écrit de plusieurs manières différentes, dont certaines à privilégier. (ici, calcul de la plus grande valeur absolue de deux nombres)

    ++ et bon code à tous
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  (site web personnel) . Évalué à 2.

      Interressant, je vais mettre cette idee dans le quand optimiser... j'ai rajoute ca :

      => Il faut differencer les applications qui necessite des optimisations qui defigure le code qt (exemple : jeux, edition graphiquem, animations) des applis numeriques, scientifiques ou souvent les algorithmes, la structure et la clarte du code priment, pour sa diffusion. Ainsi, il convient avant d'optimiser de choisir sa voie : optmisation algorithmique ou d'ecriture de code.
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  . Évalué à 1.

      Tout à fait d'accord...

      Sans avoir lu les liens (cause que le proxy n'M pas), on peut aussi favoriser :
      - les tests les plus probables afin d'optimiser les branchements prédictifs des processeurs de nouvelle génération (mais c'est parfois au détriment de la lisibilité) et éviter les sauts (goto, jump...)
      - l'alignement des données sur des multiples de l'octet, voire du mot du processeur (mais bien peu portable dans le second cas)
      - les appels Pascal/C selon les arguments en entrée / sortie / mise à jour d'une méthode/procédure
      - les comparaisons binaires
      - les allocations statiques
      - la non utilisation de concepts objets comme les héritages, les classes abstraites, virtuelles, les exceptions
      - define & inline
      - d'autres trucs encore...
  • # Re: Informatique : Optimisation, minimisation, projet

    Posté par  . Évalué à 3.

    Juste histoire d'occupe tes soirees d'ete tu peux regarder :

    http://www.madchat.org/coding/c/hack_processeur_en_C.html(...)

    tout ca pour gagner 3 cycles CPU alors que le choix du bon algorithme en log(n) au lieu de n t'aurais fait gagne quelques annees CPU :-)

    Enfin je pense que quand les programmeurs sauront deja vraiment choisir le bon algo alors il sera temps de s'amuser avec ++i et i++
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  . Évalué à 2.

      J'ai oublie de citer ce lien

      http://www.freebsd.org/cgi/getmsg.cgi?fetch=331177+334627+/usr/loca(...)

      Petite discution sur FreeBSD-Hacker concernant les micros optimisations dans le noyau. Au final ca donne quelque chose comme ca :

      1/ Si tu veux gamins amuse toi sur ta branche a toi mais viens pas nous moisir notre code

      2/ Tu ferais mieux d'aller aider la team de gcc plutot que de faire mumuse sur notre code a nous....
    • [^] # Re: Informatique : Optimisation, minimisation, projet

      Posté par  (site web personnel) . Évalué à 1.

      t'es vaches :) tu gagnes plus de 3 cycles.

      Il existe un algo en log(n) pour la multiplication de matrices pleines ?

      "La première sécurité est la liberté"

      • [^] # Re: Informatique : Optimisation, minimisation, projet

        Posté par  . Évalué à 1.

        C'est une remarque generale :-)

        Comme quoi il vaut mieux choisir le bon algo et seulement ensuite on regarde ce qu'on peut optimiser et que ca reste maintenable.

        Aller je met 4 cycles pour te faire plaisir :-þ

        Pour la matrice : oui si elle est pleine de 0
        • [^] # Re: Informatique : Optimisation, minimisation, projet

          Posté par  (site web personnel) . Évalué à 1.

          Donc elle est creuse ta matrice :) Mais c'est vrai que pour la maintenance.... (en même temps, la définition d'une multiplication matricielle ne change pas tous les jours)

          Nan, parce que c'est moi qui écrit l'article que tu pointes (cela fait d'ailleurs toujours plaisir d'être cité), et que j'étais assez fière des différences de perf entre l'implementation de base et celle optimisé (genre x4 minimum, et x25 dans le cas extrème d'une matrice 512*512).

          La différence n'est donc pas négligeable.

          "La première sécurité est la liberté"

  • # break, goto...

    Posté par  . Évalué à 1.

    Dans les projets qui tournent sur des machines "normales" de bureau, les règles de qualité interdisent ces instructions.

    Peut-être que je ne travaille pas sur un logiciel à fortes contraintes, mais il me semble, comme dit plus haut, qu'il est bien plus intéressant de respecter des conventions d'écriture et de choisir les bons algorithmes plutôt que de tenter de faire des économies de bouts de chandelles...
    • [^] # Re: break, goto...

      Posté par  (site web personnel) . Évalué à 1.

      Il existe d'autres environnements. (embarqué)
      Le temps reel dans des applis.

      Enfin, n'empeche que je ne suis on ne peut plus d'accord, et je pensais l'avoir fait passer dans mon "Quand optimiser"... mais cela n' pas l'air d'tre le cas...
      Je vais donc rajouter :


      Avant de defigurer du code par des optimisations barbares et dependante de l'architecture de la machine, Il faut absolument etre sur d'utiliser le meilleur algo. Au besoin, il faut pouvoir prouver son choix. Verifier son analyse du probleme et l'adequation de sa solution.

      Alors, apres tout cela, si vous n'arrivez pas a obtenir un code assez rapide, vous pouvez essayer d'optimiser de facon barbare.

      Et je vais diviser en deux :
      Optimisation propre
      Optimisation barbare

      Mieux ?
      • [^] # Re: break, goto...

        Posté par  (site web personnel) . Évalué à 3.

        La "règle" est que tu peux gagner un facteur 1000 avec un bon algo et au maximum un facteur 10 avec du codage optimisé.

        "La première sécurité est la liberté"

        • [^] # Re: break, goto...

          Posté par  (site web personnel) . Évalué à 1.

          Voila qui est clair.
        • [^] # Re: break, goto...

          Posté par  . Évalué à 1.

          Je te suis sur tes propos. Il ya aussi un ordre dans les optimisations que j'ai appris il y a très longtemps:

          1/ la complexité des algos (bref bien choisir les algo).
          2/ les structures de données.
          3/ le code en lui-même.

          Avec les années et la maturité de compilos sur les machines de bureau et les serveurs, la dernière étape (3/) n'a presque plus de sens. Presque, parce que pour le multimédia et les instructions spécialisées (niveau 3/), il faut faire la 2/ pour ensuite avoir la 3/. Il arrive aussi que la 2/ et la 1/ se retrouve liées.
          Mais je trouve finalement que l'importance du cache dans les perfs en calcul renforce le niveau 2/ dans les optimisations. Un bon exemple se trouve avec les calculs sur les matrices, il est possible de multiplier les perfs par 4 en arrangeant différemment les éléments.
          • [^] # Re: break, goto...

            Posté par  (site web personnel) . Évalué à 1.

            Voir même bien plus que 4.

            La structure des données impact sur l'algorithme à choisir. Une structure simple peut faire en sorte qu'un algo n² soit plus rapide qu'un log(n). (le cas typique est le trie à bulle d'une liste déjà "bien" trié) : genre un bète tableau indexé par un entier peut être bien plus rapide qu'un hash ou qu'un arbre binaire, si la structure est à haute densité on ne perd pas trop de place.

            En général, les études d'algorithmes que l'on lit dans les livres considèrent que tout acces mémoire est à cout constant. Or un caches miss c'est de 20 à 200 cycles de perdu.

            La structure de donné permet d'augmenter un peu la localité statique des données (genre écrire tab[100][3] et non tab[3][100] si on utilise les 3 élèments de suite à chaque fois)

            un autre conceil : ne jamais utiliser de pointeur !! il faut utiliser un tableau. Les const aident aussi le compilo.

            "La première sécurité est la liberté"

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.