Changeset 3340


Ignore:
Timestamp:
Sep 19, 2014 6:49:12 AM (6 years ago)
Author:
bradbell
Message:

Change assert_arg_before_result so will be easier to add cache.

Location:
branches/cache
Files:
2 edited

Legend:

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

    r3335 r3340  
    5151        f.Dependent(ax, ay);
    5252
    53         vector<double> x(2), y(2), w(2);
     53        vector<double> x(2), y(2), w(2), dw(2);
    5454        x[0] = 1.0;
    5555        x[1] = 2.0;
    56         f.Forward(0, x);
     56        y = f.Forward(0, x);
    5757        w[0] = 1.0;
    5858        w[1] = 2.0;
    59         f.Reverse(1, w);
     59        dw = f.Reverse(1, w);
    6060
    6161        f.cache();
    62 
     62        /*
     63        vector<double> y_cache(2);
     64        y = f.Forward(0, x);
     65       
     66        std::cout << "y       = " << y       << std::endl;
     67        std::cout << "y_cache = " << y_cache << std::endl;
     68        */
    6369
    6470        return ok;
  • branches/cache/cppad/local/op_code.hpp

    r3338 r3340  
    947947        OpCode op, const addr_t* arg, size_t result
    948948)
    949 {
     949{       size_t n_result = 0;
     950        CppAD::vector<size_t> var;
    950951        switch( op )
    951952        {
    952 
    953953                // These cases are not included below
    954954                case UserOp:
     
    979979                case SignOp:
    980980                case SqrtOp:
    981                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < result );
     981                n_result = 1;
     982                var.push_back( size_t(arg[0]) );
    982983                break;
    983984
     
    992993                case TanOp:
    993994                case TanhOp:
    994                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) + 1 < result );
     995                n_result = 2;
     996                var.push_back( size_t(arg[0]) );
    995997                break;
    996998                // ------------------------------------------------------------------
    997999
    998                 // 2 arguments (both variables), 1 results
     1000                // 2 arguments (both variables), 1 result
    9991001                case AddvvOp:
    10001002                case DivvvOp:
    10011003                case MulvvOp:
    10021004                case SubvvOp:
    1003                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < result );
    1004                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) < result );
    1005                 break;
    1006 
    1007                 // 2 arguments (first variables), 1 results
     1005                n_result = 1;
     1006                var.push_back( size_t(arg[0]) );
     1007                var.push_back( size_t(arg[1]) );
     1008                break;
     1009
     1010                // 2 arguments (first variable), 1 result
    10081011                case DivvpOp:
    10091012                case SubvpOp:
    1010                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < result );
    1011                 break;
    1012 
    1013                 // 2 arguments (second variables), 1 results
     1013                n_result = 1;
     1014                var.push_back( size_t(arg[0]) );
     1015                break;
     1016
     1017                // 2 arguments (second variable), 1 result
    10141018                case AddpvOp:
    10151019                case DisOp:
     
    10171021                case MulpvOp:
    10181022                case SubpvOp:
    1019                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) < result );
     1023                n_result = 1;
     1024                var.push_back( size_t(arg[1]) );
    10201025                break;
    10211026
    10221027                // 2 arguments (both variables), 3 results
    10231028                case PowvvOp:
    1024                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) + 2 < result );
    1025                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) + 2 < result );
     1029                n_result = 3;
     1030                var.push_back( size_t(arg[0]) );
     1031                var.push_back( size_t(arg[1]) );
    10261032                break;
    10271033
    10281034                // 2 arguments (first variable), 3 results
    10291035                case PowvpOp:
    1030                 CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) + 2 < result );
     1036                n_result = 3;
     1037                var.push_back( size_t(arg[0]) );
    10311038                break;
    10321039
    10331040                // 2 arguments (second variable), 3 results
    10341041                case PowpvOp:
    1035                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) + 2 < result );
     1042                n_result = 3;
     1043                var.push_back( size_t(arg[1]) );
    10361044                break;
    10371045                // ------------------------------------------------------------------
     
    10441052                // 3 arguments, second variable, 1 result
    10451053                case LdvOp:
    1046                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) < result );
     1054                n_result = 1;
     1055                var.push_back( size_t(arg[1]) );
    10471056                break;
    10481057               
    10491058                // 3 arguments, third variable, no result
    10501059                case StpvOp:
    1051                 CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) <= result );
     1060                n_result = 0;
     1061                var.push_back( size_t(arg[2]) );
    10521062                break;
    10531063
    10541064                // 3 arguments, second variable, no result
    10551065                case StvpOp:
    1056                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) <= result );
     1066                n_result = 0;
     1067                var.push_back( size_t(arg[1]) );
    10571068                break;
    10581069
    10591070                // 3 arguments, second and third variable, no result
    10601071                case StvvOp:
    1061                 CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) <= result );
    1062                 CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) <= result );
     1072                n_result = 0;
     1073                var.push_back( size_t(arg[1]) );
     1074                var.push_back( size_t(arg[2]) );
    10631075                break;
    10641076                // ------------------------------------------------------------------
     
    10661078                // 4 arguments, no result
    10671079                case ComOp:
     1080                n_result = 0;
    10681081                if( arg[1] & 2 )
    1069                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) <= result );
     1082                {       var.push_back( size_t(arg[2]) );
    10701083                }
    10711084                if( arg[1] & 4 )
    1072                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) <= result );
     1085                {       var.push_back( size_t(arg[3]) );
    10731086                }
    10741087                break;
     
    10771090                // 5 arguments, no result
    10781091                case PriOp:
     1092                n_result = 0;
    10791093                if( arg[0] & 1 )
    1080                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[1]) <= result );
     1094                {       var.push_back( size_t(arg[1]) );
    10811095                }
    10821096                if( arg[0] & 2 )
    1083                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) <= result );
     1097                {       var.push_back( size_t(arg[3]) );
    10841098                }
    10851099                break;
     
    10891103                case CExpOp:
    10901104                if( arg[1] & 1 )
    1091                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) < result );
     1105                {       var.push_back( size_t(arg[2]) );
    10921106                }
    10931107                if( arg[1] & 2 )
    1094                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) < result );
     1108                {       var.push_back( size_t(arg[3]) );
    10951109                }
    10961110                if( arg[1] & 4 )
    1097                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[4]) < result );
     1111                {       var.push_back( size_t(arg[4]) );
    10981112                }
    10991113                if( arg[1] & 8 )
    1100                 {       CPPAD_ASSERT_UNKNOWN( size_t(arg[5]) < result );
     1114                {       var.push_back( size_t(arg[5]) );
    11011115                }
    11021116                break;
     
    11071121                break;
    11081122
     1123        }
     1124        for(size_t i = 0; i < var.size(); i++)
     1125        {       CPPAD_ASSERT_UNKNOWN( var[i] + n_result <= result );
    11091126        }
    11101127        return;
Note: See TracChangeset for help on using the changeset viewer.