Author: leo
Date: Mon Jan 23 08:43:29 2006
New Revision: 11322

Modified:
   trunk/examples/shootout/nbody.pir
Log:
now nbody is really fast orig: 1m25, now: 6s

Modified: trunk/examples/shootout/nbody.pir
==============================================================================
--- trunk/examples/shootout/nbody.pir   (original)
+++ trunk/examples/shootout/nbody.pir   Mon Jan 23 08:43:29 2006
@@ -3,7 +3,7 @@
 # http://shootout.alioth.debian.org/
 # 
 # Contributed by Joshua Isom
-# speeded up by 75% by Leopold Toetsch
+# speed up  from 1m25 to 6s by Leopold Toetsch
 
 .const int x = 0
 .const int y = 1
@@ -224,24 +224,27 @@ endfor_0:
        .local float dx, dy, dz, distance, mag
        .local float bx, by, bz, bm, bvx, bvy, bvz
        .local float b2x, b2y, b2z, b2m
+       .local pmc bi, bj
        i = 0
 beginfor_0:
        unless i < nbodies goto endfor_0
-       bx = bodies[i, x]
-       by = bodies[i, y]
-       bz = bodies[i, z]
-       bm = bodies[i, m]
-       bvx = bodies[i, vx]
-       bvy = bodies[i, vy]
-       bvz = bodies[i, vz]
+       bi = bodies[i]
+       bx = bi[x]
+       by = bi[y]
+       bz = bi[z]
+       bm = bi[m]
+       bvx = bi[vx]
+       bvy = bi[vy]
+       bvz = bi[vz]
        
        j = i + 1
        beginfor_1:
                unless j < nbodies goto endfor_1
-               b2x = bodies[j, x]
-               b2y = bodies[j, y]
-               b2z = bodies[j, z]
-               b2m = bodies[j, m]
+               bj = bodies[j]
+               b2x = bj[x]
+               b2y = bj[y]
+               b2z = bj[z]
+               b2m = bj[m]
 
                # dx = b->x - b2->x;
                dx = bx - b2x
@@ -281,30 +284,30 @@ beginfor_0:
                # b2->vx += dx * b->mass * mag;
                $N0 = dx * bm
                $N0 *= mag
-               $N1 = bodies[j; vx]
+               $N1 = bj[vx]
                $N1 += $N0
-               bodies[j; vx] = $N1
+               bj[vx] = $N1
 
                # b2->vy += dy * b->mass * mag;
                $N0 = dy * bm
                $N0 *= mag
-               $N1 = bodies[j; vy]
+               $N1 = bj[vy]
                $N1 += $N0
-               bodies[j; vy] = $N1
+               bj[vy] = $N1
 
                # b2->vz += dz * b->mass * mag;
                $N0 = dz * bm
                $N0 *= mag
-               $N1 = bodies[j; vz]
+               $N1 = bj[vz]
                $N1 += $N0
-               bodies[j; vz] = $N1
+               bj[vz] = $N1
 
                inc j
                goto beginfor_1
        endfor_1:
-       bodies[i; vx] = bvx
-       bodies[i; vy] = bvy
-       bodies[i; vz] = bvz
+       bi[vx] = bvx
+       bi[vy] = bvy
+       bi[vz] = bvz
 
        inc i
        goto beginfor_0
@@ -313,26 +316,27 @@ endfor_0:
        i = 0
 beginfor_2:
        unless i < nbodies goto endfor_2
+       bi = bodies[i]
        # b->x += dt * b->vx;
-       $N0 = bodies[i; vx]
+       $N0 = bi[vx]
        $N1 = dt * $N0
-       $N0 = bodies[i; x]
+       $N0 = bi[x]
        $N0 += $N1
-       bodies[i; x] = $N0
+       bi[x] = $N0
 
        # b->y += dt * b->vy;
-       $N0 = bodies[i; vy]
+       $N0 = bi[vy]
        $N1 = dt * $N0
-       $N0 = bodies[i; y]
+       $N0 = bi[y]
        $N0 += $N1
-       bodies[i; y] = $N0
+       bi[y] = $N0
 
        # b->z += dt * b->vz;
-       $N0 = bodies[i; vz]
+       $N0 = bi[vz]
        $N1 = dt * $N0
-       $N0 = bodies[i; z]
+       $N0 = bi[z]
        $N0 += $N1
-       bodies[i; z] = $N0
+       bi[z] = $N0
 
        inc i
        goto beginfor_2

Reply via email to