Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
717 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6
Auteur Sujet :

Fantastique les compilateurs d'aujourd'hui

n°842929
jesus_chri​st
votre nouveau dieu
Posté le 05-09-2004 à 22:20:39  profilanswer
 

Reprise du message précédent :
le code dans des boucles c'est comme les données : c'est mieux quand c'est aligné. Et sur les proc récents, le top c'est aligné sur 16 octets. Un pentium se contente de 4 octets mais 16 ça satisfait tt le monde.
Quand à la présevation ça se fait entre l'appel et le retour. Là je parle de pop et push dans le corps d'une fonction. En pushant esi, edi, ebp et ebx au début on peut bosser sur 7 registres tranquilement. Faut juste les poper avant le ret. En assembleur MASM c'est automatisable (directive USES). Les compilo ont tendance à faire des pop et des push plusieurs fois sur le même registre.
La baisse de perfs est masquée par le goulot d'étranglement mémoire. Perso qd je bench je le fait sur un vieux proc où le bus mémoire sature le bus procésseur : un pmmx avec de la PC100 en 2-2-2. Là on voit la diff entre c compilé et assembleur manuel !

mood
Publicité
Posté le 05-09-2004 à 22:20:39  profilanswer
 

n°842930
chrisbk
-
Posté le 05-09-2004 à 22:22:25  profilanswer
 

j'ai jamais vu des push/pop surnuméraire, parfois meme ils ne sont pas placé en tete de fonction mais que vraiment la ou c'est nécéssaire (ca a un nom cette optimisation...code hoisting, vala)

n°842932
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 22:26:06  profilanswer
 

Moi ce qui me prend le choux dans les compilo en ligne c'est ça :
Les Jxx remplacé par des Jnxx/Jmp car la distance est trop importante. Je préfèrai pouvoir paramétrer ce genre de chose : auto ou manuel.
Up> Je parle pour VC6


Message édité par christophe_d13 le 05-09-2004 à 22:26:29
n°842933
simogeo
j'ai jamais tué de chats, ...
Posté le 05-09-2004 à 22:26:54  profilanswer
 

chrisbk a écrit :

j'ai jamais vu des push/pop surnuméraire, parfois meme ils ne sont pas placé en tete de fonction mais que vraiment la ou c'est nécéssaire (ca a un nom cette optimisation...code hoisting, vala)


 
ehhh oohh doucement .. c'est jesus_christ quand même  [:petrus75]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°842935
chrisbk
-
Posté le 05-09-2004 à 22:27:48  profilanswer
 

christophe_d13 a écrit :

Moi ce qui me prend le choux dans les compilo en ligne c'est ça :
Les Jxx remplacé par des Jnxx/Jmp car la distance est trop importante. Je préfèrai pouvoir paramétrer ce genre de chose : auto ou manuel.
Up> Je parle pour VC6


 
huh ? tu peux donner un exemple ?

n°842947
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 22:42:36  profilanswer
 

chrisbk> Petit exemple

Code :
  1. ...
  2. $loop:
  3. ...
  4. dec ecx
  5. jnz $loop
  6. ...


Très simple me direz-vous ?
Mais non ! Car la ligne $loop est trop loin du jnz (qui ne peut se déplacer que de +127 et -128 octets !)
Donc le compilateur se charge lui-même de faire une modification (et sans notre accord):

Code :
  1. ...
  2. $loop:
  3. ...
  4. dec ecx
  5. jz $endloop
  6. jmp $loop
  7. $endloop:
  8. ...


Oui ça marche, mais c'est plus long en consommation de cycles.


Message édité par christophe_d13 le 05-09-2004 à 22:43:13
n°842948
chrisbk
-
Posté le 05-09-2004 à 22:44:13  profilanswer
 

christophe_d13 a écrit :


Mais non ! Car la ligne $loop est trop loin du jnz (qui ne peut se déplacer que de +127 et -128 octets !)


 
non y'a des deplacement relatifs codé sur 4 octets

n°842949
chrisbk
-
Posté le 05-09-2004 à 22:45:30  profilanswer
 

extrait :


 
0F  82 cw/cd   JC rel16/32       7+m,3    Jump near if carry (CF=1)
0F  84 cw/cd   JE rel16/32       7+m,3    Jump near if equal (ZF=1)
0F  84 cw/cd   JZ rel16/32       7+m,3    Jump near if 0 (ZF=1)
0F  8F cw/cd   JG rel16/32       7+m,3    Jump near if greater (ZF=0 and
0F  8D cw/cd   JGE rel16/32      7+m,3    Jump near if greater or equal
                                          (SF=OF)
0F  8C cw/cd   JL rel16/32       7+m,3    Jump near if less (SF<>OF)
0F  8E cw/cd   JLE rel16/32      7+m,3    Jump near if less or equal (ZF=1
                                          and SF<>OF)
0F  86 cw/cd   JNA rel16/32      7+m,3    Jump near if not above (CF=1 or
                                          ZF=1)
0F  82 cw/cd   JNAE rel16/32     7+m,3    Jump near if not above or equal
                                          (CF=1)
0F  83 cw/cd   JNB rel16/32      7+m,3    Jump near if not below (CF=0)
0F  87 cw/cd   JNBE rel16/32     7+m,3    Jump near if not below or equal
                                          (CF=0 and ZF=0)


 
 
et donc :
 

0F  85 cw/cd   JNZ rel16/32      7+m,3    Jump near if not zero (ZF=0)


 
bref y doit etre un brin vieux et poussiereux le compilo qui sort un truc pareil (ou etre dans un mode de compatibilité pour un vieux cpu)


Message édité par chrisbk le 05-09-2004 à 22:49:23
n°842954
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 22:52:01  profilanswer
 

Exact, et c'est bien vrai !
Merci les gars, je n'avais plus revu le codage de jxx depuis que j'ai débuté l'asm sur mon feu 8086.
Et le déplacement peut donc être sur 8bits en mode relatif ou 32 en mode direct.

n°842955
chrisbk
-
Posté le 05-09-2004 à 22:52:39  profilanswer
 

chris_d13 > mis a part cette petite erreur [:joce] tu m'as l'air bien callé en asm. Tu sais si il y a moyen d'effectuer un branchement sur une comparaison effectué par la FPU sans passer par le FNSTSW ax / test ax, truc des familles?


Message édité par chrisbk le 05-09-2004 à 22:55:57
mood
Publicité
Posté le 05-09-2004 à 22:52:39  profilanswer
 

n°842956
chrisbk
-
Posté le 05-09-2004 à 22:53:10  profilanswer
 

christophe_d13 a écrit :

Exact, et c'est bien vrai !
Merci les gars, je n'avais plus revu le codage de jxx depuis que j'ai débuté l'asm sur mon feu 8086.
Et le déplacement peut donc être sur 8bits en mode relatif ou 32 en mode direct.


 
non, lis bien, 16/32 en relatif aussi (REL 16/32)

n°842958
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 22:54:33  profilanswer
 

En fait j'avais tellement programmé sur 8086, 8088 et surtout 286... J'avais même remplacé un 386 par un 286 car ce dernier pouvait tourner plus vite. Donc les saut jxx était toujours en mode relatif 8bits.

n°842959
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 22:56:21  profilanswer
 

chisbk> Je viens de revoir mes docs (intel, amd et cyrix) aux pages jcc :
Le déplacement est soit relatif 8bits uniquement,
Soit relatif : 16 bits en mode Réel et V86 ou 32 bits en mode Protégé.


Message édité par christophe_d13 le 05-09-2004 à 23:11:21
n°842960
chrisbk
-
Posté le 05-09-2004 à 22:58:21  profilanswer
 

christophe_d13 a écrit :

chisbk> Je viens de revoir mes docs (intel, amd et cyrix) aux pages jcc :
Le déplacement est soit relatif 8bits uniquement,
Soit absolu : 16 bits en mode Réel et V86 ou 32 bits en mode Protégé.


 
je proteste violemment, ma page pour les opcodes (j'ai que la version sur mon DD, je te recherches l'adresse) m'indique bien un deplacement relatif de 32bits, et la pratique aussi (mon compilo emet des jcc avec deplacement relatif de 32bits (et aucun de 8 bits parce que je suis une niasse))

n°842963
chrisbk
-
Posté le 05-09-2004 à 23:01:09  profilanswer
 

Vla : http://www7.informatik.uni-erlange [...] ml/Jcc.htm
 
edit : ah ben tiens j'avais jamais lu la suite :
 
If the given condition is true, a jump is made to the location provided as the operand. Instruction coding is most efficient when the target for the conditional jump is in the current code segment and within -128 to +127 bytes of the next instruction's first byte. The jump can also target -32768 thru +32767 (segment size attribute 16) or -2^(31) thru +2^(31) -1 (segment size attribute 32) relative to the next instruction's first byte. When the target for the conditional jump is in a different segment, use the opposite case of the jump instruction (i.e., JE and JNE), and then access the target with an unconditional far jump to the other segment. For example, you cannot code--
 
JZ FARLABEL;
 
You must instead code--
 
   JNZ BEYOND;
   JMP FARLABEL;
BEYOND:
 
ptet ca ton histoire ?


Message édité par chrisbk le 05-09-2004 à 23:03:18
n°842967
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:10:03  profilanswer
 

Tu as tout compris. D'après mes docs, ce genre de problème ne se posait donc que pour les cpu ne pouvant lire les jcc avec saut relatif supérieur à 8 bits.
PS: J'ai fait une erreur également, les saut en 16 ou 32 bits sont également en relatif mais en mode natif 16bits ou 32bits suivant le mode du processeur.
Up> Je corrige mes posts.


Message édité par christophe_d13 le 05-09-2004 à 23:10:38
n°842971
chrisbk
-
Posté le 05-09-2004 à 23:19:07  profilanswer
 

chrisbk a écrit :

chris_d13 > mis a part cette petite erreur [:joce] tu m'as l'air bien callé en asm. Tu sais si il y a moyen d'effectuer un branchement sur une comparaison effectué par la FPU sans passer par le FNSTSW ax / test ax, truc des familles?


 
jme reponds tout seul : FCOMI (depuis le P6)
par contre ca pue fo que les deux operandes soient sur la stack

n°842973
bjone
Insert booze to continue
Posté le 05-09-2004 à 23:21:44  profilanswer
 

exact, je l'avais même oublié.

n°842976
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:25:51  profilanswer
 

chrisbk> Et oui la fpu, avec sa super-pile que peux de programmeurs savent réellement exploiter.
Personnellement, je me régale à travailler avec la FPU. C'est un pur bonheur pour l'optimisation !
Les SIMD à côté, c'est trop simple. Et puis je développe (au boulot) des appli pour les écoles, et tous n'ont pas forcément des machines avec SSE, 3DNow ou même MMX...

n°842979
chrisbk
-
Posté le 05-09-2004 à 23:28:19  profilanswer
 

christophe_d13 a écrit :

chrisbk> Et oui la fpu, avec sa super-pile que peux de programmeurs savent réellement exploiter.
Personnellement, je me régale à travailler avec la FPU. C'est un pur bonheur pour l'optimisation !


 
tu veux que jte dise ce que j'en pense de cette $ù^$^é de pile ? :o
 
 

christophe_d13 a écrit :


Les SIMD à côté, c'est trop simple. Et puis je développe (au boulot) des appli pour les écoles, et tous n'ont pas forcément des machines avec SSE, 3DNow ou même MMX...


 
Stun ot probleme ca. Moi vu que je dev pour ma tronche, c'est MMX/3dnow (un jour j'upgraderais mon cpu, un jour...)
 

n°842980
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:33:50  profilanswer
 

chrisbk> Et oui, on se demande toujours pourquoi et comment intel a réussi à avoir une idée aussi stupide ce jour là...
S'il n'y avait que ça...
 
A mon goût, le pire fut l'adresse 20bits sous forme de segment : offset.
Pour le MMX, c'est pas bcp mieux (même si c'est pratique)... Le 3DNow! à vraiment apporté qq chose ! Comme le SSE d'ailleurs.


Message édité par christophe_d13 le 05-09-2004 à 23:35:56
n°842981
chrisbk
-
Posté le 05-09-2004 à 23:35:08  profilanswer
 

oué j'aimerais comprendre pkoi ils ont choisi une pile alors que le reste c'est du reg stdart
(c'est quand meme la bonne misere les cpu intels)
(et encore, je me plains, je suis arrivé au pentium, directement en mode protegé)


Message édité par chrisbk le 05-09-2004 à 23:35:33
n°842984
bjone
Insert booze to continue
Posté le 05-09-2004 à 23:37:02  profilanswer
 

bah les 80x86, mais l'itanium est assez sympa.

n°842986
chrisbk
-
Posté le 05-09-2004 à 23:38:01  profilanswer
 

sais pas, pas regardé, et vu que j'en verrais ptet jamais un en vrai, ben vala quoi [:joce]

n°842988
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:41:08  profilanswer
 

T'as bien de la chance, sur 286, fallait se taper la routine pour faire un retour au mode réel sachant que intel avait soit-disant oublier de cabler l'instuction. Mon oeuil ! La fonction était buggée.
Pour ma part, j'ai vraiment apprécier l'optimisation lors du passage 486=>Pentium.
 
Pour les pseudo-registres de la FPU, il a eu des tas de rumeurs...
Mais la version officielle semble la plus crédible (pour moi) : économie !
En effet, faire une multiplication ou un sinus demandait au 8087 énormément de temps ! Alors bidouiller les registres ne posait pas trop de problème de ralentissement. Juste des problème de développement. Mais la FPU était un tel gain !
Je me rappelle même de cyrix qui faisait des FPU équivalente 4 ou 10 fois plus rapide que celle d'intel (eh oui!) alors qu'avec le 6x86, c'était une vraie daube.

n°842989
bjone
Insert booze to continue
Posté le 05-09-2004 à 23:41:25  profilanswer
 

très franchement: regarde.
c'est très très très interressant. c'est le contre-pied de l'archi 80x86.
 
c'est démoralisant de voir Intel pousser le réformé P4, et de laisser crever l'Itanium (dont une certaine forme d'échec est probable si il n'est pas introduit sur le marché grand public).

n°842991
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:43:29  profilanswer
 

J'ai développé sur des plusieurs CPU et DSP et franchement le pire, c'est bien l'archi x86.

n°842992
chrisbk
-
Posté le 05-09-2004 à 23:46:13  profilanswer
 

bjone a écrit :


c'est démoralisant de voir Intel pousser le réformé P4, et de laisser crever l'Itanium (dont une certaine forme d'échec est probable si il n'est pas introduit sur le marché grand public).


 
et on va encore se la trimballer encore pendant des millénaires cette archi de merde, cf les nouveaux athlon 64...
 

n°842993
bjone
Insert booze to continue
Posté le 05-09-2004 à 23:49:03  profilanswer
 

et oui  :cry:

n°842994
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:54:15  profilanswer
 

De toute façon les cpu seront tellement puissant que plus personne (sauf l'élite) ne programmera en ASM.
Et puis les prochains CPU ne se programmerons plus en ASM mais dans des langages de plus haut niveau. On parle déjà de CPU java.
Il existe également les composants reprogrammables permettant de créer des CPU de toute pièce ! Les CPU reprogrammable, c'est l'avenir ! C'est pas demain, c'est aujourd'hui !
OpenHardware Power !

n°842995
chrisbk
-
Posté le 05-09-2004 à 23:56:11  profilanswer
 

(cpu java ca fait des lustres que j'en entends parler quand meme)

n°842996
christophe​_d13
L'efficacité à tout prix.
Posté le 05-09-2004 à 23:56:19  profilanswer
 

Il y avait eu un article sur présence-pc...
http://www.presence-pc.com/article-112-1.html

n°842998
bjone
Insert booze to continue
Posté le 05-09-2004 à 23:58:34  profilanswer
 

c'est vrai mais le rapport performances/prix risque d'être toujours avantageux vers des CPU à jeu d'instruction plustôt fixe.

n°843000
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 00:04:14  profilanswer
 

ce n'est pas tout à fait juste.
L'histoire nous a montré que l'on préfère un élément souple à un fixe : Le calculateur contre le processeur.
Le premier ne pouvait éffectuer que des tâches fixes.

n°843058
prorel
Posté le 06-09-2004 à 03:27:08  profilanswer
 

pour le fpu (gestion par pile), deja l'une des raisons, ca doit peut-etre du au fait qu'au debut le coproc etait separé (8087), d'ailleurs les proc arithmetiques marchaient tous comme ca, avec des piles, meme le petit 74181
et pi je pense que surtout quand on regarde une operation arithmetique avec des parentheses partout, les piles c'est super pratique


Message édité par prorel le 06-09-2004 à 03:30:05
n°843079
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 09:14:09  profilanswer
 

prorel> tu la programmes souvent la FPU ?

Citation :

coproc etait separé


D'où l'instruction wait.

n°843083
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-09-2004 à 09:21:59  profilanswer
 

prorel a écrit :


et pi je pense que surtout quand on regarde une operation arithmetique avec des parentheses partout, les piles c'est super pratique


vi vi, bien sur ! amuse toi à réaliser une itération de Mandelbrot avec la FPU du premier coup, sans te chier dessus avec les différents empilements [:joce]

n°843190
chrisbk
-
Posté le 06-09-2004 à 11:50:55  profilanswer
 

prorel a écrit :

et pi je pense que surtout quand on regarde une operation arithmetique avec des parentheses partout, les piles c'est super pratique


 
non c'est de la merdasse :o
je le crierais sous tous les toits jusqu'a ma mort :o

n°843215
bjone
Insert booze to continue
Posté le 06-09-2004 à 12:08:06  profilanswer
 

christophe_d13 a écrit :

ce n'est pas tout à fait juste.
L'histoire nous a montré que l'on préfère un élément souple à un fixe : Le calculateur contre le processeur.
Le premier ne pouvait éffectuer que des tâches fixes.


 
ché pas ceci dit, un CPU hautement programmable peut être une passerelle pour sortir du jeu d'instruction du 80x86.

n°843226
christophe​_d13
L'efficacité à tout prix.
Posté le 06-09-2004 à 12:16:01  profilanswer
 

bjone> Non pas programmable, mais plutôt re-programmable

n°843231
bjone
Insert booze to continue
Posté le 06-09-2004 à 12:17:51  profilanswer
 

yep :jap: (mais j'ai précisé hautement)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6

Aller à :
Ajouter une réponse
 

Sujets relatifs
Compilateurs, librairies, projets... comment organiser ses dossiers?Compilateurs...
Livres sur la conception des compilateurs / cours / ouvrage en ligneles Compilateurs, Editeurs, IDE pour le Java [listing inside]
Comment recuperer la date d'aujourd'hui et la foutre en CString ?Commencez en c++ Réferences ? compilateurs ?
[MA VIE] tin aujourd'hui j'ai pris une leçon d'humilité !!!phpBB 2 final sort aujourd'hui
Compilateurs inside[C++] Anomalies compilateurs
Plus de sujets relatifs à : Fantastique les compilateurs d'aujourd'hui


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR