Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un développeur fait tenir un univers de fractales dans 4096 octets
Optimise-t-on encore suffisamment les codes ?

Le , par Gordon Fowler

0PARTAGES

15  0 
A force de voir des effets spéciaux à plusieurs millions de dollars, on en oublierait presque que la vraie performance, celle qui suscite l’enthousiasme, réside aussi dans la capacité de faire plus avec moins. Beaucoup moins.

C’est une des leçons que nous rappelle un développeur qui vient de réaliser un véritable exploit en faisant tenir un monde de fractale dans un fichier de… 4096 octets.

Réalisé dans le cadre du concours Assembly 2012 (qu’il a gagné), le résultat est une scène baptisée Hartverdrahtet tout simplement hallucinante (à regarder en HD et en plein écran bien sûr).



Son auteur, Akronyme Analogiker, a passé deux mois à développer et surtout à optimiser le code avec des outils comme le compresseur Shade Minifier.

En visionnant cette démo, un ami a d'ailleurs eu une réflexion intéressante sur cette partie du travail. Pour lui, l'augmentation des capacités du hardware ferait que de plus en plus de développeurs ne se donneraient plus vraiment la peine d'optimiser leurs codes. « Du coup les programmes deviennent proportionnellement plus lents qu'avant ».

Quoiqu’il en soit, ces « 4k » de Hartverdrahtet prouvent que certains s’en préoccupent encore et illustrent à merveille cet adage anglo-saxon : « less is more ».

Source : Page du projet

Et vous ?

Que pensez-vous de cette démo d’un univers de fractales dans un fichier de 4k ?

Les développeurs se donnent-ils encore la peine d'optimiser leur code ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de arkadih
Nouveau membre du Club https://www.developpez.com
Le 22/05/2012 à 14:21
le fichier fait 4ko, d'accord, mais qu'en est-il de l'empreinte en RAM du programme ? l'auteur a peut etre trouvé un algorithme super permettant ce
résultat mais qui créé des structures énormes en RAM.
Dans ce cas, l'optimisation est une optimisation en espace disque, mais pas en ram ni forcément en temps de calcul, ce qui ne rend donc pas le programme moins avare de puissance et rend caduque la remarque sur les besoins hardware qui augmentent.
ça reste une sacré démonstration cependant et c'est magnifique.
14  0 
Avatar de MiaowZedong
Membre extrêmement actif https://www.developpez.com
Le 22/05/2012 à 13:59
Citation Envoyé par Exentius Voir le message
J'ai eu la même en correction d'examen.
J'ai mis un petit bout de code pour éviter d'instancier dans une collection un objet plutot que d'instancier ce même objet avec ses attributs en null si certaines conditions en théories vérifiées dans le constructeur étaient mauvaises.
Le prof m'a dit "C'est pas la peine de faire ce genre d'optimisations, avec le prix de la mémoire actuellement...."
Et pourtant j'ai de l'estime pour lui sur ce qu'il pense d'Apple et Facebook...
Il a raison: pour une entreprise, aucun intérêt sauf pour quelques cas particuliers.

Par contre, pour l'utilisateur, la question serait plutôt "quel intérêt a avoir des ordinateurs dernier cri si ça rame autant qu'il y a cinq ans?"
14  1 
Avatar de raimbow
Nouveau membre du Club https://www.developpez.com
Le 22/05/2012 à 14:00
Je ne suis pas tellement d'accord avec la conclusion. Les développeurs passent moins de temps à optimiser et se "repose" sur les performances bien plus élevés du hardware MAIS ça permet au final d'être plus productif puisque l'optimisation qui prend du temps ne rajoute pas de fonctionnalité, donc si en peu s'en passer ça dégage du temps pour autre chose comme ajouter plus de fonctionnalités.

Aujourd'hui, pourquoi passer des jours (disons 5 jours * 8h * 30€/h = 1200€) à faire un programme qui consommerais par exemple 20% de mémoire en plus alors qu'une barrette de RAM de 4Go c'est 30€ ?

En plus, l'optimisation rajoute souvent des niveaux de complexités qui peuvent rendre la maintenance sur le long terme plus difficile.

Je suis pour l'optimisation, mais seulement lorsque c'est vraiment nécessaire (cf. la loi de Pareto) et je ne pense pas que c'est forcement de la fainéantise que de ne pas systématiquement optimiser mais plutôt du bon sens.
11  1 
Avatar de Hizin
Modérateur https://www.developpez.com
Le 22/05/2012 à 14:04
Citation Envoyé par Rambox
Aujourd'hui, pourquoi passer des jours (disons 5 jours * 8h * 30€/h = 1200€) à faire un programme qui consommerais par exemple 20% de mémoire en plus alors qu'une barrette de RAM de 4Go c'est 30€ ?
Peut-être parce que ce programme n'est pas le seul à tourner sur la machine hôte ?
Peut-être parce que SI chacun des logiciels fait ça, il faut avoir 12 Go de RAM alors que 1.5 Go aurait été nécessaire ? (caricature)
Peut-être parce que c'est encore important, pas forcément allez dans le tweaking intégral, mais au moins de faire un minimum attention (j'ai une pensée pour les smartphone là) ?
9  0 
Avatar de
https://www.developpez.com
Le 22/05/2012 à 22:39
Citation Envoyé par mewtow Voir le message
Sinon, en général, je pense pouvoir m'autoriser à penser qu'il soit possible que les développeurs actuels ne pensent pas à optimiser leur code.
Tu ne devrais pas... La plupart des développeurs regardent les performances de leur code, et cherchent à l'améliorer *quand c'est nécessaire*, sinon il n'y a pas grand chose qui tournerait, même sur des ordinateurs modernes, compte tenu de l'explosion des volumes de données gérés (même par des programmes assez basiques).

Citation Envoyé par mewtow Voir le message
C'est une des seules explications que j'aie pour expliquer la Loi de Wirth, avec l’essor de la programmation orientée objet et des implémentations de langages basées sur de la compilation JIT
A mon avis, ce n'est pas la bonne... une fois de plus, il faudrait chercher du côté des volumes d'information traités, du nombre de programmes tournant concurremment.

La programmation orienté objet c'est aussi une forme d'optimisation: celle des temps de développements et des couts de maintenance évolutive. Et ce n'est pas forcément plus lent que le procédural.

Citation Envoyé par mewtow Voir le message
-> La "croyance" que l'optimisation prend tu temps, nuit à la maintenance ou la lisibilité, etc.
C'est pourtant vrai... Optimiser du code demande des tests, du développement supplémentaire, et se traduit souvent par des algorithmes plus compliqués que les 'basiques' qu'on a fait au début (sinon on n'optimiserait pas).

Citation Envoyé par mewtow Voir le message
-> La croyance que " early optimisation is evil ", inculquée de force dans les écoles d'informatique,
C'est vrai et faux... L'un des principaux pourvoyeurs de cette croyance est Knuth, qui n'est pas exactement un mauvais programmeur (ni un moderne). Je crois que la façon dont il faut comprendre l'adage est que l'on ne peut optimiser qu'une procédure que quand on en a compris le fonctionnement et les limites. En général, quand on commence à développer, on se fait une idée fausse des difficultés, des blocages, des volumes à traiter, des temps nécessaires. En optimisant trop tôt, on a de grandes chances de s'attaquer au mauvais problème, et de compliquer gratuitement le code sans pour autant l'accélérer.

Citation Envoyé par mewtow Voir le message
pousse à utiliser des profilers et autres outils de benchmarking qui font pire que mieux et donnent des chiffres totalement biaisés
C'est jeter le bébé avec l'eau du bain... L'objet d'un profileur, ce n'est presque jamais de te donner des chiffres justes, sur le nombre de cycles, d'accès au cache, ou chaipaquoi, mais de te donner une vision correcte des endroits de ton code ou le temps est perdu... Un profileur, ca compte des appels, des accès, et des durées à la louche. Les mesures de temps précises, c'est juste le marketing.

En revanche, optimiser sans profileur? tu fais quoi? tu mesures des temps d'exécution avec ton i-phone, et tu mets les nombres d'appels dans des variables locales?

Citation Envoyé par mewtow Voir le message
-> L'usage actuel qui est fait des complexités algorithmiques, qui pousse à passer sous le tapis les constantes multiplicatives.
Euh? Un calcul de complexité donne toujours les constantes multiplicatives. Maintenant, elles n'interviennent qu'au second ordre. Le premier objectif de l'analyse de complexité, c'est de savoir comment un algorithme résiste à l'augmentation des volumes de données. Entre un linéaire et un logarithmique, il y aura rarement photo, pareil entre un linéaire et un quadratique.

Citation Envoyé par mewtow Voir le message

-> Le fait que les programmeurs lambdas ne savent pas optimiser convenablement. Qui connait le concept de Cache oblivious Algorithm dans l'assemblée ? Qui sait comment optimiser un programme de manière à améliorer sa localité ? Pire : de nos jours, qui sait ce qu'est une mémoire cache ?
Personne sauf toi, bien sur... Sérieusement, ce type d'optimisation 'machine' est généralement laissée au compilateur. Optimiser correctement, quand on est programmeur, la plupart du temps, c'est s'intéresser à l'algorithmique et à la mémoire utilisée. C'est là qu'on gagne les ordres de grandeur, quelle que soit l'architecture...

Maintenant, je pense que la principale raison pour laquelle il y a pas mal de code non optimisé tient au fait que l'optimisation, ça demande pas de l'expérience, du recul et du temps. Dans la vraie vie, ça manque, pas qu'en informatique, d'ailleurs.

Ca demande aussi un bon bagage scientifique (des maths, plutôt qu'une connaissance des architectures machines, si tu veux mon avis...)

Francois
9  0 
Avatar de GLDavid
Expert confirmé https://www.developpez.com
Le 22/05/2012 à 13:35
Magnifique travail !
Et un gros +1000 à son pote qui dit que le matériel nous rend fainéant et crade !
Je me souviens d'une démo que j'avais fait où je montrais un de mes programmes Java écrivant des propriétés physico-chimiques dans un fichier. Le programme n'occupe pas plus de 5Mo de mémoire. Une question était: "Quel est l'intérêt de n'occuper que 5Mo alors que tu as plein de mémoire?"

@++
8  0 
Avatar de raimbow
Nouveau membre du Club https://www.developpez.com
Le 22/05/2012 à 14:29
Citation Envoyé par Hizin Voir le message
Peut-être parce que ce programme n'est pas le seul à tourner sur la machine hôte ?
Peut-être parce que SI chacun des logiciels fait ça, il faut avoir 12 Go de RAM alors que 1.5 Go aurait été nécessaire ? (caricature)
Peut-être parce que c'est encore important, pas forcément allez dans le tweaking intégral, mais au moins de faire un minimum attention (j'ai une pensée pour les smartphone là) ?
12Go RAM ça coûte toujours moins chère que deux jours de développement. Mais oui, c'est pas une raison pour coder comme un porc on est d'accord.

Personnellement j'optimise la plupart du temps en suivant à peu près la loi de Pareto (moins de 20% du code) et seulement une fois le programme terminé quand je peux analyser en situation réel (ou presque) les points qui sont vraiment gourmand. ça me semble être un bon compromis entre perte de temps et gain d'efficacité.
7  0 
Avatar de Jidefix
Membre éprouvé https://www.developpez.com
Le 22/05/2012 à 14:56
Je suis d'accord avec le post d'origine. Quand on voit qu'un angry bird ou un tower defense sans le moindre effort d'IA met à genoux un processeur de 1 GHz, on se demande comment on faisait avant!

Enfin, il faut bien que les constructeurs vivent aussi
6  0 
Avatar de Paul TOTH
Expert éminent sénior https://www.developpez.com
Le 22/05/2012 à 15:52
alors déjà les fractales étant récursives par nature, elles sont propices à l'optimisation

ensuite l'exécutable n'est pas standard, au lieu d'avoir un DOS STUB et différentes sections, les informations se chevauchent afin d'obtenir un format de fichier le plus compact possible tout en étant compatible Windows...l'application plante probablement si elle est lancée sous DOS au lieu d'afficher (en mode DOS) "ce programme nécessaire Windows" ou équivalent.

mais bon personnellement je suis favorable à la réduction de la taille des executables sans avoir recours aux compresseurs d'exe qui ont des conséquences dramatiques sur la gestion mémoire. et cela n'implique pas forcément un code plus complexe, ni même des outils plus limités...en tant que développeur Delphi je déplore notamment la constante augmentation de la taille des exécutables pour un même source quand on utilise un compilateur plus récent.
6  0 
Avatar de el_slapper
Expert éminent sénior https://www.developpez.com
Le 25/05/2012 à 15:05
Je vais troller, mais une des raisons du bloated software moderne, c'est aussi l'application bête et méchante des design patterns. Non qu'ils soient inutiles en tant que tels, mais qu'appliqués n'importe comment, ils poussent à mettre des tonnes de code partout et encore partout pour afficher 3 misérables caractères.

(je compte les -1 ).
6  0