Eval vitesse d'un programme sur differents amigas

15 sujets de 76 à 90 (sur un total de 101)

  • flype

      #306301

      @goodchip

      tu nous montres ? 🙂 une ch’tite photo please.

      A600 Rev 1.5 + Vampire 600 V2-128.
      A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.

      huggyone76

        #306307

        Merci Goodchip, yapuka… 😉

        A500+ACA500 - A600+Vampire 2+indivision ECS - A1200+Vampire V2 1200 - Mac Mini 1.42 sous MOS - Just CPC 128k - CPC 6128 - Atari STE 4Mo/CosmosEx - Atari Falcon CT60/SuperVidel 🙂
        C64C + 1541-II + Lecteur K7 + SD - Sharp X68000 CZ-601C 4Mo + CF - Sharp X68000 CZ-611C 10Mo + CF + ext. MIDI

        goodchip

          #306308

          Je vous montre ça ce soir.

          Sylvain aka goodchip

          goodchip

            #306341

            avant :

            pendant :

            après :

            Sylvain aka goodchip

            __sam__

              #306505

              Ce soir j’ai ré-écrit le rasterizer en asm: >>ici<<

              Résultat: outre le fait que c’est plus rapide, les différences entre compilateurs sont réduites.

              Ca n’est qu’un 1er jet en ASM, je pense qu’on peut faire plus rapide car la grosse formule appliquée en chaque point:
              [code]
              *out = makeColour(
              real2scalar(
              modelTri->vertices[0]->color.x * d1 +
              modelTri->vertices[1]->color.x * d2 +
              modelTri->vertices[2]->color.x * d0),
              real2scalar(
              modelTri->vertices[0]->color.y * d1 +
              modelTri->vertices[1]->color.y * d2 +
              modelTri->vertices[2]->color.y * d0),
              real2scalar(
              modelTri->vertices[0]->color.z * d1 +
              modelTri->vertices[1]->color.z * d2 +
              modelTri->vertices[2]->color.z * d0));
              [/code]
              Peut être optimisée en passant par des delta pour réduire les 9 multiplications et 6 additions à seulement 3 additions.

              Samuel.

              Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
              A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
              A500 Vampire V2+ ^8^ 🙂
              (mais aussi TO8, TO8D, TO9. Groupe PULS.)

              thellier

                #306535

                @Samuel

                Si tu veux te lancer dans la modif de l’asm:
                une commande pratique dans gcc c’est

                gcc -Wa,-adhln -g -Wall -m68020-40 -m68881 -noixemul -O3 -c fillpoly.c > fillpoly-mixed.c

                qui donne l’asm généré mixé avec le source original en C

                Je me suis fait une commande qui
                1) nettoye ce listing (notamment enlève les chiffres en début de ligne et mets le C en commentaires)
                ainsi on peut écrire dedans ses modifs de l’asm
                2) la même commande enlève les commentaires pour obtenir un asm pur prêt à recompiler avec gcc

                Si t’as un mail et que ça t’intéresse

                Alain

                Exemple de mix:

                131:fillpoly.c **** Delta.L.u=(Edge2->L.u – Edge1->L.u)/dx;
                863 .stabd 68,0,131
                864 0084 202C 000C movel a4@(12),d0
                865 0088 90AB 000C subl a3@(12),d0
                866 008c 2E00 movel d0,d7
                867 008e 4C46 7807 divsl d6,d7
                868 0092 2B47 FFDC movel d7,a5@(-36)

                puis nettoyage:

                // Delta.L.u=(Edge2->L.u – Edge1->L.u)/dx;
                movel a4@(12),d0
                subl a3@(12),d0
                movel d0,d7
                divsl d6,d7
                movel d7,a5@(-36)

                puis optimisation manuelle:

                // Delta.L.u=(Edge2->L.u – Edge1->L.u)/dx;
                movel a4@(12),d0
                subl a3@(12),d0
                divsl d6,d0
                movel d0,a5@(-36)

                puis asm pur:

                movel a4@(12),d0
                subl a3@(12),d0
                divsl d6,d0
                movel d0,a5@(-36)

                __sam__

                  #306545

                  Ah merci cool, ca me manquait les sorties mixtes. Moi je faisais le bon vieux -S qui sort de ASM brut, mais comme mes méthodes sont courtes et ne font qu’une chose je m’en sortais avec ca. Il faut dire que le code C est l’asm 68k sont très voisins, donc on y retrouve ses petits.

                  Avec la vamp en revanche, et en particulier le superscalaire, le code ASM optimisé a tendence à mélanger plusieurs instructions sources séparées dans la même région asm. Je veux dire par là que la construction « INST1; INST2; » du C ne se traduit plus comme « ASM1; ASM2; » (assemblage linéaire) où ASM1 correspond aux instructions C de INST1 (idem avec les ASM2/INST2), mais on a en asm un mix de ASM1 et ASM2 interpénétrés: La fin de ASM1 déborde sur le début de ASM2. C’est assez pénible à relire, et surtout à écrire.

                  Je rêverais d’un outil qui prenne de l’ASM « linéaire » où ASM1 et ASM2 sont bien séparés et fasse le mélange ASM1/ASM2 automatiquement pour tirer parti des deux pipelines 5 étages. Ca s’appelle un (re-)scheduler d’instructions et ca n’existe pas à ma connaissance pour amiga. Du coup il faut faire ca à ma main, et c’est long et casse-gueule (surtout si on doit modifier l’algo par la suite), mais ca vaut le coup. Flype a testé en X11 et dépasse les 20fps à présent avec le monkey suzanne (500 points, 1500 facettes.)

                  Samuel.

                  Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                  A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                  A500 Vampire V2+ ^8^ 🙂
                  (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                  huggyone76

                    #306560

                    Version du 13/10/18, Vampire 600 V2, Superscalar ON, Core x11

                    Ancienne version/nouvelle version

                    * vbcc – 15.551 fps / 17.118 fps

                    * gcc 2.95.3 – 15.637 fps / 16.987 fps

                    * gcc 3.2.2 – 15.917 fps / 18.239 fps

                    * gcc 6.3.1b – 17.306 fps / 18.957 fps

                    * gcc 6.4.1b – 17.801 fps / 18.222 fps

                    * sasc –  12.655 fps / 16.924 fps

                    Pas mal, pas mal… 🙂 Sur sasc, le bond est impressionnant ! Et effectivement, ça nivelle un peu le rendu 😉

                    A500+ACA500 - A600+Vampire 2+indivision ECS - A1200+Vampire V2 1200 - Mac Mini 1.42 sous MOS - Just CPC 128k - CPC 6128 - Atari STE 4Mo/CosmosEx - Atari Falcon CT60/SuperVidel 🙂
                    C64C + 1541-II + Lecteur K7 + SD - Sharp X68000 CZ-601C 4Mo + CF - Sharp X68000 CZ-611C 10Mo + CF + ext. MIDI

                    __sam__

                      #306564

                      Tiens c’erst un chouille en dessous de Flype. Il était peut-être en X12, je ne sais plus. Sinon si 19-20fps c’est trop rapide, il y a le mode « -model redrat » et là les perfs s’effondrent complètement du au trop grand nombre de faces qui s’affichent effectivement. Au fait je ne sais plus si je l’ai indiqué, mais les flèches gauche/droite permettent de tourner autour de l’objet, et haut/bas de s’en approcher ou de s’en éloigner.

                      Samuel.

                      Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                      A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                      A500 Vampire V2+ ^8^ 🙂
                      (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                      flype

                        #306571

                        @__sam__

                        C’est sans doute parce que je lance un script (avec execute) en utilisant l’argument -size :

                        >monkey.gcc-4.6.1b -size 320 200 -benchmark

                        Ce qui donne en gros avec gcc 6.x
                        20 fps en x11
                        22 fps en x12

                        A600 Rev 1.5 + Vampire 600 V2-128.
                        A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.

                        huggyone76

                          #306572

                          Je lance un « execute run-benchmark.txt » pour qu’on ait des résultats comparables. 🙂

                          Et oui, Sam, tu avais indiqué pour tourner autour et le zoom.

                          A500+ACA500 - A600+Vampire 2+indivision ECS - A1200+Vampire V2 1200 - Mac Mini 1.42 sous MOS - Just CPC 128k - CPC 6128 - Atari STE 4Mo/CosmosEx - Atari Falcon CT60/SuperVidel 🙂
                          C64C + 1541-II + Lecteur K7 + SD - Sharp X68000 CZ-601C 4Mo + CF - Sharp X68000 CZ-611C 10Mo + CF + ext. MIDI

                          __sam__

                            #306578

                            Ca n’est qu’un 1er jet en ASM, je pense qu’on peut faire plus rapide car la grosse formule appliquée en chaque point: (…) peut être optimisée en passant par des delta pour réduire les 9 multiplications et 6 additions à seulement 3 additions.

                            Voila qui est fait: >>ici<<

                            La routine principale se réduit à quelques additions selement

                            .1
                            		fcmp.s	(a1)+,fp3
                            		fble.b	.2
                            		fmove.s	fp3,-4(a1)
                            		fmove.l	fp5,d7
                            		fmove.l	fp4,(a2)
                            		move.w	d7,2(a2)
                            		fmove.l	fp6,d7
                            		move.b	d7,3(a2)
                            .2
                            		fadd.s	d0,fp0
                            		fblt.b	.9
                            		fadd.s	d1,fp1
                            		fblt.b	.9
                            		fadd.s	d2,fp2
                            		fblt.b	.9
                            		
                            		fadd.s	d3,fp3
                            		addq.l	#4,a2
                            		
                            		fadd.s	d4,fp4
                            		fadd.s	d5,fp5
                            		fadd.s	d6,fp6
                            		bra		.1
                            		
                            .9
                            		fmovem	(sp)+,fp2-fp7
                            		movem.l	(sp)+,d2-d7/a2
                            		rts
                            

                            Samuel.

                            Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                            A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                            A500 Vampire V2+ ^8^ 🙂
                            (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                            flype

                              #306584

                              Bravo @__Sam__

                              >monkey.gcc-6.4.1b -size 320 200 -benchmark

                              25.371 fps en x12 – avec des pointes à 31.4 fps.

                              A600 Rev 1.5 + Vampire 600 V2-128.
                              A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.

                              __sam__

                                #306613

                                25fps, Miam miam! J’ai hâte de pouvoir manger des fichiers 3D standards.

                                Samuel.

                                Amiga A500 + GVP530 (8Mo/fpu/mmu/scsi) - en panne 🙁
                                A500 (+ 1Mo PPS), A1200 (Blizzard-IV/fpu/64Mo)
                                A500 Vampire V2+ ^8^ 🙂
                                (mais aussi TO8, TO8D, TO9. Groupe PULS.)

                                huggyone76

                                  #306617

                                  Version du 15/10/18, Vampire 600 V2, Superscalar ON, Core x11

                                  Ancienne version/nouvelle version

                                  * vbcc – 17.118 fps / 18.197 fps

                                  * gcc 2.95.3 – 16.987 fps / 19.126 fps

                                  * gcc 3.2.2 – 18.239 fps / 20.141 fps

                                  * gcc 6.3.1b – 18.957 fps / 21.171 fps

                                  * gcc 6.4.1b – 18.222 fps / 21.191 fps

                                  * sasc –  16.924 fps / 17.727 fps

                                  22.164 fps avec la même commande que Flype

                                  A500+ACA500 - A600+Vampire 2+indivision ECS - A1200+Vampire V2 1200 - Mac Mini 1.42 sous MOS - Just CPC 128k - CPC 6128 - Atari STE 4Mo/CosmosEx - Atari Falcon CT60/SuperVidel 🙂
                                  C64C + 1541-II + Lecteur K7 + SD - Sharp X68000 CZ-601C 4Mo + CF - Sharp X68000 CZ-611C 10Mo + CF + ext. MIDI

                                15 sujets de 76 à 90 (sur un total de 101)

                                • Vous devez être connecté pour répondre à ce sujet.

                                Forums AmigaOS, MorphOS et AROS Développement Eval vitesse d'un programme sur differents amigas

                                Amiga Impact