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

  FORUM HardWare.fr
  Programmation
  ASM

  comment faire plusieurs additions a la fois ?

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

comment faire plusieurs additions a la fois ?

n°350092
Vic le vik​ing
Posté le 02-04-2003 à 13:42:49  profilanswer
 

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 :heink:


---------------
Bougredane et bougre d'andouille ne font qu'un !
mood
Publicité
Posté le 02-04-2003 à 13:42:49  profilanswer
 

n°350094
chrisbk
-
Posté le 02-04-2003 à 13:44:07  profilanswer
 

si, y'a plusieurs pipeline dans un CPU, par contre il faut bien evidemment qu'il n'y ait aucune dependance entre tes instructions

n°350097
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 13:46:37  profilanswer
 

tu peux aussi utiliser le MMX, qui te permet de faire jusqu'à 8 opérations simultanées


---------------
J'ai un string dans l'array (Paris Hilton)
n°350099
Vic le vik​ing
Posté le 02-04-2003 à 13:50:48  profilanswer
 

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 :??:


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°350100
Vic le vik​ing
Posté le 02-04-2003 à 13:51:48  profilanswer
 

Harkonnen a écrit :

tu peux aussi utiliser le MMX, qui te permet de faire jusqu'à 8 opérations simultanées


tu peux expliquer aussi :??:


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°350103
chrisbk
-
Posté le 02-04-2003 à 13:57:52  profilanswer
 

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)
 

n°350110
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:04:49  profilanswer
 

2

vic le viking a écrit :


tu peux expliquer aussi :??:


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 :
 


tab1    db 10,20,30,40,50,60,70,80,90
tab2    db 15,25,35,45,55,65,75,85,95
 
mov    eax,offset tab1
mov    ebx,offset tab2
 
movq   mm0,[eax]  ; on transfère les octets de tab1 dans mm0
movq   mm1,[ebx]  ; idem pour tab1 dans mm1
paddb  mm0,mm1    ; on additionne les octets entre eux
femms             ; on quitte le mmx (pour libérer la FPU)


 
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 !


Message édité par Harkonnen le 02-04-2003 à 14:11:19

---------------
J'ai un string dans l'array (Paris Hilton)
n°350133
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:33:24  profilanswer
 

chrisbk a écrit :


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


t'es sur que tu voulais pas mettre paddd ? ;)


Message édité par Harkonnen le 02-04-2003 à 14:36:50

---------------
J'ai un string dans l'array (Paris Hilton)
n°350136
chrisbk
-
Posté le 02-04-2003 à 14:36:34  profilanswer
 

Harkonnen a écrit :


t'es sur que tu voulais pas mettre paddb ? ;)


 
si :D
 
par contre (si je puis me permettre et pour faire de l'enculationnage de drosophyle)
 

Code :
  1. movq   mm0,[eax]  ; on transfère les octets de tab1 dans mm0
  2. paddb  mm0,[ebx]  ; on s'economise un mov, un registre, et dixit les docs AMD les athlons sont tres fort a ce petit jeu la (load execute que ca s'apelle, meme, pour faire mon mec super intelligent)
  3. femms             ; on quitte le mmx (pour libérer la FPU). Ceci est une instruction 3dnow only, donc ca passera pas sur intel :O Utiliser emms pour plus de compatibilite


 
 
C moi qui ait eu le dernier mot [:neffy] :D


Message édité par chrisbk le 02-04-2003 à 14:37:43
n°350140
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:38:22  profilanswer
 

chrisbk a écrit :


 
si :D
 
par contre (si je puis me permettre et pour faire de l'enculationnage de drosophyle)
 

Code :
  1. movq   mm0,[eax]  ; on transfère les octets de tab1 dans mm0
  2. paddb  mm0,[ebx]  ; on s'economise un mov, un registre, et dixit les docs AMD les athlons sont tres fort a ce petit jeu la
  3. femms             ; on quitte le mmx (pour libérer la FPU). Ceci est une instruction 3dnow only, donc ca passera pas sur intel :O Utiliser emms pour plus de compatibilite


 
 
C moi qui ait eu le dernier mot [:neffy] :D


[:tapai]
emms = 50 cycles
femms = 5 cycles
 
y'a pas photo ! pour un tel gain, tout le monde devrait avoir un Athlon :d
 
edit: et j'ai détaillé pour qu'il puisse comprendre, meme si tu as raison : on peut faire l'économie d'un mov ;)


Message édité par Harkonnen le 02-04-2003 à 14:40:07

---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 02-04-2003 à 14:38:22  profilanswer
 

n°350141
chrisbk
-
Posté le 02-04-2003 à 14:38:49  profilanswer
 

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  

n°350148
chrisbk
-
Posté le 02-04-2003 à 14:41:06  profilanswer
 

Harkonnen a écrit :


[:tapai]
emms = 50 cycles
femms = 5 cycles
 
y'a pas photo ! pour un tel gain, tout le monde devrait avoir un Athlon :d
 
edit: et j'ai détaillé pour qu'il puisse comprendre, meme si tu as raison : on peut faire l'économie d'un mov ;)


(je fais du code portable, moi monsieur :O :D)
 
ah tiens, t'as finalement reussi a trouver le nb de cycle pour AMD ?

n°350149
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:41:07  profilanswer
 

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  :whistle:


---------------
J'ai un string dans l'array (Paris Hilton)
n°350154
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:43:39  profilanswer
 

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 :


(je fais du code portable, moi monsieur :O :D)  


ah mais moi aussi ! mon code est portable sur tous les Athlons, XP ou non :d


---------------
J'ai un string dans l'array (Paris Hilton)
n°350157
chrisbk
-
Posté le 02-04-2003 à 14:46:06  profilanswer
 

Harkonnen a écrit :


ah mais moi aussi ! mon code est portable sur tous les Athlons, XP ou non :d


 
 
Vu que j'a un athlon (non XP) ca passera pour cette fois :D
Par contre je veux pas entendre parler de SSE :O

n°350192
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 14:58:33  profilanswer
 

chrisbk a écrit :


 
 
Vu que j'a un athlon (non XP) ca passera pour cette fois :D
Par contre je veux pas entendre parler de SSE :O


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 !


---------------
J'ai un string dans l'array (Paris Hilton)
n°350217
chrisbk
-
Posté le 02-04-2003 à 15:08:21  profilanswer
 

Va surement falloir aller sur le site d'intel [:meganne] 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 :D )

n°350227
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 15:11:44  profilanswer
 

chrisbk a écrit :

Va surement falloir aller sur le site d'intel [:meganne] Tiens, voila ton casque, corde, lampe de poche, si t'es pas revenu dans deux jours j'apelle les secours ok ?


[:totoz]
 

chrisbk a écrit :


(pourtant des reg 128bits, ca devrait t'interesser non ?  


tu m'étonnes :love:
je vois d'ici les possibilités pour faire un bump ! je pourrais traiter 16 pixels à la fois ! un pur bonheur :love:
 

chrisbk a écrit :


perso tout ce que je sais sur le SSE c que les regs s'apellent XMM, c bien tout :D )


pareil [:sinclaire]
XMM, c'est tout ce que je sais ! je file chez Intel tiens
 
[:neowen]


---------------
J'ai un string dans l'array (Paris Hilton)
n°350235
chrisbk
-
Posté le 02-04-2003 à 15:18:35  profilanswer
 

aie, petite deception a l'horizon, je crois que le SSE c'est du float only [:spamafore]

n°350243
chrisbk
-
Posté le 02-04-2003 à 15:25:03  profilanswer
 

g un peu de bout de code SSE issu du moteur sur lequel je bosse si tu veux [:ddr555]

n°350245
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 15:26:02  profilanswer
 

vas y, poste ! moi je me paume chez Intel :fou:


---------------
J'ai un string dans l'array (Paris Hilton)
n°350251
chrisbk
-
Posté le 02-04-2003 à 15:27:43  profilanswer
 

Harkonnen a écrit :

vas y, poste ! moi je me paume chez Intel :fou:


 
content de te l'entendre dire :D :D
 
 
 

Code :
  1. ZGSVector4d* zgTransfVector4dSSE(ZGSVector4d*resVect , ZGSVector4d*inVect, ZGSMatrix4x4*mat , int count)
  2. {
  3.     //static float matriceNew[4*4];
  4.    
  5.     matriceNew[0].value[0] = mat->value[0];
  6.     matriceNew[0].value[0+4] = mat->value[0 + 4];
  7.     matriceNew[0].value[0+8] = mat->value[0 + 8];
  8.     matriceNew[0].value[0+12] = mat->value[0+12];
  9.     matriceNew[0].value[1] = mat->value[1 + 4];
  10.     matriceNew[0].value[1+4] = mat->value[1 + 8];
  11.     matriceNew[0].value[1+8] = mat->value[1 + 0];
  12.     matriceNew[0].value[1+12] = mat->value[1+12];
  13.     matriceNew[0].value[2] = mat->value[2 + 8];
  14.     matriceNew[0].value[2+4] = mat->value[2 + 0];
  15.     matriceNew[0].value[2+8] = mat->value[2 + 4];
  16.     matriceNew[0].value[2+12] = mat->value[2 + 12];
  17.     ZGSMatrix4x4* lpMat = *matriceNew;
  18.     int iPtr = (int)*matriceNew;
  19.     __asm
  20.     {
  21.         mov edi , inVect
  22.         mov esi , resVect
  23.         mov edx , iPtr
  24.         mov ecx , count
  25.         //mov ebx , -16
  26.         xor ebx,ebx
  27.        
  28.         boucle:
  29.             movaps xmm1 , [edi+ebx]
  30.            
  31.             movups xmm2 , [edi+ebx]
  32.             shufps xmm2 , xmm2 , 1 + (2<<2) + (0<<4) + 0
  33.             mulps xmm1 , [edx]
  34.             movups xmm3 , [edi+ebx]
  35.             shufps xmm3 , xmm3 , 2 + (0<<2) + (1<<4) + (1<<6)
  36.            
  37.             mulps xmm2 , [edx+16]
  38.             addps xmm1 , xmm2
  39.             mulps xmm3 , [edx+16*2]
  40.             addps xmm3 , [edx+16*3]
  41.             addps xmm1 , xmm3
  42.             movntps [esi+ebx] , xmm1
  43.          
  44.             add ebx,16
  45.             dec ecx
  46.         jnz boucle
  47.        
  48.         sfence
  49.     }
  50.     return resVect;
  51. }


 
 
m'en demande pas trop, le code est pas de moi :O


Message édité par chrisbk le 02-04-2003 à 15:28:35
n°350259
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 15:31:48  profilanswer
 

ç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 ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°350265
chrisbk
-
Posté le 02-04-2003 à 15:33:53  profilanswer
 

Harkonnen a écrit :

ç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 ?


 
A mon avis, vu que c du float, t'as 4*32 et c'est tout. Donc tes pb de saturation, hein ? :D
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  
 

n°350266
chrisbk
-
Posté le 02-04-2003 à 15:34:29  profilanswer
 
n°350268
chrisbk
-
Posté le 02-04-2003 à 15:36:40  profilanswer
 

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 [:ddr555]

n°350276
drasche
Posté le 02-04-2003 à 16:04:37  profilanswer
 


waw il a l'air génial ce site, hop dans mes favoris pour plus tard :whistle:
 
merci :jap:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°350310
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 16:32:53  profilanswer
 

c sympa ce site :love:
tiens, je teste Quexal, ça a pas l'air mal :)


---------------
J'ai un string dans l'array (Paris Hilton)
n°350314
chrisbk
-
Posté le 02-04-2003 à 16:35:40  profilanswer
 

Harkonnen a écrit :

c sympa ce site :love:
tiens, je teste Quexal, ça a pas l'air mal :)


 
J'essayerais ce soir, si Dieu veuille bien que mon acces au net fonctionne enfin

n°350317
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-04-2003 à 16:38:04  profilanswer
 

comme on a pollué le topic de vic [:ddr555]
 
d'un autre coté, s'il apprend l'asm, ça lui fera pas de mal de lire tout ça


---------------
J'ai un string dans l'array (Paris Hilton)
n°350318
chrisbk
-
Posté le 02-04-2003 à 16:39:38  profilanswer
 

Harkonnen a écrit :

comme on a pollué le topic de vic [:ddr555]
 
d'un autre coté, s'il apprend l'asm, ça lui fera pas de mal de lire tout ça


 
meuh non, au debut il parlait de MIMD et la on cause SIMD, finalement on est pas si loin que ca :D

n°350326
drasche
Posté le 02-04-2003 à 16:46:42  profilanswer
 

ç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 ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°351455
Vic le vik​ing
Posté le 03-04-2003 à 13:48:40  profilanswer
 

mais pourquoi chaque fois que chrisbk et harkonnen me répondent, je comprends rien du tout a ce qu'ils racontent ? :cry: :cry: :cry:
 
vous pouvez pas essayer de vous mettre à mon niveau les gars ? parce que j'ai rien compris du tout à vos explications :sweat:


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°351475
chrisbk
-
Posté le 03-04-2003 à 13:54:01  profilanswer
 

laisse tomber la fin du topic (MMX & cie) et dis moi ce que tu n'as pas compris a mon post


Message édité par chrisbk le 03-04-2003 à 13:54:14
n°351477
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-04-2003 à 13:54:13  profilanswer
 

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 ? :cry: :cry: :cry:
 
vous pouvez pas essayer de vous mettre à mon niveau les gars ? parce que j'ai rien compris du tout à vos explications :sweat:
 


commence pas à polluer le topic toi hein :non:


---------------
J'ai un string dans l'array (Paris Hilton)
n°351479
chrisbk
-
Posté le 03-04-2003 à 13:56:08  profilanswer
 

Harkonnen a écrit :


commence pas à polluer le topic toi hein :non:


 
[:ddr555]

n°351480
Vic le vik​ing
Posté le 03-04-2003 à 13:56:22  profilanswer
 

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é


---------------
Bougredane et bougre d'andouille ne font qu'un !
n°351490
chrisbk
-
Posté le 03-04-2003 à 13:59:26  profilanswer
 

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)

n°351491
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-04-2003 à 13:59:59  profilanswer
 

t'utilises quel assembleur ? masm32 ? tasm ? nasm ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°351498
Vic le vik​ing
Posté le 03-04-2003 à 14:02:42  profilanswer
 

chrisbk merci :jap:
harkonnen j'utilise masm32


---------------
Bougredane et bougre d'andouille ne font qu'un !
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  comment faire plusieurs additions a la fois ?

 

Sujets relatifs
[ACCESS] Importer dans une base les données de plusieurs bases AccessLancer plusieurs threads en python
[DirectX] plusieurs textures par objethtaccess : accéder à un répertoire que à partir d'un ou plusieurs rep
[mySQL] Grouper plusieurs champs en un champs ?[PHP/MySQL] Sélectionner plusieurs valeurs d'un champs d'une table
Envoyer un message a plusieurs clientsplusieurs boutons submit d'un form qui ont différents targets...
Quel code pour faire un arbre avec plusieurs noeuds en C ???VBA / Excel: formulaire utilise plusieurs formule ?
Plus de sujets relatifs à : comment faire plusieurs additions a la fois ?


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