Search in sources :

Example 1 with TernaryAggregate

use of org.apache.sysml.lops.TernaryAggregate in project incubator-systemml by apache.

the class AggUnaryOp method constructLopsTernaryAggregateRewrite.

private Lop constructLopsTernaryAggregateRewrite(ExecType et) throws HopsException, LopsException {
    Hop input1 = getInput().get(0);
    Hop input11 = input1.getInput().get(0);
    Hop input12 = input1.getInput().get(1);
    Lop in1 = null;
    Lop in2 = null;
    Lop in3 = null;
    if (input11 instanceof BinaryOp && ((BinaryOp) input11).getOp() == OpOp2.MULT) {
        in1 = input11.getInput().get(0).constructLops();
        in2 = input11.getInput().get(1).constructLops();
        in3 = input12.constructLops();
    } else if (input12 instanceof BinaryOp && ((BinaryOp) input12).getOp() == OpOp2.MULT) {
        in1 = input11.constructLops();
        in2 = input12.getInput().get(0).constructLops();
        in3 = input12.getInput().get(1).constructLops();
    } else {
        in1 = input11.constructLops();
        in2 = input12.constructLops();
        in3 = new LiteralOp(1).constructLops();
    }
    //create new ternary aggregate operator 
    int k = OptimizerUtils.getConstrainedNumThreads(_maxNumThreads);
    // The execution type of a unary aggregate instruction should depend on the execution type of inputs to avoid OOM
    // Since we only support matrix-vector and not vector-matrix, checking the execution type of input1 should suffice.
    ExecType et_input = input1.optFindExecType();
    DirectionTypes dir = HopsDirection2Lops.get(_direction);
    return new TernaryAggregate(in1, in2, in3, Aggregate.OperationTypes.KahanSum, Binary.OperationTypes.MULTIPLY, dir, getDataType(), ValueType.DOUBLE, et_input, k);
}
Also used : MultiThreadedHop(org.apache.sysml.hops.Hop.MultiThreadedHop) DirectionTypes(org.apache.sysml.lops.PartialAggregate.DirectionTypes) ExecType(org.apache.sysml.lops.LopProperties.ExecType) TernaryAggregate(org.apache.sysml.lops.TernaryAggregate) Lop(org.apache.sysml.lops.Lop)

Aggregations

MultiThreadedHop (org.apache.sysml.hops.Hop.MultiThreadedHop)1 Lop (org.apache.sysml.lops.Lop)1 ExecType (org.apache.sysml.lops.LopProperties.ExecType)1 DirectionTypes (org.apache.sysml.lops.PartialAggregate.DirectionTypes)1 TernaryAggregate (org.apache.sysml.lops.TernaryAggregate)1