L'art perdu de l'optimisation...

Répondre
Partager Rechercher
Bon, j'étais en train de parcourir un bouquin sur PHP 5 avancé quand je tombe sur la description du modulo :

Citation :
Modulo renvoie le reste de la division. Par exemple pour 15 % 2, on fait le calcul suivant : 15 = 7 * 2 + . Le modulo est donc 1.
Jusque là ça va....

Citation :
Une des applications principales est de savoir si un nombre est pair ou impair.
Nooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnnnnnn!!!!

Ca sert pas à ça

Modulo c'est une opération rox0romgwtfpwndkthxbye qui permet de coder un tableau à deux dimensions dans une seule. Par exemple si vous avez une chaîne de 64 caractères, vous pouvez coder un échiquier et accéder aux cases avec :

Code PHP:

$ligne $numcase ;
$colonne $numcase 
Sinon ça vous choque ou pas de tester la parité avec modulo ?

Ca fait quand même une division entière qui est une des opérations les plus looooooooongues qu'un processeur peut effectuer... alors qu'un simple test de bit est beaucoup plus rapide...

Code PHP:

  $impair $nombre 
Je sais que c'est une cause perdue vue la rapidité des processeurs actuels, mais ça fait quand même mal de voir des choses comme ça dans des bouquins sérieux.
Citation :
Publié par Olblach
Modulo c'est une opération rox0romgwtfpwndkthxbye qui permet de coder un tableau à deux dimensions dans une seule. Par exemple si vous avez une chaîne de 64 caractères, vous pouvez coder un échiquier et accéder aux cases avec :

Code PHP:

$ligne $numcase ;
$colonne $numcase 
Ouais mais dans la série code chiant à lire ça se pose là

Citation :
Sinon ça vous choque ou pas de tester la parité avec modulo ?
Pas plus que ça, au moins tout le monde comprend d'emblée ce que ça fait, contrairement à ta version.

Après je préfère du code lisible à du code optimisé à bloc, principalement parce que ce que je code n'est pas hyper gourmand et ça m'évites de devoir penser à des détails comme ceux-ci.
plop les gens,

[troll non optimisé]
du coup on doit pouvoir en déduire que les mecs qui ont codé GTA4 sur pc aimaient bien le code lisible aussi non?
[/troll]

Wardead
P.S. sinon au secours cet usage du modulo ...
c est difficile de faire pire niveau optimisation que ca quand meme...
c est un exemple typique de "je fais bosser l'ordi comme si c'etais un humain sans utiliser ces possibilités d'ordinateur"
pour faire une comparaison foireuse, c est comme si :

tu as une voiture, pour faire le meme trajet on te file un hélicoptere et du coup tu vole a 10cm du sol en suivant la route que tu prend d'habitude
"ben quoi ca marche aussi comme ca non? je suis arrivé a destination "
Citation :
bonjour l'usage de la division...
Hmm pas sûr de ce que tu sous-entends là...

On peut partir là dans des trucs comme ça effectivement :

Code PHP:

$ligne $numcase >> 
Mais ça ne marche que parce que c'est 8 si c'était 10 la dimension on revient à / et %
Bah c'est sur que l'optimisation n'est plus de rigueur quand tu vois les jeux qui sortent depuis 5-6 ans. Le processeur étant moins utilisé que le GPU osef d'optimiser.
Quand je vois les merveilles d'optimisation sur Amiga et autre antiquité et que tu compares à now ca fait pleurer
Citation :
Premature optimization is the root of all evil.
ça me fait penser aux types qui mettent des ' a la place des " ( ou inversement, selon le langage ) "parce que ça va plus vite" et qui dans le même temps vont t'utiliser un algo de tri en O(n²) là ou un quicksort ira très bien.

Dans 90% des cas, la lisibilité du code (pour la maintenabilité notamment) a plus d'importances que les performances pures. Pour l'exemple de la parité, le masque binaire étant simple, c'est vrai que ça coûte rien... Mais bon, avec un langage compilé (certes pas PHP), le compilateur devrait faire l'optimisation de lui même de toutes façons.

De toutes manières, quand y a un problème de perfs qui n'est pas évident, la première chose a faire c'est d'ouvrir un profiler.

NB : Je suis le seul que ça choque que dans un bouquin de PHP "avancé" on tombe sur une explication du modulo ?
Citation :
Publié par Grahald Mills / Popu
Bah c'est sur que l'optimisation n'est plus de rigueur quand tu vois les jeux qui sortent depuis 5-6 ans. Le processeur étant moins utilisé que le GPU osef d'optimiser.
Quand je vois les merveilles d'optimisation sur Amiga et autre antiquité et que tu compares à now ca fait pleurer
Ben le pire c'est qu'il y a encore des mecs qui font des démos "A la Amiga", quand tu vois ce que font les demos que tu peux trouver là :

http://www.farb-rausch.de/

ou là :

http://www.pouet.net/

tu te demande ou les éditeurs recrutent (ou qui s'occupe de leur recrutement)

Non en fait les mecs, personne ne leur demande d'optimiser, c'est plus un problème.....
Citation :
Publié par - Caïn Abalham -
Après je préfère du code lisible à du code optimisé à bloc, principalement parce que ce que je code n'est pas hyper gourmand et ça m'évites de devoir penser à des détails comme ceux-ci.
Oui enfin si ton code tu le vends, la lisibilité c'est chouette pour resoudre les bugs, c'est sur, mais ton client il va jamais le lire ton code (enfin ca depend du langage, forcément si c'est non compilé il pourra le lire si il veut / y arrive). Donc pour lui ce qui est important c'est un truc qui fonctionne bien et qui soit le plus rapide / leger possible.
Bon grapiller le pouilleme de secondes on s'en fout : si pour tester la parité tu utilises un modulo plutot qu'un et logique une fois (hors boucle etc...) ca va pas baisser tes perfs, par contre si il est dans une boucle, evalué des millions de fois dans un court laps de temps la tu pourras (peut etre ??) voir des changements.

Après forcément c'est dans un bouquin sur le PHP faut pas non plus trop en attendre (HOP LE TROLL GRATOS ).

Bon c'est aussi pour ca qu'en général il font des belles fonctions standard dans les libs maths et autres (pour certains langages), ca mange jamais de pain de les utiliser en général les gens qu'ont codé ces fonctions / libs savent ce qu'ils font (les libs "officielles" hein ).

Mmmmmmmh valgrind / callgrind
Bien sûr que si ça optimise, les dev ne se basent pas que sur la puissance des PC actuels, seulement optimiser un Amiga et un processeur avec des registres 64bits c'est très différent quand même
Le PC d'aujourd'hui est beaucoup plus complexe à gérer qu'un Amastrad CPC
Après c'est clair que certains jeux ne paraissent pas optimisés ... ( crysis, gta4 ect ... )
Pendant mes études on avait pas le droit de faire des fonctions de plus de 25 lignes entete inclue et 5 fonctions par fichier.
Bah c'était ptt chiant mais ca rendait le code lisible, plus propre, on réutilisait les fonctions plusieurs fois, plus facile de commenter, etc.
Bah les qq exemples que j'ai vu dans le monde professionnel c'était super crade alors ne parlons pas de l'optimisation
Citation :
Publié par Grahald Mills / Popu
Pendant mes études on avait pas le droit de faire des fonctions de plus de 25 lignes entete inclue et 5 fonctions par fichier.
Bah c'était ptt chiant mais ca rendait le code lisible, plus propre, on réutilisait les fonctions plusieurs fois, plus facile de commenter, etc.
Bah les qq exemples que j'ai vu dans le monde professionnel c'était super crade alors ne parlons pas de l'optimisation

EPITA STYLE SPOTED LOL !!!!!


Amicalement
Wardead
P.S. celui qui n'a pas fait la bistro ne peux pas comprendre
Y'a un an, dans la boîte où je bossais alors, on avait un problème de génération de chaîne HTML.
C'était codé en VB6.
Oui, la vie est cruelle parfois.

Ben j'avoue que j'ai quand même été sur le cul quand mon boss d'alors, docteur ès informatique, a mis les mains dans le cambouis, trouvé le problème et a corrigé ça avec un solution élégante : surcharger l'opérateur de concaténation des chaînes de VB avec une mieux optimisée.

Le gain ? Sur une génération de chaîne qui prenait 1 à 2 min (problème de timeout du serveur), on était tombés à moins de 10 sec.

Toujours sur la même appli, l'activation toute simple de la compression HTTP du serveur permettait de soulager énormément le client lorsque nos pages ont commencé à atteindre les 3 ou 4 Mo.

Quand on ne choisit pas ses outils, et que des problèmes tordus se posent, ça fait du bien de savoir optimiser. C'est même essentiel parfois.
Citation :
Publié par Saroh(hul)
Oui enfin si ton code tu le vends, la lisibilité c'est chouette pour resoudre les bugs, c'est sur, mais ton client il va jamais le lire ton code (enfin ca depend du langage, forcément si c'est non compilé il pourra le lire si il veut / y arrive). Donc pour lui ce qui est important c'est un truc qui fonctionne bien et qui soit le plus rapide / leger possible.
Je suis d'accord que le client s'en cogne, mais bon le code il a de fortes chances d'évoluer dans le temps et tu seras obliger de remettre le nez dedans.

Et là, pour peu que de l'eau ai coulé sous les ponts, tu sera content de retrouver du code lisible (dans le genre je suis retombé il y a quelques temps sur le code produit durant mon DEA, j'ai rien capté à ce que j'avais fait )
Citation :
Publié par - Caïn Abalham -
Je suis d'accord que le client s'en cogne, mais bon le code il a de fortes chances d'évoluer dans le temps et tu seras obliger de remettre le nez dedans.

Et là, pour peu que de l'eau ai coulé sous les ponts, tu sera content de retrouver du code lisible (dans le genre je suis retombé il y a quelques temps sur le code produit durant mon DEA, j'ai rien capté à ce que j'avais fait )
Ouais faut trouver le juste milieu, un code lisible si possible, et quand ca vaut vraiment le coup d'optimiser un bon gros code des cavernes ou ya que toi dans la boite qui le comprend, même commenté (en plus ca te rend indispensable a ton entreprise, c'est tout benef -- "mais si vous me virez qui pourra maintenir tel projet ??" ).
Citation :
Ouais faut trouver le juste milieu, un code lisible si possible, et quand ca vaut vraiment le coup d'optimiser un bon gros code des cavernes ou ya que toi dans la boite qui le comprend, même commenté (en plus ca te rend indispensable a ton entreprise, c'est tout benef -- "mais si vous me virez qui pourra maintenir tel projet ??" ).
Le truc typique à faire si tu veux te faire griller, ton prochain conseil c'est de mettre des timebomb dans ton code pour pas qu'ils te virent?
Le but de l'optimisation c'est pas non plus de rendre le code illisible hein, ça c'est l'obfuscation et il y a des gens qui sont payés très cher pour faire ça.

Citation :
Publié par SekYo
NB : Je suis le seul que ça choque que dans un bouquin de PHP "avancé" on tombe sur une explication du modulo ?
Moi c'est plutôt l'explication bancale qui m'a choqué. Le modulo a connu son heure de gloire quand on n'avait les tableaux qu'à une seule dimension. Ca peut également servir si tu veux te débarrasser des nombres à virgules flottantes dans tes calculs.
Citation :
Publié par - Caïn Abalham -
Je suis d'accord que le client s'en cogne, mais bon le code il a de fortes chances d'évoluer dans le temps et tu seras obliger de remettre le nez dedans.
Et là, pour peu que de l'eau ai coulé sous les ponts, tu sera content de retrouver du code lisible (dans le genre je suis retombé il y a quelques temps sur le code produit durant mon DEA, j'ai rien capté à ce que j'avais fait )
Je plussoie.
Il m'est arrivé une fois d'optimiser le code existant d'un de mes clients avec des variables variables (du type ${$data[$valeur].$entree} ). J'étais passé de 30 lignes à 2 lignes. Mais j'ai morflé quand je suis revenu dessus 2 ans plus tard... Au final j'ai recodé en plus long mais plus compréhensible.

L'optimisation c'est bien tant que c'est compréhensible ou que le gain de performance est évident. Sinon la lisibilité prime.
Et l'optimisation il faut aussi l'indiquer/expliquer.
Je me suis retrouvé à devoir optimiser du vieux code (en pro*c) écrit par des personnes ayant toute quitté la boîte. Il m'a fallu un bout de temps pour trouver les traitements les plus gourmands dans le code car :
- il était à peine commenté
- il y avait tout un tas d'optimisations "maison" pour des parties non critiques du code qui rendaient la lecture difficile (j'ai réécrit ces parties sans les optimisations et de manière plus lisible, résultat : pas différence de perf mesurable)
- les parties critiques ont été tellement optimisées qu'en pratique c'était des boites noires.

Au final j'ai fini par apprendre que les parties critiques ont été optimisées par une personne infiniment plus compétente que moi dans ce domaine, et je me suis contenté de réorganiser le code (que j'avais rendu lisible) afin d'éviter des appels inutiles à ces parties critiques.
J'ai gagné 30% de perf, et ce gain j'aurais mis 10 fois moins de temps à l'obtenir avec du code propre.

Le mieux est l'ennemi du bien.
Bertrand Meyer explique qu'il faut inclure le temps de développement dans la prise en compte de l'optimisation. Si ton optimisation te fait gagner 4 heures au total mais que ça t'a pris 8 heures à développer bin en fait t'as perdu 4 heures.

Je ne suis pas non plus pour l'optimisation à outrance mais bon, pour rester dans le modulo vu que c'est le thème, quand tu écris

Code PHP:

$colonne $numcase 
Rien ne t'empêche de mettre un commentaire expliquant que tu fais un modulo 8, comme ça si la dimension passe à 9 au lieu de 8, le codeur qui viendra après toi saura ce qu'il faut faire. Je ne vois aucun problème de lisibilité si c'est commenté.

Au point de vue rapidité on peut en parler, normalement on utilise un profiler pour déterminer les parties critiques, celles qui prennent 90% du temps processeur et on n'optimise que ça. Ceci dit on peut faire une optimisation globale par exemple virer tous les nombres à virgule flottante pour passer en entier, si ton code fais beaucoup de calculs tu vas sentir la différence.
Il y a encore la demoscène et des programmeurs isolés qui font tout pour optimiser.


Regardez par exemple ce qu'on peut rentrer dans un peu moins de 0.01 Mo.

.kkrieger: chapter 1 beta (96k) (site officiel)
Cliquez ce bouton ou survolez le contenu pour afficher le spoiler
Carrément jouable pour une fois, type Quake Like

Ces mecs sont des dieux.

Edit. si vous n'arrivez pas à utiliser les touches ZQSD pour vous déplacer (genre vous avancez avec W) --> Alt-gauche+Shift IG pour passer en qwerty corrige le problème. ^^
Citation :
Publié par Olblach
Rien ne t'empêche de mettre un commentaire expliquant que tu fais un modulo 8, comme ça si la dimension passe à 9 au lieu de 8, le codeur qui viendra après toi saura ce qu'il faut faire. Je ne vois aucun problème de lisibilité si c'est commenté.
Sur cet exemple précis je suis entièrement d'accord que si c'est expliqué, ça ne pose pas de problèmes de lisibilité.
Pour l'usage des tableaux à simple dimension pour simuler des tableaux à deux dimensions, je suis nettement plus dubitatif (pas sur l'optimisation obtenue, j'avoue que j'ai aucune idée du temps gagné, mais plus sur la lisibilité de la chose). Même si une fois expliqué c'est relativement simple à comprendre, j'ai tendance à penser que ça peut vite devenir relou pour le mec qui doit retoucher ton code.

Mais sinon je suis absolument d'accord pour dire que du code optimisé n'est pas toujours illisible et que du code non optimisé n'est pas toujours lisible.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés