comment faire plusieurs additions a la fois ? - ASM - Programmation
Marsh Posté le 02-04-2003 à 13:44:07
si, y'a plusieurs pipeline dans un CPU, par contre il faut bien evidemment qu'il n'y ait aucune dependance entre tes instructions
Marsh Posté le 02-04-2003 à 13:46:37
tu peux aussi utiliser le MMX, qui te permet de faire jusqu'à 8 opérations simultanées
Marsh Posté le 02-04-2003 à 13:50:48
chrisbk a écrit : si, y'a plusieurs pipeline dans un CPU, par contre il faut bien evidemment qu'il n'y ait aucune dependance entre tes instructions |
tu peux expliquer
Marsh Posté le 02-04-2003 à 13:51:48
Harkonnen a écrit : tu peux aussi utiliser le MMX, qui te permet de faire jusqu'à 8 opérations simultanées |
tu peux expliquer aussi
Marsh Posté le 02-04-2003 à 13:57:52
vic le viking a écrit : tu peux expliquer |
add eax,ebx
add ecx,edx;
ces deux instructions vont etre execute simultanement (sur un pentium ou mieux). Ce sont des instructions simples, et n'ayant aucune dependance entre elle
ex :
add eax,ebx
add eax,edx;
tu noteras une dependance de flux entre les deux instructions, forcant l'execution sequentielle
le MMX te permet te faire +eurs instruction d'un seul, pour peu que tes donnees soit organisees de manieres correcte
mettons :
int tab[2];
int tab2[2];
tu veux faire :
tab[0] = tab[0] + tab2[0];
tab[1] = tab[0] + tab2[1];
en MMX :
movq mm0, tab; //deplace 64bits dans le registre MMX mm0
pmuld mm0, tab2; //effectue le bout de code decrit plus haut
movq tab, mm0; //rebalance le tout en ram
les reg MMX font 64bits. Ces regs peuvent etre vu comme :
2 regs de 32bits
4 regs de 16bits
8 regs de 8bits
(mais pas comme un gros de 64bits)
une instruction MMX pourra donc s'appliquer a plusieurs donnes a la fois
(je suis pas clair mais bon, bref)
Marsh Posté le 02-04-2003 à 14:04:49
2
vic le viking a écrit : |
le MMX utilise des registres 64 bits qui peuvent être divisés en octets, word, dword ou quadword. tu peux faire des opérations simultanées sur les 8 octets, sur les 4 word ou sur les 2 dword. chaque donnée sera traitée séparément
edit: grilled, mais je te file quand même un code d'exemple :
|
mm0 contiendra donc les octets suivants :
25,45,65,85,105,125,145,165
en 3 lignes, tu as fait un transfert de données et réalisé 8 additions !
Marsh Posté le 02-04-2003 à 14:33:24
chrisbk a écrit : |
t'es sur que tu voulais pas mettre paddd ?
Marsh Posté le 02-04-2003 à 14:36:34
Harkonnen a écrit : |
si
par contre (si je puis me permettre et pour faire de l'enculationnage de drosophyle)
Code :
|
C moi qui ait eu le dernier mot
Marsh Posté le 02-04-2003 à 14:38:22
chrisbk a écrit :
|
emms = 50 cycles
femms = 5 cycles
y'a pas photo ! pour un tel gain, tout le monde devrait avoir un Athlon
edit: et j'ai détaillé pour qu'il puisse comprendre, meme si tu as raison : on peut faire l'économie d'un mov
Marsh Posté le 02-04-2003 à 14:38:49
heuh oui, il aurait ete utile de preciser que les registres MMX sont en fait un remappage de la pile de la FPU. Donc impossible d'utiliser MMX et FPU en meme temps
Marsh Posté le 02-04-2003 à 14:41:06
Harkonnen a écrit : |
(je fais du code portable, moi monsieur )
ah tiens, t'as finalement reussi a trouver le nb de cycle pour AMD ?
Marsh Posté le 02-04-2003 à 14:41:07
chrisbk a écrit : heuh oui, il aurait ete utile de preciser que les registres MMX sont en fait un remappage de la pile de la FPU. Donc impossible d'utiliser MMX et FPU en meme temps |
oups... oui, effectivement
Marsh Posté le 02-04-2003 à 14:43:39
chrisbk a écrit : ah tiens, t'as finalement reussi a trouver le nb de cycle pour AMD ? |
j'ai trouvé une doc, assez ancienne et très incomplète, qui indique le nombre de cycles des principales instructions 3DNow. mais c'est pas vraiment ce que je cherchais
chrisbk a écrit : |
ah mais moi aussi ! mon code est portable sur tous les Athlons, XP ou non
Marsh Posté le 02-04-2003 à 14:46:06
Harkonnen a écrit : |
Vu que j'a un athlon (non XP) ca passera pour cette fois
Par contre je veux pas entendre parler de SSE
Marsh Posté le 02-04-2003 à 14:58:33
chrisbk a écrit : |
je t'avouerais que j'ai jamais essayé de jouer avec le SSE ! je sais meme pas à quoi ressemblent ses instructions, ni ou trouver la doc dessus !
Marsh Posté le 02-04-2003 à 15:08:21
Va surement falloir aller sur le site d'intel Tiens, voila ton casque, corde, lampe de poche, si t'es pas revenu dans deux jours j'apelle les secours ok ?
(pourtant des reg 128bits, ca devrait t'interesser non ? perso tout ce que je sais sur le SSE c que les regs s'apellent XMM, c bien tout )
Marsh Posté le 02-04-2003 à 15:11:44
chrisbk a écrit : Va surement falloir aller sur le site d'intel Tiens, voila ton casque, corde, lampe de poche, si t'es pas revenu dans deux jours j'apelle les secours ok ? |
chrisbk a écrit : |
tu m'étonnes
je vois d'ici les possibilités pour faire un bump ! je pourrais traiter 16 pixels à la fois ! un pur bonheur
chrisbk a écrit : |
pareil
XMM, c'est tout ce que je sais ! je file chez Intel tiens
Marsh Posté le 02-04-2003 à 15:18:35
aie, petite deception a l'horizon, je crois que le SSE c'est du float only
Marsh Posté le 02-04-2003 à 15:25:03
g un peu de bout de code SSE issu du moteur sur lequel je bosse si tu veux
Marsh Posté le 02-04-2003 à 15:26:02
vas y, poste ! moi je me paume chez Intel
Marsh Posté le 02-04-2003 à 15:27:43
Harkonnen a écrit : vas y, poste ! moi je me paume chez Intel |
content de te l'entendre dire
Code :
|
m'en demande pas trop, le code est pas de moi
Marsh Posté le 02-04-2003 à 15:31:48
ça a l'air sympa
le principe est le meme que le MMX ? ie les registres sont divisés en b,w,dw ?
la saturation est gérée aussi ?
Marsh Posté le 02-04-2003 à 15:33:53
Harkonnen a écrit : ça a l'air sympa |
A mon avis, vu que c du float, t'as 4*32 et c'est tout. Donc tes pb de saturation, hein ?
me semble que certaines instructions fonctionne que si correctement alignee (je t'ai skippe le debut du fichier, mais newMatrix est une structure prenant garde a son alignement)
le reste, franchement, aucune idee
Marsh Posté le 02-04-2003 à 15:36:40
Citation : MOVNTPS stores data from a SIMD floating-point register to memory. The memory address must be aligned to a 16-byte boundary; if it is not aligned, a general protection exception will occur. |
attention ca rigole pas
Marsh Posté le 02-04-2003 à 16:04:37
waw il a l'air génial ce site, hop dans mes favoris pour plus tard
merci
Marsh Posté le 02-04-2003 à 16:32:53
c sympa ce site
tiens, je teste Quexal, ça a pas l'air mal
Marsh Posté le 02-04-2003 à 16:35:40
Harkonnen a écrit : c sympa ce site |
J'essayerais ce soir, si Dieu veuille bien que mon acces au net fonctionne enfin
Marsh Posté le 02-04-2003 à 16:38:04
comme on a pollué le topic de vic
d'un autre coté, s'il apprend l'asm, ça lui fera pas de mal de lire tout ça
Marsh Posté le 02-04-2003 à 16:39:38
Harkonnen a écrit : comme on a pollué le topic de vic |
meuh non, au debut il parlait de MIMD et la on cause SIMD, finalement on est pas si loin que ca
Marsh Posté le 02-04-2003 à 16:46:42
ça n'a pas été inutile, j'ai appris 2-3 trucs et j'apprendrai sûrement plus une fois que j'aurai exploré les possibilités de MMX et consorts
Marsh Posté le 03-04-2003 à 13:48:40
mais pourquoi chaque fois que chrisbk et harkonnen me répondent, je comprends rien du tout a ce qu'ils racontent ?
vous pouvez pas essayer de vous mettre à mon niveau les gars ? parce que j'ai rien compris du tout à vos explications
Marsh Posté le 03-04-2003 à 13:54:01
laisse tomber la fin du topic (MMX & cie) et dis moi ce que tu n'as pas compris a mon post
Marsh Posté le 03-04-2003 à 13:54:13
vic le viking a écrit : mais pourquoi chaque fois que chrisbk et harkonnen me répondent, je comprends rien du tout a ce qu'ils racontent ? |
commence pas à polluer le topic toi hein
Marsh Posté le 03-04-2003 à 13:56:08
ReplyMarsh Posté le 03-04-2003 à 13:56:22
ben en fait, c'est quoi un pipeline ? et le mmx m'interesse aussi, mais j'arrive pas a compiler le code qu'harkonnen a donné
Marsh Posté le 03-04-2003 à 13:59:26
vic le viking a écrit : ben en fait, c'est quoi un pipeline ? et le mmx m'interesse aussi, mais j'arrive pas a compiler le code qu'harkonnen a donné |
bah pipeline = partie du CPU qui effectue les calculs (pour aller vite)
donc si t'as deux pipelines tu peux effectuer deux instructions en meme temps (on appelle ca une architecture superscalaire), a condition que les deux instructions soit parrallelisables.
Mes infos date du PI (entre tmps je sais pas trop ou ca en est), le P1 disposait pour les entier de deux pipelines (U/V)
U pouvait effectuer n'importe quelle operation tandis que V etait limité aux instructions simple(pas de mul/div par ex)
Marsh Posté le 03-04-2003 à 13:59:59
t'utilises quel assembleur ? masm32 ? tasm ? nasm ?
Marsh Posté le 03-04-2003 à 14:02:42
chrisbk merci
harkonnen j'utilise masm32
Marsh Posté le 02-04-2003 à 13:42:49
me revoila
toujours en train d'apprendre l'assembleur, j'ai lu que les processeurs permettaient de faire plusieurs additions en même temps. mais comment faire ? si on met les instructions les unes après les autres, elles seront exécutées séquentiellement, et pas en même temps
---------------
Bougredane et bougre d'andouille ne font qu'un !