GT Turbo Posted October 19, 2005 Report Share Posted October 19, 2005 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 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' 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 !! Link to comment Share on other sites More sharing options...
Azrael Posted October 20, 2005 Report Share Posted October 20, 2005 C'est quoi exactement "Ce code fonctionne MAIS si vous supprimez un 'load' dans la boucle, le code fonctionne encore !!" ?? Après recompilation ou bien après code automodifiant ? Link to comment Share on other sites More sharing options...
GT Turbo Posted October 20, 2005 Author Report Share Posted October 20, 2005 Si tu essaies ce code la : 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 Puis vint une boucle de synchro et après on reboucle a 'boucle' Ca donne le meme résultat que celui au dessus (mais la on a une instruction en moins dans la boucle !!) GT Perdu !! Link to comment Share on other sites More sharing options...
Azrael Posted October 20, 2005 Report Share Posted October 20, 2005 ben tu as une instruction qui sert à rien ou bien si tu vires encore la ligne load (r7),r4 ; recharge X1 est ce que ça donne encore la même chose que ton code original ? Edit : correction orth Link to comment Share on other sites More sharing options...
GT Turbo Posted October 20, 2005 Author Report Share Posted October 20, 2005 Azrael : ben tu as une instruction qui sert à rien ou bien si tu vires encore un la ligne load (r7),r4 ; recharge X1est ce que ça donne encore la même chose que ton code original ?Non une ligne de dégagé en plus me tracait des polygones bancales, cela m'arrangerait si je pouvais avoir une dizaine d'instructions qui me servait servait a rien !!GT Turbo Link to comment Share on other sites More sharing options...
SCPCD Posted October 20, 2005 Report Share Posted October 20, 2005 GT Turbo : Si tu essaies ce code la : load (r7),r4 ; Charge le X1load (r6),r3 ; Pareil mais pour le X2Boucle :sub r3,r4puis une dizaine de ligne et :addq #4,r7addq #4,r6load (r7),r4 ; recharge X1Puis vint une boucle de synchro et après on reboucle a 'boucle'Ca donne le meme résultat que celui au dessus (mais la on a une instruction en moins dans la boucle !!) GT Perdu !! Je ne sais pas ce que tu fais dans les lignes non données mais si tu ne modifi pas le r3, alors ca parait logique qu'il n'est pas necessaire de mettre le load (r6),r3. Par contre, je n'ai pas encore trouvé l'explication de l'erreur sur le premier code...A moins qu'il y est un bug dans le GPU sur les sauts qui en fait ce tromperais dans le calcul de la position du PC dans certains cas mais je ne me rappelle pas que ca a été decrit dans la liste des bugs.Une autre possibilité serais qu'il y est un bug dans l'assembleur MADMAC dans le calcul de l'adresse de retour dans certaines combinaisons..... Link to comment Share on other sites More sharing options...
GT Turbo Posted October 20, 2005 Author Report Share Posted October 20, 2005 SCPCD : Je ne sais pas ce que tu fais dans les lignes non données mais si tu ne modifi pas le r3, alors ca parait logique qu'il n'est pas necessaire de mettre le load (r6),r3. R3 est modifié, mais j'ai pas fait apparaitre pour des raisons de confidentialité, et le plus marrant c'est que si tu place un : < Link to comment Share on other sites More sharing options...
Azrael Posted October 21, 2005 Report Share Posted October 21, 2005 SCPCD : Une autre possibilité serais qu'il y est un bug dans l'assembleur MADMAC dans le calcul de l'adresse de retour dans certaines combinaisons..... Bonne suggestion. Je ne sais pas si GT a dessaemble le code compile par l'asm MADMAC... suite dimanche ou lundi. Link to comment Share on other sites More sharing options...
cts Posted October 21, 2005 Report Share Posted October 21, 2005 GT, possible de mettre à dispo la routine complète ? Vu qu'y a pleins de bugs possibles (instruction après le JUMP/JR, LOAD et utilisation directe du registre...le MOVEQ à proscrire a moins de coller un "OR rn,rn" apres pour être sûr du contenu du registre) Sinon, sur jaguar, c'est une mauvaise idée d'utiliser des tables xmin/xmax, vaut mieux tracer les horizontales en paralelle du calcul. (ma dernière routine en date doit faire moins de 200 octets et pas besoin de buffer donc ) Link to comment Share on other sites More sharing options...
GT Turbo Posted October 23, 2005 Author Report Share Posted October 23, 2005 cts : GT, possible de mettre à dispo la routine complète ? Par pour l'instant, car je travailles dessus, pour le jump/jr, j'ai juste un nop après, pour l'instant, je vais voir pour le moveqcts : Sinon, sur jaguar, c'est une mauvaise idée d'utiliser des tables xmin/xmax, vaut mieux tracer les horizontales en paralelle du calc Tu peux un peu expliquer ta technique, j'ai du mal a voir GT Turbo Link to comment Share on other sites More sharing options...
cts Posted October 23, 2005 Report Share Posted October 23, 2005 Sans la routine, dur de trouver ton bug... Sinon, le polygone sans table c'est: 10 x_left+=left_inc 20 x_right+=right_inc 30 DRAW (X_left,x_right,y) 40 y++ 50 goto 10 On peut pas faire + simple ! Link to comment Share on other sites More sharing options...
GT Turbo Posted October 23, 2005 Author Report Share Posted October 23, 2005 cts : Sans la routine, dur de trouver ton bug...Sinon, le polygone sans table c'est:10 x_left+=left_inc20 x_right+=right_inc30 DRAW (X_left,x_right,y)40 y++50 goto 10On peut pas faire + simple ! En partant d'une base triangulaire a priori ? Pour l'instant on dispose d'une routine 'general', on peux aussi bien faire un octogone qu'un triangle.Effectivement c'est le plus simple possible !! GT Link to comment Share on other sites More sharing options...
gloky Posted April 15, 2006 Report Share Posted April 15, 2006 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now