CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Optimisation

Chris_le_ouf
Chris_le_ouf
Niveau 5
19 mai 2004 à 11:44:33

" Regarde le code source asm de sortie"

euh c´est ce que je me suis empressé de faire, et j´ai rien vu qui ressemblait à ce morceau de code.
plutot une suite de sub, jz.
Dans le genre difficile a suivre ton morceau de code il est pas mal, et j´adore les 4 premieres lignes :D

" Et oui c´est magique l´informatique c´est justement l´intéret d´un switch ! "

je parlais d´instruction assembleur, par d´instruction C....

Altonfrere
Altonfrere
Niveau 10
19 mai 2004 à 12:04:05

Et moi je te parle des BASES de la programmation . .. c´est l´un des 1er exo que tu fais lorsque tu apprends l´assembleur, traduire toutes les structures de controles ( y compris le switch).

gollumkawder
gollumkawder
Niveau 10
19 mai 2004 à 12:36:37

combat de titans, gollum est content ^^

--log

dnob700
dnob700
Niveau 10
19 mai 2004 à 12:42:55

je ne sais pas lequel a raison, mais je préférerais que ce soit altonfrère, ca serait mieux pour la programmation.

mais ca veut dire que le switch ce comporterai comme les tableau de fonction de kufa c´est ca ?

Altonfrere
Altonfrere
Niveau 10
19 mai 2004 à 12:47:13

En quelque sorte, à part qu´il ne s´agit pas d´un veritable appel de fonction ( avec tout ce que cela implique, passage de paramètres, sauvegarde la pile etc...) mais un simple saut ( ca reviendrait à faire un goto en C...)
Et ceci grace à des offsets mémorisés dans une table dont la taille et le contenu dépendent de l´intervalle des valeurs possibles du switch.

kufa
kufa
Niveau 9
19 mai 2004 à 17:23:25

Et pour completer, seules des valeurs dans les cases tres differentes et tres nombreuses pourraient augmenter les nombres de comparaisons.

Dans le genre difficile a suivre ton morceau de code il est pas mal, et j´adore les 4 premieres lignes :D

C´etait un cut& rapide d une sortie asm, le but etait pas de comprendre le code, mais de voir que mon switch ne se comportait pas comme une structure en if.

zedix
zedix
Niveau 5
20 mai 2004 à 21:39:46

Bon, je remonte ce topic pour repondre à Kelios et à dnob700.

" par ce que si t´optimise mal ton logiciel, le compilo pourra faire tout ce qu´il veut, le logiciel sera mal optimisé. Car le logiciel ne comprend pas ce que tu veux faire, donc si tu fait quelque chose d´inutiliement compliqué, il ne peut pas savoir que tu voulais faire un truc beaucoup plus simple."

Euh, là c´est pas de l´optimisation... C´est que tu utilises un algo non adapté. Et ce n´est pas au compilo de choisir l´algo.

" Surtout si c´est toi qui a conçu le code: y´a que toi qui sait vraiment ce que tu as derrière la tête, parfaitement. Le compilo doit jongler avec les possibilités d´optimisation possibles avec le language, mais il y a des limites à ses possibilités."

Bah, encore un fois, on ne parle pas d´optimisation du CODE, mais de l´ALGO. Parce qu´au niveau CODE, je maintient que le compilo est bien meilleur. Ce qui me fait bien rire, ce sont les gens qui remplacent les multiplications par 2, ou par des multiples de 2, sur des entiers par des decalages de bits... Voila typiquement le genre d´optimisation qui ne sert strictement à RIEN. Surtout que si tu commences à decomposer tes multiplications pour avoir des multiples de 2. Tu peux même reussir à desoptimiser ton code, en voulant l´optimiser parce que le compilo aurait fait quelque chose de mieux, mais tu as tellement decomposé qu´il n peut plus rien faire.

Maintenant, si tu veux t´amuser à bugguer ton code, le rendre illisible pour gagner 3 cycles d´horloge...

dnob700
dnob700
Niveau 10
20 mai 2004 à 21:52:57

on est d´accord zedix.

pour moi, choisir un algo adapté c´est aussi faire de l´optimisation. sauf qu´on otpimise pas l´assembleur. mais optimiser, c´est tout ce qui permet d´améliorer les performance du logiciel. Que ce soit au niveau de l´exécutable ou bien avant, au niveau de l´algo.

Kelios
Kelios
Niveau 8
20 mai 2004 à 22:28:34

Nous allons mettre les chosea au clair, zedix:
de un, de la définition même de l´algorithmie pour moi.
Je ne parle pas ici de la définition du dictionnaire, mais du sens que j´emploie dans ces textes et dans celui-ci en particulier.
À mon avis, l´algorithmie touche à peu près tout de l´optimisation, y compris au code. Dece fait, je vais établir dès maintenant une claire différence:
-L´algorithmie du CODE ( remarque je tiens à jouer COMME TOI à spécifier CERTAINS MOTS en les mettant EN MAJUSCULE, me donnant l´air d´un type un peu écervelé tentant d´expliquer quelque chose à un ignare bébête). J´inclus dans cette catégorie tout optimisation qui touche à l´informatique logicielle et matérielle en tant que telle. Que ce soit de l´implémentation d´un algorithme mathématique, ou du choix de certains opcodes plus

Kelios
Kelios
Niveau 8
20 mai 2004 à 22:29:22

hmmm, faut faire attention à ne pas accrocher ce tab...

Je continue.

Kelios
Kelios
Niveau 8
20 mai 2004 à 23:01:20

Que ce soit de l´implémentation d´un algorithme mathématique, ou du choix de certains opcodes plus que d´autres.
-L´algorithmie THÉORIQUE. J´inclus dans cette catégorie tout algorithme sur papier, dont l´implémentation est sujette à variation. Cela peut-être par exemple la simplification d´un algorithme mathématique, ou d´autres techniques pour faire varier le fonctionnement à l´interne ( le choix de certaines technologies plutôt que d´autres et leur intégration).
Cette dernière catégorie est sujet à naître de son créateur et hors de portée du compilateur. Je n´en ferai pas mon sujet principal, et me concentrerai plutôt sur le premier type.
En ce qui concerne l´algorithmie du CODE, dont je me défend bien d´y affubler le terme de Logiciel ou Pratique, est ce qui peut-être touché au niveau du code, et donc, la cible pour tout optimiseur de tout acabit, y compris ceux inclus dans tout compilateur digne de ce nom.

Cet algorithmie est très fortement en lien avec l´assembleur qui est mon principal sujet d´intéret, car il est au centre des résultats. Mon but ici n´est en effet pas d´analyser la base, mais plutôt de voir le travail du compilateur en matière d´optimisation du code.

Premièrement, ces résultats peuvent varier sensiblement avec le choix de certains composants. J´entend par là que le choix de certains opcodes par rapport à d,autres font varier le résultat.

Mais dès lors, jusqu´à quel point un simple opcode peut-t-il changer les choses?
Pas grand chose, généralement. c,est plutôt l´utilisation judicieuse d´une bonne COMBINAISON d´opcodes. Ce que j´entend par là, c,est qu´au niveau optimisation, l´intéret est de considérer l´optimisation sur un plus grand ensemble possible. Et que, optimiser une zone petite peut admettre des meilleures performances par exemple dans cette petite zone, mais baisser les performances plus globables d´un ensemble dont elle fait parti, parce que ces autres opcodes, pour garantir la meilleure optimisation possible, se base sur les autres opcodes. Donc c´est de l´entre-aide entres opcodes qui garantit un bon rendement.

Note que plus l,ensemble est grand, plus on serait tenté de penser que le gain se joue plutôt avec le high level, car ils permettent une plus grande zone de visuel sur le code. Ce n,est pas nécessairement vrai. Les vrais rouages peuvent ainsi se jouer de manière subtile ( mais tangible au niveau des résultats) dans l´implémentation d´opcodes d´un language plus haut niveau comme le C++ par exemple.

J´en reviens à notre sujet actuel de différent:
le compilateur fait mieux le boulot que nous, s,amuser à jouer avec le rendu asm est inutile, ou alors, franchement ridicule.

J´en reste à ma position précédente: c´est faux.
Les compilateurs ont un gros problème en matière d´optimisation:
Leur champ de vision est maigre. Qu´entend-je par là? J´en entend qu´ils ne se concentre que sur des bouts petits de code, les uns par les uns, au lieu de se concentrer sur l´assemblage général de ces bouts.
De plus, ils leur viennent un autre défaut majeur:
ils évalent toutes les possibilités. Ils évalent tous les choix possibles sur ce léger groupe d´opcodes, et ils ne peuvent pas faire grand chose d´autre. Pourquoi? Parce que l´informatique est faite de cette fâçon! L´informatique est basé sur le principe de faire tout stupidement, mais très rapidement. Un processeur est un esclave stupide hyper-performant!
La solution est évidente: l´IA. La soltuion est l´intelligence, qui permet de ne considérer que les choix qui ressortent comme étant optimisables.
C´est d´ailleurs ce qui me pousse à croire, entres autres, que nous sommes plus efficaces: nous ne faisons pas que d´exécuter de simples assemblables de commandes prédéterminées ( remplacer la multiplication *2 par un shift systématiquement), mais nous somme capables d´extrapoler des cas, d´assembler des cas pour en produire un shéma d´optimisation comparable au cas actuel dont nous tentons l´amélioration.
Donc, revenons à l´IA. J´introduit ce sujet car il me parrait évident qu´il s´agit de la soltuion. En fait, ça existe déjà au niveau des compilos: mais elle est très basique, et faite pour AIDER la technique de l´esclave stupide et performant, que plutôt la remplacer.
Le problème avec cet esclave, c´est qu´il perd du temps. Et il en perd exponentiellement de plsu en plus si la taille de sections à analyser est grand. On doit donc trouver une limite entre l´optimisation, sa vitesse et la taille de sections à analyser, pour trouver le meilleur ratio qualité d´optimisation/temps pris pour l´obtenir.
C´est en fait un des grand obstacles contre ce choix des plus évidents qui est de considérer un ensemble plus gros à optimiser.

Nous souffrons bien moins de ces problèmes. Notre intelligence nous permet un avantage conséquent face au compilateur.

Pendant que j´y pense, niveau respect, ça faiblit un peu de ton côté. Je pense entres autres à ton dédain pour les personnes qui ne respectent pas ton point de vue sur le sujet de l´optimisation manuelle:
" Ce qui me fait bien rire, ce sont les gens [...]"
" Maintenant, si tu veux t´amuser à bugguer ton code, le rendre illisible pour gagner 3 cycles d´horloge..."

Je respecte tes opinions, mais si je ne les partages pas. Fais en donc de même, et le débat ne s´en portera que mieux.

Kelios
---------

Altonfrere
Altonfrere
Niveau 10
20 mai 2004 à 23:22:51

et bin ! dire que c´est parti d´une simple question sur un switch :)

le premier qui demande pour le while . . il sort ! :)

kufa
kufa
Niveau 9
20 mai 2004 à 23:32:33

desole, j ai pas eut le courage de tout lire ( longue journee au taf, enfin c pas fini), mais je me permet de donner un point de vue:

" le compilateur fait mieux le boulot que nous, s,amuser à jouer avec le rendu asm est inutile, ou alors, franchement ridicule"

Personnellement je pense qu il est bon, dans certains cas, de savoir ce qui va etre en sortie, et d´examiner le code asm. Pourquoi? Pour faire du code qui pourra etre optimise par le compilo. Et savoir ce genre de chose permet de structurer tres differement son code.
Ensuite, si tu code par ex un poly renderer, optimiser pour le cache est une tache difficile, et peu de compilo te le ferons; heureusement il y a des outils pour t aider, mais faudra mettre la main dans le cambouis, regarder l asm. Donc non ce n´est pas inutile, meme si dans une majorite des cas avoir un bon algo peu suffir.
Et puis je tiens a te rappeler que tous les processeurs ne sont pas super rapide, et que entre un if et un switch, ca peux bcp jouer, par ex sur les tels portables.

/ kUfa

Kelios
Kelios
Niveau 8
20 mai 2004 à 23:36:39

kufa, dommage que tu n´aie pas eu le courage de tout lire ^^

Je suis justement contre cette position.

" J´en reviens à notre sujet actuel de différent:
le compilateur fait mieux le boulot que nous, s,amuser à jouer avec le rendu asm est inutile, ou alors, franchement ridicule.

J´en reste à ma position précédente: c´est faux.
Les compilateurs ont un gros problème en matière d´optimisation: "

Je le fesais par opposition à la position tenue par zedix.

" le premier qui demande pour le while . . il sort ! "
Je ne te le fait pas dire :rire:

Kelios
---------

zedix
zedix
Niveau 5
20 mai 2004 à 23:58:54

Kelios:

Je suis globalement d´accord avec toi. Il faut savoir optimiser ce que le compilateur ne sait pas faire. Mais je trouve qu´il est inutile de faire des petites optimisation que d´une le compilateur fera, et de deux, le fera mieux.

Maintenant, il est certain qu´a partir d´un certain niveau d´abstraction, le compilateur n´est plus bon à rien, et seul l´humain peut optimiser. Et pour moi, on tombe ici quasiment dans l´algo.

kufa
kufa
Niveau 9
21 mai 2004 à 01:47:20

Oui, donc en resume: nous sommes tous plus ou moins d accord, il faut faire un bon algo si c du high level, si on est par contre dans une routine ou l optim est super importante, il serait bon de savoir ce qu il y a en dessous pour aider le compilo.

Donc pour le while? ha non desole :P

Kelios
Kelios
Niveau 8
21 mai 2004 à 02:56:12

Oui t´as l´air d´avoir résumé la situation. On a à peur près tous le même avis.

Kelios
---------

Evanescence
Evanescence
Niveau 5
21 mai 2004 à 23:52:09

@Kelios: certains compilos utiliseraient des heuristiques ?

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment