ChoixPC + LDLC = cadeau    /    Les sponsors : rôles et fonctionnements

[S'inscrire]  [Aide (FAQ)]  [Rechercher]
[Connexion]  [Posts récents]  [Messages privés]
[Votre profil]  [Vos préférences]  [Sujets déplacés]
[Liste des membres]  [Stats]  [Accueil Site]  [Générateur]
[Accueil Forum] - Datation serveur (UTC+1) : 14:19
Forum ChoixPC » » Archives : matériel PC - dépannage et technologie - » » question sur les GPU
Aller directement à la page : ( Page précédente 1 | 2 | 3 | 4 | 5 | 6 )  Bas de page
Rechercher dans ce topic :
Mot clé :       Auteur :
Auteur Sujet : question sur les GPU
buzzz
''Chevalier pourfendeur d'écrans bleus''


Inscrit: Jul 09, 2001
Messages: 5490
De: ux point zéro
Posté le: 17-03-2002 à 23:54  | N° d'ordre sur la page en cours : 1 / 13 | N° d'ordre sur le topic : 76 / 88
ca me fait plaisir toute cette motivation.
4 heures pour comprendre tout cela, c'est pas si mal au final Cela fait quand meme beaucoup d'info

Bon alors pour repondre a favern.
quand j'ecris [1000] cela designe la valeur contenue a PARTIR de la case memoire numero 1000. Neanmoins on ne connait pas la taille de l'information stockee, si c'est un entier 32 bits, il sera sur les cases 1000,1001,1002,1003 et en ecrivant [1000] pour ce nombre 32 bits, je designerai les 4 cases. Pour un nombre 16 bits, [1000] designera que les cases 1000 et 1001.

Comment le proc s'y retouve ?


Suivant l'architecture de la machine, plusieurs octects peuvent etre lus et transferes en meme temps. Cela depend surtout de la largeur du bus fourni par le carte mere, ie bus au sens nombre de fils pour transferer les bits . Sur les machines actuelles, PIII duron/athlon, la largeur de bus est de 32 bits, 4 octects. Donc par cycle 4 octects peuvent etre mis sur le bus a la fois. La machine pour faire cela demande quand meme 2 conditions :
- que les 4 octects soient consecutif en memoire
- que le premier commence a une adresse qui soit un multiple de 4

Alors comment le proc s'y retrouve, pour les registres intel c'est simple, c'est le nom du registre a charger qui donne la quantite a transferer.
Ainsi : MOV AX,[1000]
Ax est un regsitre 16 bits, on va donc se servir des deux octects au adresse 1000 et 1001 pour le remplir

MOV EAX,[1000]
EAX est un registre 32 bits, on va donc se servire des 4 octects places a l'adresse 1000,1001,1002,1003 pour le remplir

Pour une architecture 32 bits, faire MOV EAX ou un MOV AX prend dans tous les cas 1 cycle.
EAX est parfois renomme simplement AX pra abus de langage car les programmeurs n'utilisent plus AX, et toujours EAX par defaut, donc ils ont tendance a continuer a dire AX bien qu'il parle de EAX.

Pour les registres MMX, registres du GPU c'est un poil different, le principe reste le meme. Comme on recherche l'efficacite, quand il y a un chargement de registre a faire on charge le maximum. La question est donc de savoir qu'est ce qu'on charge. Pour un registre MMX 64 bits

La question est de savoir si on charge 1 entier de 64 bits, 2 de 32, 4 de 16 ou 8 de 8, l'instruction est la meme, MOVQ

Dans tous les cas on va charger en memoire 8 octects contigus. MOVQ MM0,[1000] :

Pour 8 valeurs de 8 bits chacune
1000 : valeur 1 = 00001110
1001 : valeur 2 = 00001100
1002 : valeur 3 = 00001000
1003 : valeur 4 = 00001000
1004 : valeur 5 = 00001010
1005 : valeur 6 = 00001011
1006 : valeur 7 = 00000011
1007 : valeur 8 = 00011111
Ainsi j'ecrirais MOVQ MM0,[1000]
et j'aurais
MM0 = 00001110 00001100 00001000 00001000 00001010 00001011 00000011 00011111

Si je veux charger 2 valeurs de 32 bits
adresse 1000 : 100000111000011100000000000000111
adresse 1004 :
101000101000011010101111010100111

en ecrivant MOVQ MM0,[1000]

et j'aurais
MM0 = 100000111000011100000000000000111
101000101000011010101111010100111

[q]Au final on transfere toujours les octects aux adresses 1000,1001,...,1007 au position 1,2,3,4,5,6,7,8 dans le registre MM0, que l'on lise 8 nombres de 8bits ou 2 de 32[/b]

Apres quand on effectue les calculs on differenciera les instructions suivant que ce que l'on veut faire

ADD8 MM0,? effectuera 8 additions 8 bits en paralleles (cas un de cet exemple)

ADD32 MM0,? effectuere 2 additions 32 bits en parallele.

bon ou en etes vous.
faites confiance a cette version, j'ai mis un certain effort a la rediger.






_________________
perdu dans la thèse ou dans l'espace intergalactique... (depend des jours)


[ Ce message a été édité par: buzzz le 2002-03-18 00:27 ]

[ Ce message a été édité par: buzzz le 2002-03-18 00:31 ]


                           --> Fct Warning : lire la FAQ svp.
Favern
''Prince des sockets''


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 19-03-2002 à 19:43  | N° d'ordre sur la page en cours : 2 / 13 | N° d'ordre sur le topic : 77 / 88
Bonjour buzzz,

Excues ma réponse tardive mais j'ai eu un peu de boulot là

Mais franchement buzzz, pourquoi tu est parties dans le MMX ? Déja que j'ai du mal à suivre le AX ?


Je vais reprendre mon exemple en m'aidant de ce que tu m'as dit dans le début du message.

Si je te suis bien voici ce que ca donnerais:

Il faut retenir que AX est un registre de 32 bit.
J'ai toujours 2 nombres:
X (0000000000001001) Adresse [1001]
X'(0000000000100100) Adresse [1002]

Donc j'envoie la commande:
"MOV16 AX,[1001]" ou "MOV32 AX,[1001]" (J'ai pas comprit la différence entre les 2 ?)
Donc là il vas voir que AX est un registre de 32bits et qu'a l'adresse 1001 il y a un nombre de 16bits. Donc il vas aller voir à coté pour essayer de remplir.
Donc là il vas me copier le contenue de l'adresse 1001 et le cotenue de l'adresse 1002 vers le registre AX.
Donc on vas obtenir X+X':
00000000000010010000000000100100

Et maintenant que ce mot est dans le registre je dois donc lui rajouter 1 octet.
Donc je lui fais faire une simple addition. Ce qui me donnera en final:
00000000000010010000000001010100

Et là je le renvoie vers une adresse pour étre stocké afin que je puisse faire la méme chose avec Y et Y' ?


Donc est ce que j'ai bon maintenant ?

Favern
_________________
o----[::::::::::::::>®L©
ChoixPC+ LDLC =Cadeau


                                 --> Fct Warning : lire la FAQ svp.
BuggyBoy
''Prince des sockets''


Inscrit: Jan 04, 2002
Messages: 18946
Posté le: 19-03-2002 à 20:24  | N° d'ordre sur la page en cours : 3 / 13 | N° d'ordre sur le topic : 78 / 88
Coucou,

juste une petite interruption, parce que je suis en train de lire ce topic avec un PAL8045 sur la tête et un thermomètre dans la bouche.

Est il nécessaire d'ajouter de la pâte thermique?


                              --> Fct Warning : lire la FAQ svp.
Favern
''Prince des sockets''


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 19-03-2002 à 20:38  | N° d'ordre sur la page en cours : 4 / 13 | N° d'ordre sur le topic : 79 / 88
Bonjour BuggyBoy,

Je te demanderais de bien vouloir ouvrir un nouveau topic pour poser ta question.

Merci d'avance

Favern
_________________
o----[::::::::::::::>®L©
ChoixPC+ LDLC =Cadeau


                                 --> Fct Warning : lire la FAQ svp.
BuggyBoy
''Prince des sockets''


Inscrit: Jan 04, 2002
Messages: 18946
Posté le: 19-03-2002 à 20:45  | N° d'ordre sur la page en cours : 5 / 13 | N° d'ordre sur le topic : 80 / 88
Désolé.

                              --> Fct Warning : lire la FAQ svp.
nicholas_fr2001
''Exorciseur de PC''


Inscrit: Aug 24, 2001
Messages: 3671
Posté le: 19-03-2002 à 21:22  | N° d'ordre sur la page en cours : 6 / 13 | N° d'ordre sur le topic : 81 / 88
Quote:

Le 2002-03-19 19:43, Favern a écrit:
Bonjour buzzz,

Il faut retenir que AX est un registre de 32 bit.
J'ai toujours 2 nombres:
X (0000000000001001) Adresse [1001]
X'(0000000000100100) Adresse [1002]

Donc j'envoie la commande:
"MOV16 AX,[1001]" ou "MOV32 AX,[1001]" (J'ai pas comprit la différence entre les 2 ?)
Donc là il vas voir que AX est un registre de 32bits et qu'a l'adresse 1001 il y a un nombre de 16bits. Donc il vas aller voir à coté pour essayer de remplir.
Donc là il vas me copier le contenue de l'adresse 1001 et le cotenue de l'adresse 1002 vers le registre AX.
Donc on vas obtenir X+X':
00000000000010010000000000100100

Et maintenant que ce mot est dans le registre je dois donc lui rajouter 1 octet.
Donc je lui fais faire une simple addition. Ce qui me donnera en final:
00000000000010010000000001010100

Et là je le renvoie vers une adresse pour étre stocké afin que je puisse faire la méme chose avec Y et Y' ?


Donc est ce que j'ai bon maintenant ?

Favern




Bonjour,

Je serai d'accord pour confirmer ce que tu nous dit là Favern car j'aurai fait la même chose. Mais attendons confirmation.

Buzz> est-ce que tu n'aurait pas des exos pour pouvoir mettre en oeuvre tout ça?

Pour pouvoir bien comprendre, il faut que j'applique sinon, je vais vite oublier.
Car meme si j'arrive un peu à comprendre, c quand même un peu brouillon car tout se mélange

Merci

a+

Nicolas


                           --> Fct Warning : lire la FAQ svp.
buzzz
''Chevalier pourfendeur d'écrans bleus''


Inscrit: Jul 09, 2001
Messages: 5490
De: ux point zéro
Posté le: 19-03-2002 à 21:34  | N° d'ordre sur la page en cours : 7 / 13 | N° d'ordre sur le topic : 82 / 88
La correction
Quote:

Il faut retenir que AX est un registre de 32 bit.


ok faisons comme cela

Quote:

J'ai toujours 2 nombres:
X (0000000000001001) Adresse [1001]
X'(0000000000100100) Adresse [1002]


ok mais faux, faut lire un peu ce que j'ecris, ces deux nombres sont de 16bits, donc ils prennent deux octects pour etre stockees. Si X est a l'adresse 1001, X' ne peut etre qu'a l'adresse 1003.

Quote:

Donc j'envoie la commande:
"MOV16 AX,[1001]" ou "MOV32 AX,[1001]" (J'ai pas comprit la différence entre les 2 ?)
Donc là il vas voir que AX est un registre de 32bits et qu'a l'adresse 1001 il y a un nombre de 16bits. Donc il vas aller voir à coté pour essayer de remplir.
Donc là il vas me copier le contenue de l'adresse 1001 et le cotenue de l'adresse 1002 vers le registre AX.



MOV16 AX = MOV32 AX, ils sont equivalents
sinon c'est ok en remplacant 1002 par 1003 (voir remarque ci-dessus).


Quote:

Donc on vas obtenir X+X':
00000000000010010000000000100100


+ au sens de la concatenation (ecriture juxtaposee)

Quote:

Et maintenant que ce mot est dans le registre je dois donc lui rajouter 1 octet.
Donc je lui fais faire une simple addition. Ce qui me donnera en final:
00000000000010010000000001010100



non perdu, on ne fait pas des additions entre les morceux d'un registre, du moins en // non. Cela est immaginagle mais neanmoins ce n'est pas implante comme cela.



Quote:

Et là je le renvoie vers une adresse pour étre stocké


yes

Quote:

afin que je puisse faire la méme chose avec Y et Y' ?



non
il te faut 2 registres minimums
On prend AX 32 bits et BX 32 bits

on met X a l'adresse 1001 Y a 1003
X' a 1005 et Y' a 1007
ensuite :

MOV AX,1001 ( AX = X | Y)
MOV BX,1005 ( BX = X' | Y')
ADD16 AX,BX
MOV ???,AX

exemple :
X = 0000000000000001 Y = 1000000000000011
X'= 0110000000111000 Y'= 0000011110000000

avec
MOV AX,1001 ( AX = X | Y)
MOV BX,1005 ( BX = X' | Y')
j'obtiens :

AX = 00000000000000011000000000000011
BX = 01100000001110000000011110000000

puis ADD16 AX,BX

AX = 01100000001110011000011110000011

soit X+X' | Y+Y'

a bientot


_________________
perdu dans la thèse ou dans l'espace intergalactique... (depend des jours)


[ Ce message a été édité par: buzzz le 2002-03-19 21:39 ]


                           --> Fct Warning : lire la FAQ svp.
nicholas_fr2001
''Exorciseur de PC''


Inscrit: Aug 24, 2001
Messages: 3671
Posté le: 19-03-2002 à 22:00  | N° d'ordre sur la page en cours : 8 / 13 | N° d'ordre sur le topic : 83 / 88
evidement avec la correction ça va tout seul.

                           --> Fct Warning : lire la FAQ svp.
Favern
''Prince des sockets''


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 20-03-2002 à 07:38  | N° d'ordre sur la page en cours : 9 / 13 | N° d'ordre sur le topic : 84 / 88
Bonjour Buzzz,

Quote:

ok mais faux, faut lire un peu ce que j'ecris, ces deux nombres sont de 16bits, donc ils prennent deux octects pour etre stockees. Si X est a l'adresse 1001, X' ne peut etre qu'a l'adresse 1003.


Non non, je t'assure que je lis tout. Mais je croyais que ce systéme de gestion de la mémoire été spécialisé dans le MMX ?

Donc on trouve uniquement des mémoires contenant 1 octet ?

Quote:

on met X a l'adresse 1001 Y a 1003
X' a 1005 et Y' a 1007
ensuite :
MOV AX,1001 ( AX = X | Y)
MOV BX,1005 ( BX = X' | Y')
ADD16 AX,BX
MOV ???,AX
exemple :
X = 0000000000000001 Y = 1000000000000011
X'= 0110000000111000 Y'= 0000011110000000
avec
MOV AX,1001 ( AX = X | Y)
MOV BX,1005 ( BX = X' | Y')
j'obtiens :
AX = 00000000000000011000000000000011
BX = 01100000001110000000011110000000
puis ADD16 AX,BX
AX = 01100000001110011000011110000011
soit X+X' | Y+Y'


OK Pour toute cette partie là, c'est trés clair. Merci


Mais il y a quelques temps tu avais dit cela:
Quote:

On prefera mettre en memoire X et X' l'un apres l'autre cad, a l'adresse adr1 pour X et adr1+2octects pour X', ainsi tu lis les deux d'un seul coup car 32 bits contigues ca passe direct dans le bus en un cycle.


Donc c'est quand que on rajoute un octet ?
De plus cet octet viendrais d'où ?

Favern

_________________
o----[:::::::::::::>®©

[ Ce message a été édité par: Favern le 2002-03-20 07:40 ]


                                 --> Fct Warning : lire la FAQ svp.
buzzz
''Chevalier pourfendeur d'écrans bleus''


Inscrit: Jul 09, 2001
Messages: 5490
De: ux point zéro
Posté le: 20-03-2002 à 09:00  | N° d'ordre sur la page en cours : 10 / 13 | N° d'ordre sur le topic : 85 / 88
Quote:

On prefera mettre en memoire X et X' l'un apres l'autre cad, a l'adresse adr1 pour X et adr1+2octects pour X', ainsi tu lis les deux d'un seul coup car 32 bits contigues ca passe direct dans le bus en un cycle.


Donc c'est quand que on rajoute un octet ?
De plus cet octet viendrais d'où ?



je ne vois pas la contradiction. Tous les systemes de memoire PC comptent en bloc d'un octect. Si X est a 1001 est fait 16 bits de large X' comme dans l'exemple ne peut se trouver qu'a 1003 (=adr1+2octets).


Quand est-ce qu'on rajoute un octet ??? je sais pas, c'est toi qui a sorti ca un jour, je ne sais pourquoi ni comment tu as pu pense cela ??? je ne vois pas ou j'ai dit un truc dans le genre, on a du se louper...

a+
_________________


                           --> Fct Warning : lire la FAQ svp.
Favern
''Prince des sockets''


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 21-03-2002 à 10:51  | N° d'ordre sur la page en cours : 11 / 13 | N° d'ordre sur le topic : 86 / 88
Bonjour Buzzz,
Quote:

Le 2002-03-20 09:00, buzzz a écrit:
Quand est-ce qu'on rajoute un octet ??? je sais pas, c'est toi qui a sorti ca un jour, je ne sais pourquoi ni comment tu as pu pense cela ??? je ne vois pas ou j'ai dit un truc dans le genre, on a du se louper...
a+


Et bien ici:
http://www.forumschoixpc.com/viewtopic.php?topic=10668&forum=11&post_flagged=83060&start=60

"On prefera mettre en memoire X et X' l'un apres l'autre cad, a l'adresse adr1 pour X et adr1+2octects pour X', ainsi tu lis les deux d'un seul coup car 32 bits contigues ca passe direct dans le bus en un cycle. "

Que représente ces 2 octets supplémentaire que l'on rajoute à X' ?

Favern

_________________
o----[:::::::::::::>®©

[ Ce message a été édité par: Favern le 2002-03-21 10:52 ]


                                 --> Fct Warning : lire la FAQ svp.
buzzz
''Chevalier pourfendeur d'écrans bleus''


Inscrit: Jul 09, 2001
Messages: 5490
De: ux point zéro
Posté le: 21-03-2002 à 20:01  | N° d'ordre sur la page en cours : 12 / 13 | N° d'ordre sur le topic : 87 / 88
un octect non

2 octect oui j'en ai effectivement parle. Et encore dans l'exemple ci dessus.

Si une valeur X de 16 bits de large commence a l'adresse 1001, elle occupera 1001 et 1002 car elle fait 2 octects de large. Donc si une autre valeur X' de 16 bits est stockee en memoire ce sera au mieux a partir de la premiere case libre : 1003 et elle occupera 1003 et 1004. Bon alors

"adr1 + 2 octects pour X'" il fallait lire (je viens de comprenre ce que tu avais compris) :
adr1 + 2octects (1001 + 2 = 1003) est l'adresse de X'

voila.
_________________


                           --> Fct Warning : lire la FAQ svp.
Favern
''Prince des sockets''


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 24-03-2002 à 07:36  | N° d'ordre sur la page en cours : 13 / 13 | N° d'ordre sur le topic : 88 / 88
Bonjour,

A d'accord merci beaucoup.

Je pense avoir comprit la mal de chose là déja. Un grand merci Buzzz et Tian

Favern
_________________
o----[::::::::::::::>®L©
ChoixPC+ LDLC =Cadeau


                                 --> Fct Warning : lire la FAQ svp.
Forum ChoixPC » » Archives : matériel PC - dépannage et technologie - » » question sur les GPU Haut de page | Posts récents

Aller directement à la page : ( Page précédente 1 | 2 | 3 | 4 | 5 | 6 )