Changeset 2953


Ignore:
Timestamp:
Oct 15, 2013 7:48:24 PM (6 years ago)
Author:
bradbell
Message:

Create new op codes that will skip unecessary calculations in conditional expressions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/opt_cond_exp/cppad/local/op_code.hpp

    r2934 r2953  
    5656        AtanOp,   // atan(variable)
    5757        BeginOp,  // used to mark the beginning of the tape
    58         CExpOp,   // CondExp(cop, left, right, trueCase, falseCase)
     58        BskipOp,  // begin a conditional skip of operations
     59        // arg[0] = index in cond_skip we will check for true
     60        // arg[1] = number of operations that we will skip if true
     61        CExpOp,   // CondExpRel(left, right, trueCase, falseCase)
     62        // arg[0]     = the Rel operator: Lt, Le, Eq, Ge, Gt, or Ne
     63        // arg[1] & 1 = is left a variable
     64        // arg[1] & 2 = is right a variable
     65        // arg[1] & 4 = is trueCase a variable
     66        // arg[1] & 8 = is falseCase a variable
     67        // arg[2]     = index correspoding to left
     68        // arg[3]     = index correspoding to right
     69        // arg[4]     = index correspoding to trueCase
     70        // arg[5]     = index correspoding to falseCase
    5971        ComOp,    // Compare(cop, result, left, right)
    6072        CosOp,    //  cos(variable)
     
    7284        DivvvOp,  //      variable   / variable
    7385        EndOp,    //  used to mark the end of the tape
     86        EskipOp,  // end a conditional skip of operations
     87        // arg[0] = index in cond_skip we will check for true
     88        // arg[1] = number of operations that we will skip if true
    7489        ExpOp,    //  exp(variable)
    7590        InvOp,    //                             independent variable
     
    88103        SinhOp,   // sinh(variable)
    89104        SqrtOp,   // sqrt(variable)
     105        SskipOp,  // set the next pair of conditional skip values
     106        // arg[0]   = index in operation sequence of a CExpOp
     107        // arg[1]   = index in cond_skip set to comparison result
     108        // arg[1]+1 = index in cond_skip set to not comparison result
    90109        StppOp,   //    z[parameter] = parameter
    91110        StpvOp,   //    z[parameter] = variable
     
    130149        1, // AtanOp
    131150        0, // BeginOp
     151        2, // BskipOp
    132152        6, // CExpOp
    133153        4, // ComOp
     
    140160        2, // DivvvOp
    141161        0, // EndOp
     162        2, // EskipOp
    142163        1, // ExpOp
    143164        0, // InvOp
     
    156177        1, // SinhOp
    157178        1, // SqrtOp
     179        3, // SskipOp
    158180        3, // StppOp
    159181        3, // StpvOp
     
    228250        2, // AtanOp
    229251        1, // BeginOp  offsets first variable to have index one (not zero)
     252        0, // BskipOp
    230253        1, // CExpOp
    231254        0, // ComOp
     
    238261        1, // DivvvOp
    239262        0, // EndOp
     263        0, // EskipOp
    240264        1, // ExpOp
    241265        1, // InvOp
     
    254278        2, // SinhOp
    255279        1, // SqrtOp
     280        0, // SskipOp
    256281        0, // StppOp
    257282        0, // StpvOp
     
    429454                "Atan"  ,
    430455                "Begin" ,
     456                "Bskip" ,
    431457                "CExp"  ,
    432458                "Com"   ,
     
    439465                "Divvv" ,
    440466                "End"   ,
     467                "Eskip" ,
    441468                "Exp"   ,
    442469                "Inv"   ,
     
    455482                "Sinh"  ,
    456483                "Sqrt"  ,
     484                "Sskip" ,
    457485                "Stpp"  ,
    458486                "Stpv"  ,
     
    490518        switch( op )
    491519        {
     520                case BskipOp:
     521                case EskipOp:
     522                /*
     523                ind[0] = index in cond_skip we will check for true
     524                ind[1] = number of operations that we will skip if true.
     525                */
     526                printOpField(os, "idx=", ind[0], ncol);
     527                printOpField(os, "num=", ind[1], ncol);
     528                break;
     529
     530                case SskipOp:
     531                /*
     532                arg[0]   = index in operation sequence of a CExpOp
     533                arg[1]   = index in cond_skip set to comparison result
     534                arg[1]+1 = index in cond_skip set to not comparison result
     535                */
     536                printOpField(os, "cdx=", ind[0], ncol);
     537                printOpField(os, "sdx=", ind[1], ncol);
     538                break;
     539
    492540                case CSumOp:
    493541                /*
Note: See TracChangeset for help on using the changeset viewer.