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+2) : 05:06
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 Page suivante )  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: 5495
De: ux point zéro
Posté le: 13-03-2002 à 07:00  | N° d'ordre sur la page en cours : 1 / 15 | N° d'ordre sur le topic : 31 / 88
bon avant d'aller fair dodo... donc

Avant on faisait
MOV AX,[444] et il y avait une valeur dans ce registre

maintenant on peut avoir avec un registre 256 = 8*32

MOV Reg256,[444] charge 32 octects en une fois et Reg256 contient 8 nombres de 32
style en hexa :
Reg256 = 00000002000000020000000200000002000000020000000200000002000000000000002

ensuite je multiplie les 8 nombres tous egaux a 2 par, 8 nombre de 32 bits

00000001000000020000000300000004000000050000000600000007000000000000008

par exemple : MUL Reg256,[555]

et apres le calcul j'obtiens :

Reg256 = 000000020000000400000006000000080000000A0000000C0000000E000000000000010





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

[ Ce message a été édité par: buzzz le 2002-03-13 07:01 ]


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


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


Alors dans ton dernier message j'ai absolument rien suivit:
Quote:

Avant on faisait
MOV AX,[444] et il y avait une valeur dans ce registre


Pourquoi avant ? Je croyais que c'était la méthode utilisé pour les registres ?

Quote:

maintenant on peut avoir avec un registre 256 = 8*32


D'accord. Donc si je comprend bien, un registre de 256 bits contient bien 8 registres de 32 bits ?

Quote:

MOV Reg256,[444] charge 32 octects en une fois et Reg256 contient 8 nombres de 32
style en hexa :


Ca y est: je viens de claquer un neurone!!
Les processeurs ne géres que des 0 et des 1, donc comment peux t'il charger de l'exa ?
Et c'est quoi un style ?

En toute franchise j'ai rien comprit à cette phrase

Quote:

ensuite je multiplie les 8 nombres tous egaux a 2 par, 8 nombre de 32 bits
00000001000000020000000300000004000000050000000600000007000000000000008
par exemple : MUL Reg256,[555]
et apres le calcul j'obtiens :
Reg256 = 000000020000000400000006000000080000000A0000000C0000000E000000000000010


?????????????????????????????????????????????

Favern

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


                                 --> Fct Warning : lire la FAQ svp.
kirin
''Enchanteur de config''


Inscrit: Jun 04, 2001
Messages: 79282
Posté le: 13-03-2002 à 08:28  | N° d'ordre sur la page en cours : 3 / 15 | N° d'ordre sur le topic : 33 / 88
Salut Favern,


Quote:
D'accord. Donc si je comprend bien, un registre de 256 bits contient bien 8 registres de 32 bits ?



Oui, ou 2 de 64 ou 1 de 256 : c *modulable* en fait et il peut dans le registre 256 bits en construire plusieurs identiques pour un total de 256 bits. Il fait un peu sa sauce.


Quote:
Et c'est quoi cette technique de parallelisation de 2 nombres de 32 bits?



C notamment le principe même du MMX et autres SSE / 3DNow.

Avec ton registre 256 bits tu peux théoriquement et au choix, **simultanément** et par ex :
- Additionner 2 nombres 128 bits avec deux autres nombres 128 bits. (deux fois plus rapide qu'additionner un nombre 256 bits avec un nombre 256 bits puisqu'on en addtionne là deux *simultanément*).
- Additionner 4 nombres 64 bits avec 4 autres nombres 128 bits. (4 fois plus rapide qu'additionner un nombre 256 bits avec un nombre 256 bits puisqu'on en addtionne là 4 *simultanément*).


Quote:
Ca y est: je viens de claquer un neurone!!



Ca y est on l'a eu




Quote:
Les processeurs ne géres que des 0 et des 1, donc comment peux t'il charger de l'exa ?



Effectivement c juste une representation, une notation.

Bonjour se dit bonjour en francais et hello en anglais : deux representations de la même chose en fin de compte .

C un peu pareil. L'humain preferera travailler en hexa car un seul symbole qui correspond à 4 digit. Pour l'humain c plus facile de manipuler :

$F0F0F0

que

%111100001111000011110000



et pour le cpu c pareil : qd tu programmes et tape

$F0F0F0

c "transforme" en

%111100001111000011110000

automatiquement à la compilation.


Favern : après Buzz fait du calcul dans la base binaire donc qd on est pas habitué on est paumé c normal.

Mais chaque chose en son temps. Déjà comprendre le //isme sera une bonne chose et ce qu'est un registre, les speficites d'un GPU et le coup de la representation hexa / binaire. ouch

Après seulement on passera au comptage en binaire si on veut sinon là tu vas peter un neurone et c normal


Amicalement

Seb


                                 --> Fct Warning : lire la FAQ svp.
kkkavern
''Décrypteur de manuels informatiques''


Inscrit: Jan 06, 2002
Messages: 72
Posté le: 13-03-2002 à 12:35  | N° d'ordre sur la page en cours : 4 / 15 | N° d'ordre sur le topic : 34 / 88
Quote:

Le 2002-03-13 07:00, buzzz a écrit:


ensuite je multiplie les 8 nombres tous egaux a 2 par, 8 nombre de 32 bits

00000001000000020000000300000004000000050000000600000007000000000000008

par exemple : MUL Reg256,[555]




Si je comprends bien, la valeur

0000000100000002...

est a l'adresse 555 dans le cas present. Ou je me trompe ?


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


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

Merci

Quote:

Oui, ou 2 de 64 ou 1 de 256 : c *modulable* en fait et il peut dans le registre 256 bits en construire plusieurs identiques pour un total de 256 bits. Il fait un peu sa sauce.


Tu voulais sans doute dire, 4 de 64 bits non ?

Donc vous me confirmez bien qu'un registre contient plusieurs registres ?

Quote:

Avec ton registre 256 bits tu peux théoriquement et au choix, **simultanément** et par ex :
- Additionner 2 nombres 128 bits avec deux autres nombres 128 bits. (deux fois plus rapide qu'additionner un nombre 256 bits avec un nombre 256 bits puisqu'on en addtionne là deux *simultanément*).


Si on additionne 2 nombres 128bits avec 2 autres nombre de 128bits, ca signifie que le GPU est à 512bits ????

Quote:

- Additionner 4 nombres 64 bits avec 4 autres nombres 128 bits. (4 fois plus rapide qu'additionner un nombre 256 bits avec un nombre 256 bits puisqu'on en addtionne là 4 *simultanément*).


Si on additionne 4 nombre 64 bits avec 4 nombres 128bits, ca signifie que le proc est à 768bits ???????

Franchement je ne comprend rien du tout. Dans un message précédent buzzz à dit que on ne pouvait pas utiliser les registres en méme temps. Donc comment peux ton faire 2 calculs en méme temps dans 2 registres différent en sachant que l'on utilise 1 seul registre en méme temps ???????????????

Je ne vois pas où est le gain de temps en sachant que l'on fais les calculs l'un aprés l'autre dans des registres différents ???


Bon je vais essayer de faire un bilan pour vous dire exactement ce que j'ai bien comprit. Puisque là je suis de plus en plus perdu.

Donc prenons le cas d'un processeur (GPU et CPU) de registre 256bis, on trouve y trouve 4 registres de 64bits.
Lorsque le proc veux faire un calcul dans un registre, il recoit une commande du style:
ADD AX,[5454]
Donc là il vas chercher les données dans la mémoire à l'adresse 5454 et met les donnés dans le registre AX. (J'appelerais les donnée: (DATA1).
Donc là le registre ce retrouve avec un mot de 64bits.

Maintenant voici ce que je comprend vaguement mais qui ne me parait pas logique du tout:
Par je ne sais quel moyen le mot de 64bits est compressé en 2 mots distinct de 32bits. Chaque mot vas empreinter 2 voies différents. Et par exmple, 1 mot vas étre mit au carré et le second vas étre mit au cube.

Voici ce que j'ai comprit sur le parallélisme. A mon avis sur le dernier point j'ai tout faux, mais ainsi peux étre que ce sera plus clair pour vous afin de savoir ce qui ne vas pas ?


Merci beaucoup

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


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


Inscrit: Jul 09, 2001
Messages: 5495
De: ux point zéro
Posté le: 13-03-2002 à 14:28  | N° d'ordre sur la page en cours : 6 / 15 | N° d'ordre sur le topic : 36 / 88
houla...
bon on y go


alors tu peux faire une operation entre une valeur registre avec une valeur registre ou memoire ainsi tu peux trouver :
ADD AX,[4444]
ADD AX,BX

effectivement pourquoi pas parler de 8 registres de 32 bits plutot que d'un registre 256 bits... subtil

En fait quand on parle de l'architecture d'un processeur... on parle essentiellement de sa bande passante, vers la memoire et dans ses calculs internes.

Ainsi quand on parle de 256 bits, cela veut dire que par cycle le proc peut charger de la memoire dans un registre 256 bits au total + peut faire des calculs entre des registres tel qu'au final la taille totale des registres est au max 256 bits.

En fait oui, on pourrait se passer d'une ecriture en parallele et ecrire comme au bon vieux temps ( il n'y avait qu'un nombre stocke par registre ) :

Add128 R1,[100]
Add128 R2,[116]

comme le proc est un 256 bits, son architecture garantie que ces deux operations 128 bits seront effectues en 1 cycle au max.

PAR COMMODITE d'ecriture, et pour limiter l'occupation memoire (faut pas oublier que ADD est code quelque part), on va forcer le programmeur a n'appeler que des operations en couple : ainsi
on va appeler R256, un registre 256 bits qui en fait sera (R1,R2)
L'instruction machine sera :
ADD128 R256,[100]
et le proc saura que tu veux faire :
Add128 R1,[100]
Add128 R2,[116]

idem si tu ecris :
ADD32 R256,[100] le proc fera

ADD32 R1,[100]
ADD32 R2,[104]
ADD32 R3,[108]
ADD32 R4,[112]
ADD32 R5,[116]
ADD32 R6,[120]
ADD32 R7,[124]
ADD32 R8,[128]
et R256 = (R1,R2,R3,R4,R5,R6,R7,R8)
au final R1 = R1 + int32 a l'adresse 100

pourquoi ces considerations absolues de //
par commoditer de lecture et pour limiter le nombre d'instructions. Dans le dernier exemple ADD32 R256, remplace 8 instructions au total !! est c'est beaucoup pour un proc mine de rien

_________________


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


Inscrit: Jul 09, 2001
Messages: 5495
De: ux point zéro
Posté le: 13-03-2002 à 14:41  | N° d'ordre sur la page en cours : 7 / 15 | N° d'ordre sur le topic : 37 / 88
bon c'est pas ca que je cherchais mais une bonne lecture ici :

http://cedar.intel.com/cgi-bin/ids.dll/content/content.jsp?cntKey=Legacy::irtmo_index_12733&cntType=IDS_EDITORIAL
_________________


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


Inscrit: Jul 09, 2001
Messages: 5495
De: ux point zéro
Posté le: 13-03-2002 à 14:47  | N° d'ordre sur la page en cours : 8 / 15 | N° d'ordre sur le topic : 38 / 88
a lire absolument le tutorial d'intel sur MMX, jamais vu un truc aussi bien fait :

http://www.intel.com/vtune/cbts/mmxintro/download.htm

telechargez et lancer
c'est tres tres bien

bon avec ca t'as pour une semaine fav

Mais apres tu seras incollable
_________________


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


Inscrit: Oct 17, 2001
Messages: 7474
De: passage
Posté le: 13-03-2002 à 14:58  | N° d'ordre sur la page en cours : 9 / 15 | N° d'ordre sur le topic : 39 / 88
Quote:

Le 2002-03-13 14:28, buzzz a écrit:
au final R1 = R1 + int256 a l'adresse 100


Ne nous l'embrouille pas plus va

En fait c'est bien 32 mais pour le nombre d'octets, soit 256 bits (8*32)

Pour comprendre ces histoires de plusieurs registres qui n'en font qu'un, imagine que tu regarde un livre. Tu prends un morceau de carton, dans lequel tu decoupe un petit rectangle, de la hauteur d'une ligne, et de la largeur de 4 caracteres. Tu plaques ce carton sur ta page. Tu ne pourras voir que 4 caracteres a la fois. Et tu devras deplacer 8 fois ce cartons pour lire 32 caracteres.

Si maintenant tu decoupe un rectangle de 32 caracteres, tu les liras les 32 d'un coup. Et a chaque deplacement tu en verras 32 nouveaux.

Mais le texte reste le meme en dessous. Tu peux aussi diviser ton grand rectangle en plusieurs autres petits si tu veux. Par exemple faire a cote 8 rectangles de 4 caracteres. (Ceux ci doivent etre suffisamment proches pour que la separation entre eux ne recouvre pas un caractere)

Remplace la page par la memoire du microprocesseur (que ce soit des registres ou de la RAM, la difference n'est pas importante ici). Remplace les caracteres par les octets memoires. Remplace le deplacement du carton par un cycle d'horloge. Remplace ton oeil par le CPU (ou GPU)

Dans le 1er cas, tu n'as acces qu'a 4 octets a chaque cycle d'horloge. Il s'agit d'un processeur 32 bits (8*4). Dans le second, on a un processeur 256 bits (8*32). Si la fenetre est subdivisee en plusieurs rectangles, on a un traitement parallele. On ne traite pas directement 256 bits a chaque fois, mais plutot 8*32 bits.

Ce concept de poser un carton, un masque est tres important en programmation. La memoire est un ensemble lineaire d'information (du moins dans une architecture de Von Neuman). Quand on y accede, on plaque dessus une structure de plus haut niveau. On parle de "mapper" un emplacement memoire. Dans ce cas la, on pouvait considerer nos bits soit comme des paquets de 32 bits, soit comme des paquets de 256 bits. On peut de meme considerer ce qu'il y a a un certain endroit comme un entier, un caractere, une structure, un objet...

_________________
Site d'Aide Informatique de Tian : Articles sur l'informatique en général et GNU/Linux.

Découvrez la CPC MozBar et GCstar, gestionnaire de collection


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


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 13-03-2002 à 15:50  | N° d'ordre sur la page en cours : 10 / 15 | N° d'ordre sur le topic : 40 / 88
Quote:

Le 2002-03-13 14:28, buzzz a écrit:
Ainsi quand on parle de 256 bits, cela veut dire que par cycle le proc peut charger de la memoire dans un registre 256 bits au total + peut faire des calculs entre des registres tel qu'au final la taille totale des registres est au max 256 bits.


D'accord. Donc il décompose le mot binaire ne plusieurs morceaux égaux non ?

Quote:

comme le proc est un 256 bits, son architecture garantie que ces deux operations 128 bits seront effectues en 1 cycle au max.


Pourquoi vouloir faire 1 opération avec 2 bus à 128bits ?
On aurait aussi put faire 1 à 256bits non?

Quote:

PAR COMMODITE d'ecriture, et pour limiter l'occupation memoire (faut pas oublier que ADD est code quelque part), on va forcer le programmeur a n'appeler que des operations en couple : ainsi
on va appeler R256, un registre 256 bits qui en fait sera (R1,R2)
L'instruction machine sera :
ADD128 R256,[100]
et le proc saura que tu veux faire :
Add128 R1,[100]
Add128 R2,[116]
idem si tu ecris :
ADD32 R256,[100] le proc fera
ADD32 R1,[100]
ADD32 R2,[104]
ADD32 R3,[108]
ADD32 R4,[112]
ADD32 R5,[116]
ADD32 R6,[120]
ADD32 R7,[124]
ADD32 R8,[128]
et R256 = (R1,R2,R3,R4,R5,R6,R7,R8)


Le R signifie quoi là dedans ? Tu vas peux étre me dire que R signifie registre ? Mais pourquoi tu les appels R1, R2..... Je croyais que ca s'appelé AX, BX, CX.....

Quote:

au final R1 = R1 + int32 a l'adresse 100


AIE!!! Un second neurone là
C'est quoi int32 ?????,

Quote:

Dans le 1er cas, tu n'as acces qu'a 4 octets a chaque cycle d'horloge. Il s'agit d'un processeur 32 bits (8*4). Dans le second, on a un processeur 256 bits (8*32). Si la fenetre est subdivisee en plusieurs rectangles, on a un traitement parallele. On ne traite pas directement 256 bits a chaque fois, mais plutot 8*32 bits.


D'accord. Donc on à coupé le mot de 256bits en 8 mots de 32bits.
Et c'est plus simple de traiter 8 mots de 32bits plutot que 1 mot de 256bits ?

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


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


Inscrit: Jan 04, 2002
Messages: 18996
Posté le: 13-03-2002 à 16:14  | N° d'ordre sur la page en cours : 11 / 15 | N° d'ordre sur le topic : 41 / 88
On rigole bien ici. Allez je vais essayer, si j'ai rien compris on me le dira

Quand tu écris un programme qui manipule des nombres entiers, tu peux décider dans une certaine mesure du nombre d'octets que chaque entier occuppe, en fonction de la grandeur des nombres manipulés.

Si tu manipules des coordonnées d'écran limitées à disons 1600, tu peux utiliser des entiers codés sur 16 bits et tu as de la marge (sur 16 bits on peut coder 2E16=65536 entiers)

Maintenant si tu veux manipuler de très grands entiers, alors 256 bits sont plus indiqués car tu peux alors manipuler des entiers de 0 à 2E256-1

Et donc si tu veux faire beaucoup d'additions d'entiers relativement petits et donc codés sur 16 bits, tu en charges plusieurs en même temps dans un registre de 256 bit et le proc fait toutes les additions en 1 cycle.

Donc pour résumer, l'intéret d'un registre 256, c'est de faire des opérations en parallèle sur des données dont on sait qu'elles peuvent être codées sur un nombre plus réduit de bits.

Ce n'est pas plus simple, mais c'est plus facile à coder que n fois la même opération sur un petit registre et plus rapide à exécuter.


                              --> Fct Warning : lire la FAQ svp.
ctrl-alt-del
''Exorciseur de PC''


Inscrit: Jun 12, 2001
Messages: 2587
De: Louvain-la-Neuve (Belgique)
Posté le: 13-03-2002 à 17:16  | N° d'ordre sur la page en cours : 12 / 15 | N° d'ordre sur le topic : 42 / 88
roalala que c'est complexe,

cpu = central processor unit

gpu = graphic processor unit
_________________


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


Inscrit: Jul 09, 2001
Messages: 5495
De: ux point zéro
Posté le: 13-03-2002 à 22:56  | N° d'ordre sur la page en cours : 13 / 15 | N° d'ordre sur le topic : 43 / 88
fav, jete quand meme un coup d'oeil rapide sur : http://cedar.intel.com/cgi-bin/ids.dll/content/content.jsp?cntKey=Legacy::irtmo_index_12733&cntType=IDS_EDITORIAL

tu y trouveras un schemas de decoupe de registres.

Bon, pour la famille des x86, les registres principaux sont AX,BX,CX,DX effectivement les registres MMX sont appeles MM0,...,MM7 et les registres de calculs flottants sont appeles ST0,...,ST7

MMX que j'appelais (SSE je me suis trompe ) a 8 registres de 64 bits qui servent a faire du calcul en entier. Le copro math a 8 registres ST0 ST7 de 64bits pour effectuer des calculs en double. Il s'agit ici uniquement d'appelation car physiquement parlant ce sont les 8 memes. L'utilisation d'une instruction MMX fait passer les calculs sur ces registres en entier, et une instruction fmul fait passer en flottant. Par contre il faut specifier explicitement la fin d'un calcul MMX par une instruction particuliere. Sinon le processeur repere que les registres utilises en entier deviennent bizaremment utilise par des instructions flottantes et il genere alors une erreur generale de l'ordi. C'est fou ca casse tout. Bon je m'ecarte

Peu importe le nom d'un registre, c'est toujours un registre de bits qui peut representer 1 ou des nombres, nombres sui peuvent etre entiers ou a virgule.

Bon le but du jeu est d'effectuer un maximum de calcul !!! Alors par exemple tu as un ensemble de points dans le plan, coordonnees (x,y) qui representent les sommets de triangle a afficher dans le plan. Si tu veux effectuer une translation du vecteur (16,55) tu dois ajouter le vecteur (16,55) a tous les points de la liste. Donc si tu as 100 points a 2 coordonnees, cela fait 200 nombres et donc 200 additions a faire ? ok

si tu charges la valeur du premier x dans un registre 256 bits... pourquoi pas et 16 dans l'autre

tu vas faire :
MOV Reg256,[x] adresse ou est contenue x en memoire
ADD Reg256,16
MOV [x],Reg256
donc 3 instructions de un cyle chacune donc 3*200 = 600 cycles

(comme Buggy l'a fait remarquer), la taille de tes entiers peut etre code seulement sur 32 bits... ca fait de 0 a 4 million... c'est largemenr suffisant pour representer une coordonnees sur l'ecran de resolution 1600 !! bon alors tu peux charger dans ton registre 256 bits 8 valeurs de 32 bits, donc par exemple

MOV Reg256,[adresse]
Reg256 contient par exemple 4 coordonnees de points : x1 | y1 | x2 | y2 | x3 | y3 | x4 |y4
tu as dans un deuxieme registre 4 fois le vecteur deplacement stocke :
Reg'256 = 16 | 55 |16 | 55 |16 | 55 |16 | 55

tu fais ADD Reg256,Reg'256
et tu obtiens en resultats :

points : x1+16 | y1+55 | x2+16 | y2+55 | x3+16 | y3+55 | x4+16 | y4+55
et tu fais un MOV [adresse],Reg256

bon alors au final tu auras

MOV Reg256,[adresse]
ADD Reg256, Reg'256 (ou directement la constate a la place de Reg'256)
MOV [adresse],Reg'256

Tu fais le meme deroulement MOV,ADD,MOV mais cette fois tu aurais effectuer 8 addtions en 3 cycles au lieu de 1 !! La precision est moindre mais en s'en fout. Donc le calcul mettra 3*200/8 = 75 cycles.

si tu fais des calculs sur des nombres entier en 256 bits, alors qu'ils ne prennent que des valeurs entre 0 et 100, cela revient a n'utiliser que les 7 premiers bits du registres 256 et les autres seront toujours a zero. Donc bof autant redecouper les 256 en paquet capable de stocker les entiers que l'on utilise


idem avec les flottants, un flottant 256 bits correspond a par exemple 60 chiffres. Donc si tu veux code la plage 000,000 a 999,999 tu vas utiliser beaucoup moins de bits

Seuls reellement 6 sont utiles

bon essaye de faire le point, j'ai l'impression qu'on te perd la, Kirin code bleue, amene les electrodes.


_________________


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


Inscrit: Jun 04, 2001
Messages: 14699
Posté le: 14-03-2002 à 13:59  | N° d'ordre sur la page en cours : 14 / 15 | N° d'ordre sur le topic : 44 / 88
Bonjour Buzzz,
Quote:

Le 2002-03-13 22:56, buzzz a écrit:
fav, jete quand meme un coup d'oeil rapide sur : http://cedar.intel.com/cgi-bin/ids.dll/content/content.jsp?cntKey=Legacy::irtmo_index_12733&cntType=IDS_EDITORIAL

tu y trouveras un schemas de decoupe de registres.


Donc j'ai été voir la page, mais je n'ai pas trouvé de schéma explicant la découpe d'un registre ?

A moins que c'était le schéma:

Alors en toute franchise ca ne m'a pas du tout aidé.

Quote:

Bon, pour la famille des x86, les registres principaux sont AX,BX,CX,DX effectivement les registres MMX sont appeles MM0,...,MM7 et les registres de calculs flottants sont appeles ST0,...,ST7

MMX que j'appelais (SSE je me suis trompe ) a 8 registres de 64 bits qui servent a faire du calcul en entier. Le copro math a 8 registres ST0 ST7 de 64bits pour effectuer des calculs en double. Il s'agit ici uniquement d'appelation car physiquement parlant ce sont les 8 memes. L'utilisation d'une instruction MMX fait passer les calculs sur ces registres en entier, et une instruction fmul fait passer en flottant. Par contre il faut specifier explicitement la fin d'un calcul MMX par une instruction particuliere. Sinon le processeur repere que les registres utilises en entier deviennent bizaremment utilise par des instructions flottantes et il genere alors une erreur generale de l'ordi. C'est fou ca casse tout. Bon je m'ecarte


Euhhhhh oui.
J'ai lue plusieurs fois ce passage et maintenant mon docteur m'a interdit de le lire une nouvelle fois

Quote:

Bon le but du jeu est d'effectuer un maximum de calcul !!! Alors par exemple tu as un ensemble de points dans le plan, coordonnees (x,y) qui representent les sommets de triangle a afficher dans le plan. Si tu veux effectuer une translation du vecteur (16,55) tu dois ajouter le vecteur (16,55) a tous les points de la liste. Donc si tu as 100 points a 2 coordonnees, cela fait 200 nombres et donc 200 additions a faire ? ok



Oui oui. Jusque là ca vas

Quote:

si tu charges la valeur du premier x dans un registre 256 bits... pourquoi pas et 16 dans l'autre


Pourquoi tu parles d'un registre 256bits ? Tu à combien de registre 256 bits ? Je croyais que l'on été avec des processeurs graphique à 256 bits?
Donc on doit avoir qu'un seul registre de 256 bits ?
Puisque 1 x 256bits= 256bit non ?

Quote:

tu vas faire :
MOV Reg256,[x] adresse ou est contenue x en memoire
ADD Reg256,16
MOV [x],Reg256
donc 3 instructions de un cyle chacune donc 3*200 = 600 cycles

(comme Buggy l'a fait remarquer), la taille de tes entiers peut etre code seulement sur 32 bits... ca fait de 0 a 4 million... c'est largemenr suffisant pour representer une coordonnees sur l'ecran de resolution 1600 !! bon alors tu peux charger dans ton registre 256 bits 8 valeurs de 32 bits, donc par exemple

MOV Reg256,[adresse]
Reg256 contient par exemple 4 coordonnees de points : x1 | y1 | x2 | y2 | x3 | y3 | x4 |y4
tu as dans un deuxieme registre 4 fois le vecteur deplacement stocke :
Reg'256 = 16 | 55 |16 | 55 |16 | 55 |16 | 55

tu fais ADD Reg256,Reg'256
et tu obtiens en resultats :

points : x1+16 | y1+55 | x2+16 | y2+55 | x3+16 | y3+55 | x4+16 | y4+55
et tu fais un MOV [adresse],Reg256

bon alors au final tu auras

MOV Reg256,[adresse]
ADD Reg256, Reg'256 (ou directement la constate a la place de Reg'256)
MOV [adresse],Reg'256

Tu fais le meme deroulement MOV,ADD,MOV mais cette fois tu aurais effectuer 8 addtions en 3 cycles au lieu de 1 !! La precision est moindre mais en s'en fout. Donc le calcul mettra 3*200/8 = 75 cycles.



Bon d'accord. Je comprend à peu prés le principe.
Mais j'ai quelques question:
Comment le proc fait la différence entre 8 mot de 32 bits et 1 mot de 256bits ?

De plus, pourquoi la précision est réduite ? A la fin on obtient le méme résultat non ?

Quote:

si tu fais des calculs sur des nombres entier en 256 bits, alors qu'ils ne prennent que des valeurs entre 0 et 100, cela revient a n'utiliser que les 7 premiers bits du registres 256 et les autres seront toujours a zero. Donc bof autant redecouper les 256 en paquet capable de stocker les entiers que l'on utilise


Oui: Je suis 100% d'accord.

Quote:

idem avec les flottants, un flottant 256 bits correspond a par exemple 60 chiffres. Donc si tu veux code la plage 000,000 a 999,999 tu vas utiliser beaucoup moins de bits


C'est quoi au fait le principe des nombres flottants ?

Quote:

bon essaye de faire le point, j'ai l'impression qu'on te perd la, Kirin code bleue, amene les electrodes.


Bien oui, c'est vrai que là effectivement vous étiez un train de me perdre. Mais ca commence à aller mieux. Anfin, il y a toujours des petites choses que je n'arrive pas à comprendre.

Et une derniére petit chose:
Pourquoi avant tu parlais de "ADD AX,[4444]" et que maintenant tu dis: "ADD Reg256,16" ???????


Merci.

Favern

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

[ Ce message a été édité par: Favern le 2002-03-14 14:03 ]


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


Inscrit: Jul 09, 2001
Messages: 5495
De: ux point zéro
Posté le: 14-03-2002 à 14:35  | N° d'ordre sur la page en cours : 15 / 15 | N° d'ordre sur le topic : 45 / 88
bon.........

une puce 256 bits designe une ARCHITECTURE 256 bits, ce qui veut dire (je l'ai deja ecrit) que le proc arrive a manipuler 256 bits par cycle....

cad
le bus de la memoire est equivalent a un 256 bits, et a l'interieur du proc, il y a PLUSIEURS REGISTRES, d'une taille maximale pour chacun de 256 bits. Ainsi charger une valeur de registre a registre ou memoire a registre prend un cyle en architecture 256 bits.

POUR INTEL :
En architecture 8 bits les registres sont al,bl,cl,dl (abrege de ax low, bx low....), en architecture 16 bits ce sont AX,BX,CD et DX (registres de 16 bits) et actuellement en architecture 32 bits : EAX,EBX,ECX, EDX (extended AX..)


En architecture intel les instructions suivantes existantes :

MOV AX,BX // charger le contenue de AX dans BX
MOV AX,[444] // charger 4 octects a partir de l'adresse [444]
MOV AX,4 // mettre 4 dans AX

pour resumer on caracterise les operations precedentes par les types de variables qu'elles font intervenir :
MOV AX,BX : reg/reg
MOV AX,[444] : reg/mem
MOV AX,4 : reg/constante

ce sont les trois types fournies par l'architecture intel
reg/mem existe evidement dans l'autre sens
mem/reg : MOV [444],AX

Les proc MMX, ont 8 registres 64 bits de plus. MM0,..., MM7 mais quand tu effectues le chargement de ces registres MMX a partir de la memoire, le proc restant une architecture 32 bits en ce moment, le delai sera de deux cycles. Neanmoins, en interne l'architecture MMX est 64, donc les manips reg/reg MMX se font en un cycle.

Comment le proc fait la difference pour savoir si on fait des calculs en entier 64 bits, 2 entiers 32 ou 4 entiers 16 ou 8 entiers 8 sur les registres MMX ?

c'est simplement TOUTES les instructions machines qui sont crees pour CHAQUE CAS.

Si tu veux charger 8 entiers 8 bits a l'adresse x tu ecriras :
LOAD8 MM0,[x]
si tu veux charger 2 entiers 32 bits a l'adresse x
LOAD32 MM0,[x]

Si tu veux faire DEUX additions 32 bits // entre deux registres MMX
ADD32 MM0,MM1

Si tu veux faire QUATRE additions 16 bits // entre deux registres MMX
ADD16 MM0,MM1

Il faut bien comprendre que toutes ces instructions sont codees en memoire par des CODES DIFFERENTS, il existe donc un code pour chaque utilisation :

LOAD8, LOAD16, LOAD32, LOAD64
ADD8, ADD16, ADD32, ADD64



les flottants grosso modo :
tu ecris un nombre : 654654,5464
tu le reecris sous la forme 0,.... 10^?

ici : 0,6546545464.10^6

tu codes le signe sur un bit
tu codes l'exposant de 10 (la mantisse) sur un entier 8 bits, donc de 10^-128 a 10^128
et le nombre apres la virgule est code comme un bon vieux nombre entier sur 23 bits
23+8+1 = 32

voila


Avant que tu poses la question, il existe donc les intructions suivantes :

MOV AL,[44] c'est un MOV8
MOV AX,[44] un MOV16
MOV EAX,[44] un MOV32

mais attention dans ce cas ce n'est pas un chargement parallele

par le fait de la compatibilite ascendante
les 8 bits de AL sont les 24 a 31 de EAX
les 16 bits de AX sont les bits 16 a 31 de EAX

quand tu fais MOV AX,[44] les bits 0...15 de EAX n'ont plus de sens






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

[ Ce message a été édité par: buzzz le 2002-03-14 14:36 ]

[ Ce message a été édité par: buzzz le 2002-03-14 14:42 ]

[ Ce message a été édité par: buzzz le 2002-03-14 14:43 ]


                           --> 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 Page suivante )