ホーム 道しるべ 憩いの広場 濃緑空間 濃緑研の日記

オイラー法(3DNow!)
ホーム ] 上へ ] オイラ−法プログラム ] [ オイラー法(3DNow!) ] RungeKutta法プログラム ] オイラー法FPUアセンブリ ]

 

 以下が、3DNow!によるプログラムであるが、並列実行がどれほど有効に機能しているかは疑問である。

               movq     mm0,mm7              ;mm0 z             | y
                movq     mm1,mm4              ;mm1 0             | x
                pfmul     (m0,m7)                 ;mm0 z^2        | y^2
                pfmul     (m1,m4)                 ;mm1 0        | x^2
                pfacc     (m0,m0)                 ;mm0 z^2+y^2    | z^2+y^2
                pfadd     (m0,m1)                 ;mm0 ???        | z^2+y^2+x^2 = R

                pfrsqrt     (m1,m0)                 ;mm1 ???        | 1/sqrt(R)
                movq     mm2,mm1
                pfmul     (m1,m1)
                pfrsqit1     (m1,m0)
                pfrcpit2     (m1,m2)       

                pfrcp     (m3,m0)
                pfrcpit1     (m0,m3)
                movd     mm2,[GMdt]        ;mm2 ???         | -G*M*dt
                pfrcpit2     (m0,m3)        ;mm0 ???         | 1/R
                pfmul     (m0,m2)             ;mm0 ???         | -G*M*dt/R
                pfmul     (m0,m1)             ;mm0 ???         | -G*M*dt/(sqrt(R)*R) = w
                                        ;                     =-G*M*dt/(r^3)
                punpckldq     mm0,mm0        ;mm0 -G*M*dt/(r^3)     | -G*M*dt/(r^3)
                movq     mm2,[sat.V.Y]    ;mm2 vz         | vy
                pfmul     (m7,m0)             ;mm7 -z*G*M*dt/(r^3)     | -y*G*M*dt/(r^3)
                movd     mm3,[sat.V.X]    ;mm3 ???         | vx
                pfmul     (m4,m0)             ;mm4 ???         | -x*G*M*dt/(r^3)
                movd     mm6,[dt]        ;mm0 ???         | dt
                pfadd     (m2,m7)             ;mm2 vz-z*G*M*dt/(r^3)     | vy-y*G*M*dt/(r^3)
                punpckldq     mm6,mm6        ;mm6 dt         | dt
                movq     [sat.V.Y],mm2    ;vz += -z*G*M*dt/(r^3)     | vy += -y*G*M*dt/(r^3)
                pfadd     (m3,m4)             ;mm3 ???         | vx-x*G*M*dt/(r^3)
                movd     [sat.V.X],mm3    ;vx += -x*G*M*dt/(r^3)
                pfmul     (m2,m6)             ;mm2 vz*dt         | vy*dt
                movq     mm7,[sat.P.Y]    ;mm7 z             | y
                pfmul     (m3,m6)             ;mm3 ???         | vx*dt
                movd     mm4,[sat.P.X]    ;mm4 ???         | x
                pfadd     (m7,m2)
                pfadd     (m4,m3)
                movq     [sat.P.Y],mm7
                movd     [sat.P.X],mm4