Search in sources :

Example 1 with MapMultChain

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

the class AggBinaryOp method constructSparkLopsMapMMChain.

private void constructSparkLopsMapMMChain(ChainType chain) throws LopsException, HopsException {
    MapMultChain mapmmchain = null;
    if (chain == ChainType.XtXv) {
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hv = getInput().get(1).getInput().get(1);
        mapmmchain = new MapMultChain(hX.constructLops(), hv.constructLops(), getDataType(), getValueType(), ExecType.SPARK);
    } else {
        //ChainType.XtwXv / ChainType.XtXvy
        int wix = (chain == ChainType.XtwXv) ? 0 : 1;
        int vix = (chain == ChainType.XtwXv) ? 1 : 0;
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hw = getInput().get(1).getInput().get(wix);
        Hop hv = getInput().get(1).getInput().get(vix).getInput().get(1);
        mapmmchain = new MapMultChain(hX.constructLops(), hv.constructLops(), hw.constructLops(), chain, getDataType(), getValueType(), ExecType.SPARK);
    }
    setOutputDimensions(mapmmchain);
    setLineNumbers(mapmmchain);
    setLops(mapmmchain);
}
Also used : MultiThreadedHop(org.apache.sysml.hops.Hop.MultiThreadedHop) MapMultChain(org.apache.sysml.lops.MapMultChain)

Example 2 with MapMultChain

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

the class AggBinaryOp method constructMRLopsMapMMChain.

private void constructMRLopsMapMMChain(ChainType chainType) throws HopsException, LopsException {
    Lop mapmult = null;
    if (chainType == ChainType.XtXv) {
        //v never needs partitioning because always single block
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hv = getInput().get(1).getInput().get(1);
        //core matrix mult
        mapmult = new MapMultChain(hX.constructLops(), hv.constructLops(), getDataType(), getValueType(), ExecType.MR);
        mapmult.getOutputParameters().setDimensions(getDim1(), getDim2(), getRowsInBlock(), getColsInBlock(), getNnz());
        setLineNumbers(mapmult);
    } else //ChainType.XtwXv / ChainType.XtXvy
    {
        //v never needs partitioning because always single block
        int wix = (chainType == ChainType.XtwXv) ? 0 : 1;
        int vix = (chainType == ChainType.XtwXv) ? 1 : 0;
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hw = getInput().get(1).getInput().get(wix);
        Hop hv = getInput().get(1).getInput().get(vix).getInput().get(1);
        double mestW = OptimizerUtils.estimateSize(hw.getDim1(), hw.getDim2());
        boolean needPart = !hw.dimsKnown() || hw.getDim1() * hw.getDim2() > DistributedCacheInput.PARTITION_SIZE;
        Lop X = hX.constructLops(), v = hv.constructLops(), w = null;
        if (needPart) {
            //requires partitioning
            w = new DataPartition(hw.constructLops(), DataType.MATRIX, ValueType.DOUBLE, (mestW > OptimizerUtils.getLocalMemBudget()) ? ExecType.MR : ExecType.CP, PDataPartitionFormat.ROW_BLOCK_WISE_N);
            w.getOutputParameters().setDimensions(hw.getDim1(), hw.getDim2(), getRowsInBlock(), getColsInBlock(), hw.getNnz());
            setLineNumbers(w);
        } else
            w = hw.constructLops();
        //core matrix mult
        mapmult = new MapMultChain(X, v, w, chainType, getDataType(), getValueType(), ExecType.MR);
        mapmult.getOutputParameters().setDimensions(getDim1(), getDim2(), getRowsInBlock(), getColsInBlock(), getNnz());
        setLineNumbers(mapmult);
    }
    //post aggregation
    Group grp = new Group(mapmult, Group.OperationTypes.Sort, getDataType(), getValueType());
    grp.getOutputParameters().setDimensions(getDim1(), getDim2(), getRowsInBlock(), getColsInBlock(), getNnz());
    Aggregate agg1 = new Aggregate(grp, HopsAgg2Lops.get(outerOp), getDataType(), getValueType(), ExecType.MR);
    agg1.getOutputParameters().setDimensions(getDim1(), getDim2(), getRowsInBlock(), getColsInBlock(), getNnz());
    // aggregation uses kahanSum 
    agg1.setupCorrectionLocation(CorrectionLocationType.NONE);
    setLineNumbers(agg1);
    setLops(agg1);
}
Also used : Group(org.apache.sysml.lops.Group) MultiThreadedHop(org.apache.sysml.hops.Hop.MultiThreadedHop) Lop(org.apache.sysml.lops.Lop) Aggregate(org.apache.sysml.lops.Aggregate) DataPartition(org.apache.sysml.lops.DataPartition) MapMultChain(org.apache.sysml.lops.MapMultChain)

Example 3 with MapMultChain

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

the class AggBinaryOp method constructCPLopsMMChain.

private void constructCPLopsMMChain(ChainType chain) throws LopsException, HopsException {
    MapMultChain mapmmchain = null;
    if (chain == ChainType.XtXv) {
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hv = getInput().get(1).getInput().get(1);
        mapmmchain = new MapMultChain(hX.constructLops(), hv.constructLops(), getDataType(), getValueType(), ExecType.CP);
    } else {
        //ChainType.XtwXv / ChainType.XtwXvy
        int wix = (chain == ChainType.XtwXv) ? 0 : 1;
        int vix = (chain == ChainType.XtwXv) ? 1 : 0;
        Hop hX = getInput().get(0).getInput().get(0);
        Hop hw = getInput().get(1).getInput().get(wix);
        Hop hv = getInput().get(1).getInput().get(vix).getInput().get(1);
        mapmmchain = new MapMultChain(hX.constructLops(), hv.constructLops(), hw.constructLops(), chain, getDataType(), getValueType(), ExecType.CP);
    }
    //set degree of parallelism
    int k = OptimizerUtils.getConstrainedNumThreads(_maxNumThreads);
    mapmmchain.setNumThreads(k);
    //set basic lop properties
    setOutputDimensions(mapmmchain);
    setLineNumbers(mapmmchain);
    setLops(mapmmchain);
}
Also used : MultiThreadedHop(org.apache.sysml.hops.Hop.MultiThreadedHop) MapMultChain(org.apache.sysml.lops.MapMultChain)

Aggregations

MultiThreadedHop (org.apache.sysml.hops.Hop.MultiThreadedHop)3 MapMultChain (org.apache.sysml.lops.MapMultChain)3 Aggregate (org.apache.sysml.lops.Aggregate)1 DataPartition (org.apache.sysml.lops.DataPartition)1 Group (org.apache.sysml.lops.Group)1 Lop (org.apache.sysml.lops.Lop)1