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

VC++ .net 2003 est-il si bon que ça ?

Chris_le_ouf
Chris_le_ouf
Niveau 5
28 avril 2004 à 14:50:18

Voilà ce que j´ai trouvé dans une portion critique ( niveau temps d´execution) d´un programme compilé en release avec les global optimization :

004167C9 mov eax,dword ptr [esp+34h]
004167CD mov dword ptr [esp+34h],eax
004167D1 mov esi,dword ptr [esp+34h]

il a quand même une conception bien à lui de l´optimisation ce compilo, je trouve...

dnob700
dnob700
Niveau 10
28 avril 2004 à 15:12:01

pour des pauvre inculte de l´asm, tu pourrait expliquer dans quel sens marche les mov STP ?

Mais si j´ai bien compris il s´amuse a déplacer 36 fois une variable quand une seul suffirait ?

T´es sur qu´ailleurs dans le code, il se sère pas des autre référence ?

J´aivais entendu dire, qu´il optimisait pas mal VC++.NET

Chris_le_ouf
Chris_le_ouf
Niveau 5
28 avril 2004 à 15:24:14

ben c´est pas compliqué, t´as dword ptr [esp+34] qui est une variable sur la pile ( un int** en l´occurence) et il prend cette variable, il la met dans le registre eax, juste apres, il remet la valeur de eax dans [esp+34] ? ? et puis il finit par stocker cette variable dans esi. On dirait qu´il veut modifier le pointeur entre les 2 premiers mov, il récupère le pointeur dans eax, mais il en fait rien, il le range aussitôt. surement une mauvaise ia qui fait n´importe quoi

gollumkawder
gollumkawder
Niveau 10
29 avril 2004 à 09:57:16

il sabote l´otpimisation lui meme c´est pratique...
franchement affecter le pointeur à une valeur et faire l´inverse après c´est assez bizarre, meme si la suite du code peut se servir de cette opération ça sert a rien de reaffecter la valeur puisque
1/ on l´as dans eax
2/et le pointeur
il suffirait de reprendre la valeur de l´un ou de l´autre... comme quoi je préfere mon bon vieux 6.0

lag-it
lag-it
Niveau 10
29 avril 2004 à 10:09:23

Tu possèdes quelle version Chris ?

i_am_the_law
i_am_the_law
Niveau 6
29 avril 2004 à 12:00:33

Quelles options de compilation tu as mises pour optimiser? ( /Os, / Ox ) ?

Y´a quoi apres comme code? P-e qu´il va utiliser eax pour faire qqc.
C´etait quoi ton code correspondant?
De plus, qu´est ce qui te dis qu´il ne fais pas ca pour permettre une meilleure parallelisation des instructions, ou pour que dword ptr [esp+34h] reste dans le cache du cpu + lgtps ? ( je sais pas si le nb de fois qu´une variable est utilisee joue ds l´algo du cache ou si ´est un simle LRU, mais ca reste envisageable). On peut imaginer plein de raisons pour laquelle ils font ca. Ce n´est pas forcement une erreur. Je m´y connais pas assez en asm haut niveau pour dire pourquoi mais y´a certainement une raison derriere.

Il faut montrer plus de choses que ces 3 lignes la pour juger.
Et puis pour juger il faut egalement faire des mesures avec et sans ces 3 lignes si tu les penses inutiles. Comme ca tu verras si la version sans ces lignes est plus rapide ou non.

La version . net a un tres bon optimisateur. Sans rien toucher au code si vs avez les 2 versions faites des mesures :) La version 6 a un compilateur pourri.

Et comme l´as dit lag-it quelle version tu as?
Si tu as la version etudiante y´a pas d´optimisateur donne avec.

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 12:32:49

Quand je dis qu´il y a les global optimizations, c´est qu´il y a les global optimizations, maintenant si tu me crois pas c´est même pas la peine de lire mes posts ( c´est la version pro). Sinon je suis désolé tu n´en verras pas plus c´est un projet commercial. Pour ta théorie du cache ça tient pas. Il suffit d´accéder une fois à une variable pour fetcher toute une ligne de cache, la on a 3 acces dépendants les uns des autres ce qui casse justement tout parallèlisme à cet endroit ( pas d´out-of-order execution possible pendant ces 3 instructions) d´autre part je vois mal comment tester sans ces trois lignes, je n´ai aucun contrôle sur le code asm que le compilateur va décider de générer, je peux pas lui dire : " ne met pas ces 3 lignes, pour que je mesure sans"

i_am_the_law
i_am_the_law
Niveau 6
29 avril 2004 à 13:14:05

Si tu ne peux pas montrer plus de code, libre a toi. Ds ce cas ne vient pas poster ici. C´est impossible de juger sur 3 lignes de code et de déterminer l´influence ou non dans la suite du programme.

Pour tester sans, remplace le code c++ par l´asm que tu penses etre meilleur c´est pas plus complique que ca.

Pour le cache je t´ai dit c´est une hypothese, j´y connais pas assez pour te donner la raison mais il y en a surement une.
" Il suffit d´accéder une fois à une variable pour fetcher toute une ligne de cache"
Alors reponds a ma question : c´est un algo LRU simple ou ils utilisent d´autres estimateurs pour vider le cache?
Le parallelisme c´etait pcq il y a 3 endroits ou trouver ta valeur :
eax
esi
[esp+34h]
Je n´ai pas la suite du code mais il est possible qu´il fasse plusieurs operations en parallele de calcul grace a ca.

Mais comme tu ne veux rien montrer de + ce n´est pas possible de savoir.

Global optimisation ca ne fait pas tout...
Tu sais qu´il y en a d´autres? ( /0t / 0x . .) ?
Y´a pas que Og dans la vie :)
Le plus que tu puisses faire c´est mettre / 0x mais ca ne s´appelle pas global optimisation. Ca s´appelle full optimisation.
Enfin p-e que tu t´es trompe et que c´est un abus de langage, mais il faut quand meme que tu precises ce que tu fais.

Bref, je maintiens ce que j´ai dit, sans informations supplementaires, il inutile de discuter plus longuement la dessus. Libre a toi d´avoir ton avis sur ce compilo, mais je ne te laisserai pas dire qu´il optimise mal.

Si tu prends le temps de verifier avec une vue globale du code que ce qu´il fait n´est pas optimise et que les 2 instructions sont en trop, utilise l´asm inline, c´est fait pour ca. Maintenant, il est rare d´arriver a faire mieux que le compilateur.

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 13:24:49

" utilise l´asm inline, c´est fait pour ca"
je t´ai pas attendu
" Maintenant, il est rare d´arriver a faire mieux que le compilateur"
cool je fais des trucs rares tous les jours.
/ Ox ne favorise pas la vitesse d´execution, c´est / O2 maximize speed, mais ça tu le savais sans doute deja... donc / O2 / Ot / Og pour les points sur les i.
Pour le cache tu prends la doc intel et tu lis, ils expliquent tout.

i_am_the_law
i_am_the_law
Niveau 6
29 avril 2004 à 13:33:40

> " utilise l´asm inline, c´est fait pour ca"

je t´ai pas attendu

Alors pouquoi tu dis que tu n´as aucun controle sur le code genere et que tu ne peux pas faire de mesures?
J´attends les mesures et avec un profiler digne de ce nom si possible :)

" Pour le cache tu prends la doc intel et tu lis, ils expliquent tout."
Tu as surement du la lire, dans ce cas peux tu affirmer que c´est simplement un algo LRU qui est utilise?
J´ai pas envie de lire la doc pcq c´est pas un domaine qui m´interesse, je veux juste une confirmation de ta part vu que tu les as surement lues :)

Pour les parametres c´est ok, mais fallait preciser.

>" Maintenant, il est rare d´arriver a faire mieux que le compilateur"

cool je fais des trucs rares tous les jours.

J´attends les mesures :)

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 17:41:01

mais qu´est-ce que t´hallucines ? je peux pas amputer le programme de trois lignes d´assembleur qui sont générées par le compilo, je vois pas le rapport avec de l´inline. Ensuite je ne vois pas ce que ça va changer que ça soit un LRU ou pas, pas besoin d´y toucher trois fois à la variable si c´est un LRU, une fois aurait suffit.

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 17:43:11

LRU c´est least recently used, pas least recently used three times in a row

MrGoTo
MrGoTo
Niveau 8
29 avril 2004 à 17:57:52

Moi je pense que oui car même si les lignes ne servaient à rien ( ce que defend i_am_the_law) on peut pas dire qu´un compilo est mauvais a cause de ça. La question est: vas-tu changer à cause de ça? Là le code est généré, il peut forcement y avoir des trucs saugrenus. Auquel cas je t´invite à contacter microsoft en leur signalant ce bug via mail. Tu verras ils sont cools.

gollumkawder
gollumkawder
Niveau 10
29 avril 2004 à 18:00:40

:d) Tu verras ils sont cool

ah bon ? surement parceque tu dois payer un truc....
oui ça peut arriver une betise mais d´après kelios ( et il sait de quoi il parle le bougre) c´est la pire erreur qu´on peut faire, et je ne sais pas si voir le projet peux changer grand chose, il a fait la betise et c´est tout ça sert a rien

i_am_the_law
i_am_the_law
Niveau 6
29 avril 2004 à 18:16:25

" je peux pas amputer le programme de trois lignes d´assembleur qui sont générées par le compilo, "

Ben si tu peux. Tu rempalces le code c++ qui donne ces 3 lignes par de l´asm inline. C´est pourtant pas complique..
Apres tu mesures et on en reparle.

" LRU c´est least recently used, pas least recently used three times in a row"
Tu confirmes donc que le cache est seulement gere par du lru et pas autre chose? Je ne connais pas comment c´est gere mais si j´ai dit ca, c´est pcq ca aurait pu prendre en compte le nb de fois ou la variable est utilisee pour une meilleure estimation j´en sais rien. Mais si tu as lu la doc... ( tu confirmes?)

Il peut y avoir des tas et des tas de raisons pour lesquelles il a fait ca mais pour les trouver il faudrait plus de code et l´equivalent en c++.
Comme tu veux pas le montrer, faudra faire avec..
Mais si tu ne vois pas de raisons, ce n´est pas forcement pcq il n´en existe pas une. C´est possible que ca ait ete fait pour rien, mais ca me surprendrait bcp. Un compilo serait pas con a ce point pour faire a=b et b=a a la suite.
Dc je persiste et signe, il doit surement y avoir une cause derriere, mais sans plus de code on peut pas savoir. ( pk avoir poste ca d´ailleurs si on ne peut pas verifier nous meme si y´a pas une raison derriere).
Si j´ai parle de la gestion du cache c´est pcq ca aurait pu etre une raison. Un des seul truc qu´on peut dire sans le reste du code.

Kouic
Kouic
Niveau 9
29 avril 2004 à 18:23:47

< ModeTroll>

Voila ce qui arrive lorsque l´on utilise un compilateur de ´Managed C++´.
Pourquoi ne pas repasser en C++ ( le standardisé), GCC complie tres bien :)

< /ModeTroll>

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 19:30:00

Merci pour la bouffée d´air frais kouic lol

OxFFFF
OxFFFF
Niveau 8
29 avril 2004 à 19:35:29

Superman Chris : je crois il me semble que i_am_the_law essaye de t´aider et de comprendre les raisons qui font que tu obtienne un code pareil.
Alors pas la peine de la jouer " cool je fais des trucs rares tous les jours" à le prendre pour un con.
Essaye donc plutôt d´écouter un peu ce qu´il te dis...

Chris_le_ouf
Chris_le_ouf
Niveau 5
29 avril 2004 à 20:26:25

damned en vla un autre. Laissez tomber les gars, vc++ . net EST le meilleur compilateur, puisque vous le dites. Quand tout le monde dit qu´un compilateur est bon, alors il est bon, et c´est tres mal d´aller regarder les entrailles d´un programme, et si on trouve des trucs pas net, c´est qu´on se trompe, puisque vc++ est bon. Je me suis trompé, j´ai mis / Ouls ( generate useless code)
mea culpa, fin de la discussion

Altonfrere
Altonfrere
Niveau 10
29 avril 2004 à 20:34:49

" vc++ . net EST le meilleur compilateur"

Personne n´a dit cela et de toute facon c´est connu que le compilo de crosoft n´a jamais été une lumière pour ce qui est de l´optimisation . ..

Mais quand tu dis que ton projet est un truc commercial je trouve cela plutôt amusant de voir à quel point tu veux protéger 1 ou 2 lignes de code :) j´imagine que tu en as écrit quelques dizaines de millier donc 1 ligne de code en C++ n´a rien de comparable à de l´espionnage industriel :) tu peux même renommer les variables :)

PS : en plus tu nous a devoilé que tu utilisais un int ** ! !! oula je vais faire pareil et copier ton projet ! lol

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