Si j'ai remarqué une chose en programmation, c'est qu'il suffit parfois d'un petit changement pour améliorer sensiblement les performances d'un script, ou d'un programme.

Blogotext a vu sa durée de génération des pages divisé par 20 depuis que je travaille dessus, et à chaque fois, les changements en question n'impliquaient que des modifications mineures, comme le renversement du sens d'imbrication de deux boucles ou le modification de l'ordre de des fonctions.

Voici un autre exemple récent qui montre un code de 224 lignes qui améliorerait les performances de Linux, et Linus Torvalds félicite en personne l'auteur de ce patch.

Quand à augmenter les performances par la modification d'un algo, je me souviens qu'un homme avait réussis à trouver 2,7 billion de décimales de Pi (le 3,1415...) avec un ordinateur de bureau, explosant au passage l'ancien record effectué par un super-calculateur japonais.

Certes, il a mis 131 jours pour ça (contre 29 heures pour le calculateur), mais au vu de la différence entre un PC et un super calculateur, ça relève de l'exploit.

Tout ça pour dire qu'il suffit parfois de quelques petites modification dans un programme pour gagner drastiquement en performances. Ça me laisse plutôt sans voix.

(J'ai tenté un petit exemple sur ma page d'optimisation des sites web)

14 commentaires

gravatar
qwerty a dit :

Merci. En effet c'est fou. Surtout sur les bugs !

gravatar
0siris a dit :

Puis-je me permettre de faire une remarque sans me faire incendier ?
La plupart du temps, quand je vois un sondage, une publicité ou une statistique, je la retourne pour voir ce qu'il en ressort.
Par exemple: "65% d'opinion défavorables à Sarkozy." Ça sous entend 35% de favorable + indécis.

On entend tout et n'importe quoi bien souvent car les gens ne se documentent pas et relaient l'information sans la vérifier et/ou l'étudier et/ou la comprendre.

Exemple: pour le "détournement d'internet par les Chinois"... quand on écoute des gens compétents, on entend un autre son de cloche. Je ne dis pas que les Chinois sont des enfants de coeur, juste qu'il ne faut pas colporter des idées nauséabondes et des mythes sans fondement (un peu comme les voleurs de sexe en Afrique...)
A lire: Détournement DNS en Chine sur Bortzmeyer.org

Si ce patch améliore le rendement sous une charge extrême (compilation sur 64 threads + video HD + navigation...), est-ce que ça ne détériore pas l'expérience de la majorité gens qui n'utilisent grosso modo qu'entre 3 et 5 logiciels en même temps ?
Est-ce que ce petit bout de code ne va pas moins bien répartir une faible charge qu'avant ?
D'autant plus qu'on pouvait déjà réguler une charge extrême avec "nice"...
A lire: Scepticisme sur le patch kernel sur le blog de Con Kolivas

Maintenant, avant de recevoir tomates et oeufs, méditons...
...
..
.

...
Vous pouvez y aller ! =D

gravatar
qwerty a dit :

Jouer au téléphone arabe. L'information circule comme ça.
ex :
Début :
J'aime le chocolat
a la fin :
attaque a bieme !
C'est fou comme l'information peut être modifier en voyageant dans l'espace-temps !

gravatar
Just1602 a dit :

@Osiris : Tu as effectivement raison, parfois l'information est déformée et pas toujours pour le meilleur.

Sinon pour ce qui est de ce patch, il sera utilise au gens comme moi par exemple qui tourne sous Gentoo et qui doit compiler non seulement le kernel, mais tout le système au complet. Même si je n'utilise qu'un ou deux logiciels durant une compilation l'ordi peut devenir très lent.

Pour ce qui est des risques qu'il peut engendrer, je dirais que si Linux Torvalds lui même à prit le temps de s'intéresser à ce patch et de féliciter l'auteur personnellement je crois qu'il sera en mesure de modifier le dit patch pour régler les possible problèmes qu'il pourrait engendrer.

@++

Justin :)

gravatar
0siris a dit :

Un gentooïste !!!
Mettez vous à genoux !

Bonsoir Maître Justin.

gravatar
Djul a dit :

Gentoo, ou comment passer plus de temps à configurer son système qu'à l'utiliser ;)

Mais il en faut ! #applause

gravatar
Guenhwyvar a dit :

Exemple simple : mettre en PHP dans un tableau, tous les nombres paires, de 0 à 1 000 000.
$j[] = 1;
T'es sûr que tu mets tous les nombres pairs, là ? =)

gravatar
Le Hollandais Volant a dit :

@0siris : Pour les DNS, Stéphane Bortzmeyer dit que finalement, on est pas sûr d'une censure, car vu de l'extérieur, on ne voir rien du tout...
Pour le Patch : le fait que ça puisse augmenter la capacité du CPU à mieux se répartir les taches au cours du temps en cas de surcharge du serveur ne signifie pas que ce soit mauvais en cas de "sous"-charge du serveur.

Au pire, les performances ne changent pas, mais c'est pas forcément mauvais pour autant.

D'après Torvalds, le patch améliore les performances, du noyau sans dérégler toute la machinerie autour...

@Guenhwuvar : zut, en effet, il faut bien entendu remplacer le "1" par "$1".
Je corrige cela sur le champ.

@Djul : troll va :D ! Mais je connais un système ou tu passe plus de temps à rebooter/attendre que travailler^^"

gravatar
Guenhwyvar a dit :

zut, en effet, il faut bien entendu remplacer le "1" par "$1".
… voire même par $i. D'ailleurs t'as corrigé le premier exemple en mettant $i, et le second en mettant $1 ^^

Sinon, dans le même genre d'optimisations, j'avais vu je sais plus où qu'il valait mieux utiliser :

$iMax=count($array);
for ($i = 0; $i < $iMax; $i) {

}

… plutôt que :

for ($i = 0; $i < count($array); $i
) {

}

… mais j'avoue ne pas avoir comparé comme j'ai tendance à utiliser la première façon de toute manière.

gravatar
Just1602 a dit :

Un gentooïste !!!
Mettez vous à genoux !

Bonsoir Maître Justin.


WTF !!? O_ô

Je suis le plus grnad noog que le monde de l'informatique est connu, mais sinon, merci du compliment !! :)

Sinon il est vrai que c'est long à configurer, mais comme je suis aussi noob sous GNU/Linux qu'en programmation configurer un système étant une des rares chose que je suis capable de faire qui fonctionne je prend mon temps et ça me dérange pas. ^^

gravatar
Le Hollandais Volant a dit :

@Guenhwyvar : Tu l'as peut-être vu dans mon tuto justement : la solution optimisé est près de 500 fois plus rapide pour un tableau de 1000 cases.

(normale : le comptage ne se fait qu'une seule fois, au lieu de 1000.

Les chiffres sont donnés par des tests (des benchmarks) mais la simple analyse du code permet d'expliquer que la solution 1 est largement préférable⋅

gravatar
Guenhwyvar a dit :

Ah, ben, euh, c'est possible, c'était peut-être ici, oui :x
*boulet*

gravatar
Guenhwyvar a dit :

Tiens, une autre question, toujours à propos d'optimisations (maintenant que j'ai retrouvé le bon article, histoire de pas être hors-sujet), pour convertir du Wiki/BB/TrucCode en (x)HTML, il vaut mieux faire plusieurs fonctions de regex à la suite, ou une seule grosse avec deux énormes arrays ?
(Bon, évidemment, à moins d'une différence vraiment importante, ça m'empêchera pas d'utiliser la première méthode que je trouve largement plus claire et lisible, mais bon…)

gravatar
Le Hollandais Volant a dit :

Moi je fais deux enormes arrays, et une boucle deriére, ce qui revient à les refaure les unes à la suite des autres.

Je sais qu'on peut faire une conversion d'array en array, mais ça semble ne pas marcher dans mon cas^^.

Les commentaires sont fermés pour cet article