Changeset 3329


Ignore:
Timestamp:
Sep 14, 2014 7:58:41 AM (6 years ago)
Author:
bradbell
Message:

Change reverse mode plan and have multiple weights in reverse mode example.

Location:
branches/cache
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/cache/bug/cache.sh

    r3326 r3329  
    3939        using CppAD::ADFun;
    4040       
    41         vector< AD<double> > x(2), y(1);
     41        vector< AD<double> > ax(2), ay(2);
    4242
     43        ax[0] = 0.0;
     44        ax[1] = 0.0;
     45        CppAD::Independent(ax);
     46
     47        ay[0] = 5 * (ax[0] + ax[1]);
     48        ay[1] = ay[0] + 5 * (ax[0] - ax[1]);
     49
     50        ADFun<double> f;
     51        f.Dependent(ax, ay);
     52
     53        vector<double> x(2), y(2), w(2);
    4354        x[0] = 1.0;
    4455        x[1] = 2.0;
    45         CppAD::Independent(x);
    46 
    47         y[0] = 5 * (x[0] + x[1]) + 5 * (x[0] - x[1]);
    48 
    49         ADFun<double> f(x, y);
     56        f.Forward(0, x);
     57        w[0] = 1.0;
     58        w[1] = 2.0;
     59        f.Reverse(1, w);
    5060
    5161        f.cache();
     62
    5263
    5364        return ok;
     
    6071EOF
    6172# Turn on tracing
    62 forward0sweep='../../cppad/local/forward0sweep.hpp'
     73forward='../../cppad/local/forward0sweep.hpp'
    6374sed \
    6475        -e 's|^\(# define CPPAD_FORWARD0SWEEP_TRACE\) 0|\1 1|' \
    65         -i $forward0sweep
     76        -i $forward
     77reverse='../../cppad/local/reverse_sweep.hpp'
     78sed \
     79        -e 's|^\(# define CPPAD_REVERSE_SWEEP_TRACE\) 0|\1 1|' \
     80        -i $reverse
    6681#
    6782echo "g++ -g $name.cpp -I../.. -fopenmp -std=c++11 -o $name"
     
    7489rm $name $name.cpp
    7590#
    76 svn revert $forward0sweep
     91svn revert $forward
     92svn revert $reverse
  • branches/cache/plan.txt

    r3328 r3329  
    5151
    52525. Example Tape:
    53         y[0] = 5 * (x[0] + x[1]) + 5 * (x[0] - x[1]);
     53        y[0] = 5 * (x[0] + x[1])
     54        y[1] = y[0] + 5 * (x[0] - x[1]) = 10 * x[0];
    5455
    5556        o=1    v=1    Inv     | fz[0]=1
     
    5960        o=5    v=5    Addvv    vl=1     vr=2    | fz[0]=3
    6061        o=6    v=6    Mulpv    pl=5     vr=5    | fz[0]=15
    61         o=7    v=7    Addvv    vl=6     vr=4    | fz[0]=10
     62        o=7    v=7    Addvv    vl=4     vr=6    | fz[0]=10
    6263        o=8    v=     End     
    6364
     65        partial_0 ( y[0] + 2 * y[1]) = 25
     66        partial_1 ( y[0] + 2 * y[1]) = 5
     67
    64686. Example Cache Index determination:
    65         last_use[0] = 0 (dummy variable never used)
    66         last_use[1] = 5
    67         last_use[2] = 5
    68         last_use[3] = 4
    69         last_use[4] = 7
    70         last_use[5] = 6
    71         last_use[6] = 7
    72         last_use[7] = 7 (just dependent variable, never otherwise used)
    73 
    74         cache[0]    = 8
    75         cache[1]    = 8
    76         cache[2]    = 9
    77         cache[3]    = 10
    78         cache[4]    = 11
    79         cache[5]    = cache[3] = 10
    80         cache[6]    = cache[1] = 8
    81         cache[7]    = cache[1] = 9
    82 
    83         Cache size  = max(cache) - min(cache) + 1 = 11 - 8 + 1 = 4
     69        i_var   last_use    cache
     70            0          0        8
     71            1          5        8
     72            2          5        9
     73            3          4       10
     74            4          7       11
     75            5          6       10
     76            6          7        8
     77            7          7        9
    8478
    85797. Example Zero Order Forward Mode:
    8680        o=1 v=1 c=8  Inv                         | z[8] =z[1]           =1
    8781        o=2 v=2 c=9  Inv                         | z[9] =z[2]           =2
    88         o=3 v=3 c=10 Subvv vl=1 cl=8  vr=2 cr=9  | z[10]=z[3]=z[8]-z[9] =-1
    89         o=4 v=4 c=11 Mulpv pl=5       vr=3 cr=10 | z[11]=z[4]=5*z[10]   =-5
    90         o=5 v=3 c=10 Addvv vl=1 cl=8  vr=2 cr=9  | z[10]=z[5]=z[8]+z[9] =3
    91         o=6 v=6 c=8  Mulpv pl=5       vr=5 cr=10 | z[8] =z[6]=5*z[10]   =15
    92         o=7 v=7 c=9  Addvv vl=6 cl=8  vr=4 cr=11 | z[9] =z[7]=z[8]+z[11]=10
     82        o=3 v=3 c=10 Addvv vl=1 cl=8  vr=2 cr=9  | z[10]=z[3]=z[8]+z[9] =3
     83        o=4 v=4 c=11 Mulpv pl=5       vr=3 cr=10 | z[11]=z[4]=5*z[10]   =15
     84        o=5 v=5 c=10 Subvv vl=1 cl=8  vr=2 cr=9  | z[10]=z[5]=z[8]-z[9] =-1
     85        o=6 v=6 c=8  Mulpv pl=5       vr=5 cr=10 | z[8] =z[6]=5*z[10]   =-5
     86        o=7 v=7 c=9  Addvv vl=4 cl=11 vr=6 cr=8  | z[9] =z[7]=z[11]+z[8]=10
    9387
    94888. Example First Order Reverse Mode:
    95         z[*]=0, z[7]=1
     89        z[*]=0, z[4]=1, z[7]=2
    9690
    97         o=7 v=7 c=9  Addvv vl=6 cl=8  vr=4 cr=11 | dependent,      z[9]=1
    98                                                  | z[8]+=z[9],     z[8]=1
    99                                                  | z[11]+=z[9],    z[11]=1
    100                                                  | cache,          z[9]=0
     91        o=7 v=7 c=9  Addvv vl=4 cl=11 vr=6 cr=8  | z[9]+=z[7]      z[9]=2
     92                                                 | z[8]+=z[9],     z[8]=2
     93                                                 | z[11]+=z[9],    z[11]=2
     94                                                 | z[9]=0
    10195
    102         o=6 v=6 c=8  Mulpv pl=5       vr=5 cr=10 | z[10]+=5*z[8],  z[10]=5
    103                                                  | cache,          z[8]=0
     96        o=6 v=6 c=8  Mulpv pl=5       vr=5 cr=10 | z[8]+=z[6],     z[8]=2
     97                                                 | z[10]+=5*z[8],  z[10]=10
     98                                                 | z[8]=0
    10499
    105         o=5 v=3 c=10 Addvv vl=1 cl=8  vr=2 cr=9  | z[8]+=z[10],    z[8]=5
    106                                                  | z[9]+=z[10].    z[9]=5
    107                                                  | cache,          z[10]=0
     100        o=5 v=3 c=10 Addvv vl=1 cl=8  vr=2 cr=9  | z[10]+=z[5],    z[10]=10
     101                                                 | z[8]+=z[10],    z[8]=10
     102                                                 | z[9]+=z[10].    z[9]=10
     103                                                 | z[10]=0
    108104
    109         o=4 v=4 c=11 Mulpv pl=5       vr=3 cr=10 | z[10]+=5*z[11], z[10]=5
    110                                                  | cache,          z[11]=0
     105        o=4 v=4 c=11 Mulpv pl=5       vr=3 cr=10 | z[11]+=z[4],    z[11]=3
     106                                                 | z[10]+=5*z[11], z[10]=15
     107                                                 | z[11]=0
    111108
    112         o=3 v=3 c=10 Subvv vl=1 cl=8  vr=2 cr=9  | z[8]+=z[10],    z[8]=10
    113                                                  | z[9]-=z[10],    z[9]=0
     109        o=3 v=3 c=10 Subvv vl=1 cl=8  vr=2 cr=9  | z[10]+=z[3],    z[10]=15
     110                                                 | z[8]+=z[10],    z[8]=25
     111                                                 | z[9]-=z[10],    z[9]=-5
     112                                                 | z[10]=0
    114113
    115         o=2 v=2 c=9  Inv                         | independent,    z[2]=z[9]=0
    116         o=1 v=1 c=8  Inv                         | independent,    z[1]=z[8]=10
     114        o=2 v=2 c=9  Inv                         | z[2]=z[9],      z[2]=-5
     115        o=1 v=1 c=8  Inv                         | z[1]=z[8],      z[1]=25
    117116
    118117
Note: See TracChangeset for help on using the changeset viewer.