Salut tout le monde, HALLUCINATOIRE !!! Le Gpu est un truc de FOU !!!! On savait que certaines sequences d'instructions sont a eviter car resultats aleatoires, mais alors la, le Gpu a un principe de fonctionnement que je comprends pas !! Premier exemple :
movei #140,r3 ; Met 140 dans le reg r3
moveq #6,r5 ; Met 6 dans le registre r5
movei #$f033f8,r4 ; Met la valeur $f033f8 (Adresse) dans r4
Boucle:
ma boucle principale (15 lignes)
---------
subq #1,r5 ; On soustrait 1 a r5
si R5>0 on reboucle sinon on continue a la suite</div>
et bien vous savez quoi ? Ce code ne fonctionne pas !!! Boucle sans fin, j'ai cherché un moment et en mettant r5 avant movei #140,r3 cela fonctionne !!! Je sais que le Gpu 'pipe line' mais a ce stade !!! On dirait presque un cache !! On a l'impression qu'il recharge R5 avec la valeur 6 d'ou ma boucle sans fin.
La sequence d'instruction suivante est a mettre dans les annales du Gpu, SI SI !!
[code] load (r7),r4 ; Charge le X1
load (r6),r3 ; Pareil mais pour le X2
Boucle :
sub r3,r4
puis une dizaine de ligne et :
addq #4,r7
addq #4,r6
load (r7),r4 ; recharge X1
load (r6),r3 ; recharge X2
Puis vint une boucle de synchro et après on reboucle a 'boucle'</div>
Ce code fonctionne MAIS si vous supprimez un 'load' dans la boucle, le code fonctionne encore !! On a l'impression que le Gpu est hanté et joue avec vous !!
C'est dur a croire mais la j'hallucinais un moment, car je voulais faire un traitement sur r3 et cela ne fonctionnait pas, pour résoudre le problème il faut insérer des Nops après les 'load' avant la boucle !!! Quit dit mieux !! On a l'impression que le Gpu utilisait le 'load' avant la boucle et rechargeait R3, faut que je calcules l'écart necessaire entre les instructions, mais on peut assimilé cela a un cache, mais joueur le cache !!! Sinon une solution, faites de grosses boucles !!
GT Heureux, j'ai pu debbuger !!
pour le premier code, je pense plutot que r5 doit valoir 0 a l'entre de la boucle et quand ca reboucle ca passe a -1 et sur 68000 ca s'arrete au bout d'un moment mais ici le registre est plus grand en nombre de bit donc ca dure tres longtemp
Pipe line, cache, ghost in the Gpu ?
in Development
Posted · Report reply