Search in sources :

Example 6 with ResultVar

use of org.apache.sysml.parser.ParForStatementBlock.ResultVar in project incubator-systemml by apache.

the class OptimizerRuleBased method rewriteRemoveUnnecessaryCompareMatrix.

// /////
// REWRITE remove compare matrix (for result merge, needs to be invoked before setting result merge)
// /
protected void rewriteRemoveUnnecessaryCompareMatrix(OptNode n, ExecutionContext ec) {
    ParForProgramBlock pfpb = (ParForProgramBlock) OptTreeConverter.getAbstractPlanMapping().getMappedProg(n.getID())[1];
    ArrayList<ResultVar> cleanedVars = new ArrayList<>();
    ArrayList<ResultVar> resultVars = pfpb.getResultVariables();
    String itervar = pfpb.getIterVar();
    for (ResultVar rvar : resultVars) {
        Data dat = ec.getVariable(rvar._name);
        if (// subject to result merge with compare
        dat instanceof MatrixObject && ((MatrixObject) dat).getNnz() != 0 && // guaranteed no conditional indexing
        n.hasOnlySimpleChilds() && // guaranteed full matrix replace
        rContainsResultFullReplace(n, rvar._name, itervar, (MatrixObject) dat) && // && !pfsb.variablesRead().containsVariable(rvar)                  //never read variable in loop body
        !// never read variable in loop body
        rIsReadInRightIndexing(n, rvar._name) && ((MatrixObject) dat).getNumRows() <= Integer.MAX_VALUE && ((MatrixObject) dat).getNumColumns() <= Integer.MAX_VALUE) {
            // replace existing matrix object with empty matrix
            MatrixObject mo = (MatrixObject) dat;
            ec.cleanupCacheableData(mo);
            ec.setMatrixOutput(rvar._name, new MatrixBlock((int) mo.getNumRows(), (int) mo.getNumColumns(), false), null);
            // keep track of cleaned result variables
            cleanedVars.add(rvar);
        }
    }
    _numEvaluatedPlans++;
    LOG.debug(getOptMode() + " OPT: rewrite 'remove unnecessary compare matrix' - result=" + (!cleanedVars.isEmpty()) + " (" + ProgramConverter.serializeResultVariables(cleanedVars) + ")");
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) MatrixObject(org.apache.sysml.runtime.controlprogram.caching.MatrixObject) ResultVar(org.apache.sysml.parser.ParForStatementBlock.ResultVar) ArrayList(java.util.ArrayList) Data(org.apache.sysml.runtime.instructions.cp.Data) ParForProgramBlock(org.apache.sysml.runtime.controlprogram.ParForProgramBlock)

Example 7 with ResultVar

use of org.apache.sysml.parser.ParForStatementBlock.ResultVar in project incubator-systemml by apache.

the class OptimizerRuleBased method determineFlagCellFormatWoCompare.

protected boolean determineFlagCellFormatWoCompare(ArrayList<ResultVar> resultVars, LocalVariableMap vars) {
    boolean ret = true;
    for (ResultVar rVar : resultVars) {
        Data dat = vars.get(rVar._name);
        if (dat == null || !(dat instanceof MatrixObject)) {
            ret = false;
            break;
        } else {
            MatrixObject mo = (MatrixObject) dat;
            MetaDataFormat meta = (MetaDataFormat) mo.getMetaData();
            OutputInfo oi = meta.getOutputInfo();
            long nnz = meta.getMatrixCharacteristics().getNonZeros();
            if (oi == OutputInfo.BinaryBlockOutputInfo || nnz != 0) {
                ret = false;
                break;
            }
        }
    }
    return ret;
}
Also used : OutputInfo(org.apache.sysml.runtime.matrix.data.OutputInfo) MetaDataFormat(org.apache.sysml.runtime.matrix.MetaDataFormat) MatrixObject(org.apache.sysml.runtime.controlprogram.caching.MatrixObject) ResultVar(org.apache.sysml.parser.ParForStatementBlock.ResultVar) Data(org.apache.sysml.runtime.instructions.cp.Data)

Example 8 with ResultVar

use of org.apache.sysml.parser.ParForStatementBlock.ResultVar in project incubator-systemml by apache.

the class ProgramConverter method parseParForBody.

// //////////////////////////////
// PARSING
// //////////////////////////////
public static ParForBody parseParForBody(String in, int id) {
    ParForBody body = new ParForBody();
    // header elimination
    // normalization
    String tmpin = in.replaceAll(NEWLINE, "");
    // remove start/end
    tmpin = tmpin.substring(PARFORBODY_BEGIN.length(), tmpin.length() - PARFORBODY_END.length());
    HierarchyAwareStringTokenizer st = new HierarchyAwareStringTokenizer(tmpin, COMPONENTS_DELIM);
    // handle DMLScript UUID (NOTE: set directly in DMLScript)
    // (master UUID is used for all nodes (in order to simply cleanup))
    DMLScript.setUUID(st.nextToken());
    // handle DML config (NOTE: set directly in ConfigurationManager)
    String confStr = st.nextToken();
    JobConf job = ConfigurationManager.getCachedJobConf();
    if (!InfrastructureAnalyzer.isLocalMode(job)) {
        if (confStr != null && !confStr.trim().isEmpty()) {
            DMLConfig dmlconf = DMLConfig.parseDMLConfig(confStr);
            CompilerConfig cconf = OptimizerUtils.constructCompilerConfig(dmlconf);
            ConfigurationManager.setLocalConfig(dmlconf);
            ConfigurationManager.setLocalConfig(cconf);
        }
        // init internal configuration w/ parsed or default config
        ParForProgramBlock.initInternalConfigurations(ConfigurationManager.getDMLConfig());
    }
    // handle additional configs
    String aconfs = st.nextToken();
    parseAndSetAdditionalConfigurations(aconfs);
    // handle program
    String progStr = st.nextToken();
    Program prog = parseProgram(progStr, id);
    // handle result variable names
    String rvarStr = st.nextToken();
    ArrayList<ResultVar> rvars = parseResultVariables(rvarStr);
    body.setResultVariables(rvars);
    // handle execution context
    String ecStr = st.nextToken();
    ExecutionContext ec = parseExecutionContext(ecStr, prog);
    // handle program blocks
    String spbs = st.nextToken();
    ArrayList<ProgramBlock> pbs = rParseProgramBlocks(spbs, prog, id);
    body.setChildBlocks(pbs);
    body.setEc(ec);
    return body;
}
Also used : DMLConfig(org.apache.sysml.conf.DMLConfig) DMLProgram(org.apache.sysml.parser.DMLProgram) Program(org.apache.sysml.runtime.controlprogram.Program) ExecutionContext(org.apache.sysml.runtime.controlprogram.context.ExecutionContext) ResultVar(org.apache.sysml.parser.ParForStatementBlock.ResultVar) FunctionProgramBlock(org.apache.sysml.runtime.controlprogram.FunctionProgramBlock) WhileProgramBlock(org.apache.sysml.runtime.controlprogram.WhileProgramBlock) ExternalFunctionProgramBlock(org.apache.sysml.runtime.controlprogram.ExternalFunctionProgramBlock) ForProgramBlock(org.apache.sysml.runtime.controlprogram.ForProgramBlock) IfProgramBlock(org.apache.sysml.runtime.controlprogram.IfProgramBlock) ProgramBlock(org.apache.sysml.runtime.controlprogram.ProgramBlock) ParForProgramBlock(org.apache.sysml.runtime.controlprogram.ParForProgramBlock) JobConf(org.apache.hadoop.mapred.JobConf) CompilerConfig(org.apache.sysml.conf.CompilerConfig)

Example 9 with ResultVar

use of org.apache.sysml.parser.ParForStatementBlock.ResultVar in project incubator-systemml by apache.

the class ProgramConverter method serializeParForBody.

public static String serializeParForBody(ParForBody body, HashMap<String, byte[]> clsMap) {
    ArrayList<ProgramBlock> pbs = body.getChildBlocks();
    ArrayList<ResultVar> rVnames = body.getResultVariables();
    ExecutionContext ec = body.getEc();
    if (pbs.isEmpty())
        return PARFORBODY_BEGIN + PARFORBODY_END;
    Program prog = pbs.get(0).getProgram();
    StringBuilder sb = new StringBuilder();
    sb.append(PARFORBODY_BEGIN);
    sb.append(NEWLINE);
    // handle DMLScript UUID (propagate original uuid for writing to scratch space)
    sb.append(DMLScript.getUUID());
    sb.append(COMPONENTS_DELIM);
    sb.append(NEWLINE);
    // handle DML config
    sb.append(ConfigurationManager.getDMLConfig().serializeDMLConfig());
    sb.append(COMPONENTS_DELIM);
    sb.append(NEWLINE);
    // handle additional configurations
    sb.append(PARFOR_CONF_STATS + "=" + DMLScript.STATISTICS);
    sb.append(COMPONENTS_DELIM);
    sb.append(NEWLINE);
    // handle program
    sb.append(PARFOR_PROG_BEGIN);
    sb.append(NEWLINE);
    sb.append(serializeProgram(prog, pbs, clsMap));
    sb.append(PARFOR_PROG_END);
    sb.append(NEWLINE);
    sb.append(COMPONENTS_DELIM);
    sb.append(NEWLINE);
    // handle result variable names
    sb.append(serializeResultVariables(rVnames));
    sb.append(COMPONENTS_DELIM);
    // handle execution context
    // note: this includes also the symbol table (serialize only the top-level variable map,
    // (symbol tables for nested/child blocks are created at parse time, on the remote side)
    sb.append(PARFOR_EC_BEGIN);
    sb.append(serializeExecutionContext(ec));
    sb.append(PARFOR_EC_END);
    sb.append(NEWLINE);
    sb.append(COMPONENTS_DELIM);
    sb.append(NEWLINE);
    // handle program blocks -- ONLY instructions, not variables.
    sb.append(PARFOR_PBS_BEGIN);
    sb.append(NEWLINE);
    sb.append(rSerializeProgramBlocks(pbs, clsMap));
    sb.append(PARFOR_PBS_END);
    sb.append(NEWLINE);
    sb.append(PARFORBODY_END);
    return sb.toString();
}
Also used : ExecutionContext(org.apache.sysml.runtime.controlprogram.context.ExecutionContext) DMLProgram(org.apache.sysml.parser.DMLProgram) Program(org.apache.sysml.runtime.controlprogram.Program) ResultVar(org.apache.sysml.parser.ParForStatementBlock.ResultVar) FunctionProgramBlock(org.apache.sysml.runtime.controlprogram.FunctionProgramBlock) WhileProgramBlock(org.apache.sysml.runtime.controlprogram.WhileProgramBlock) ExternalFunctionProgramBlock(org.apache.sysml.runtime.controlprogram.ExternalFunctionProgramBlock) ForProgramBlock(org.apache.sysml.runtime.controlprogram.ForProgramBlock) IfProgramBlock(org.apache.sysml.runtime.controlprogram.IfProgramBlock) ProgramBlock(org.apache.sysml.runtime.controlprogram.ProgramBlock) ParForProgramBlock(org.apache.sysml.runtime.controlprogram.ParForProgramBlock)

Example 10 with ResultVar

use of org.apache.sysml.parser.ParForStatementBlock.ResultVar in project incubator-systemml by apache.

the class ProgramConverter method rParseParForProgramBlock.

private static ParForProgramBlock rParseParForProgramBlock(String in, Program prog, int id) {
    String lin = in.substring(PARFOR_PB_PARFOR.length(), in.length() - PARFOR_PB_END.length());
    HierarchyAwareStringTokenizer st = new HierarchyAwareStringTokenizer(lin, COMPONENTS_DELIM);
    // inputs
    String iterVar = st.nextToken();
    ArrayList<ResultVar> resultVars = parseResultVariables(st.nextToken());
    HashMap<String, String> params = parseStringHashMap(st.nextToken());
    // instructions
    ArrayList<Instruction> from = parseInstructions(st.nextToken(), 0);
    ArrayList<Instruction> to = parseInstructions(st.nextToken(), 0);
    ArrayList<Instruction> incr = parseInstructions(st.nextToken(), 0);
    // exit instructions
    ArrayList<Instruction> exit = parseInstructions(st.nextToken(), 0);
    // program blocks //reset id to preinit state, replaced during exec
    ArrayList<ProgramBlock> pbs = rParseProgramBlocks(st.nextToken(), prog, 0);
    ParForProgramBlock pfpb = new ParForProgramBlock(id, prog, iterVar, params, resultVars);
    // already done in top-level parfor
    pfpb.disableOptimization();
    pfpb.setFromInstructions(from);
    pfpb.setToInstructions(to);
    pfpb.setIncrementInstructions(incr);
    pfpb.setExitInstructions(exit);
    pfpb.setChildBlocks(pbs);
    return pfpb;
}
Also used : ResultVar(org.apache.sysml.parser.ParForStatementBlock.ResultVar) FunctionProgramBlock(org.apache.sysml.runtime.controlprogram.FunctionProgramBlock) WhileProgramBlock(org.apache.sysml.runtime.controlprogram.WhileProgramBlock) ExternalFunctionProgramBlock(org.apache.sysml.runtime.controlprogram.ExternalFunctionProgramBlock) ForProgramBlock(org.apache.sysml.runtime.controlprogram.ForProgramBlock) IfProgramBlock(org.apache.sysml.runtime.controlprogram.IfProgramBlock) ProgramBlock(org.apache.sysml.runtime.controlprogram.ProgramBlock) ParForProgramBlock(org.apache.sysml.runtime.controlprogram.ParForProgramBlock) GPUInstruction(org.apache.sysml.runtime.instructions.gpu.GPUInstruction) MRJobInstruction(org.apache.sysml.runtime.instructions.MRJobInstruction) CPInstruction(org.apache.sysml.runtime.instructions.cp.CPInstruction) ExternalFunctionInvocationInstruction(org.apache.sysml.udf.ExternalFunctionInvocationInstruction) SpoofCPInstruction(org.apache.sysml.runtime.instructions.cp.SpoofCPInstruction) Instruction(org.apache.sysml.runtime.instructions.Instruction) SPInstruction(org.apache.sysml.runtime.instructions.spark.SPInstruction) VariableCPInstruction(org.apache.sysml.runtime.instructions.cp.VariableCPInstruction) FunctionCallCPInstruction(org.apache.sysml.runtime.instructions.cp.FunctionCallCPInstruction) MRInstruction(org.apache.sysml.runtime.instructions.mr.MRInstruction) ParForProgramBlock(org.apache.sysml.runtime.controlprogram.ParForProgramBlock)

Aggregations

ResultVar (org.apache.sysml.parser.ParForStatementBlock.ResultVar)14 MatrixObject (org.apache.sysml.runtime.controlprogram.caching.MatrixObject)8 Data (org.apache.sysml.runtime.instructions.cp.Data)8 ParForProgramBlock (org.apache.sysml.runtime.controlprogram.ParForProgramBlock)5 ArrayList (java.util.ArrayList)3 ExternalFunctionProgramBlock (org.apache.sysml.runtime.controlprogram.ExternalFunctionProgramBlock)3 ForProgramBlock (org.apache.sysml.runtime.controlprogram.ForProgramBlock)3 FunctionProgramBlock (org.apache.sysml.runtime.controlprogram.FunctionProgramBlock)3 IfProgramBlock (org.apache.sysml.runtime.controlprogram.IfProgramBlock)3 ProgramBlock (org.apache.sysml.runtime.controlprogram.ProgramBlock)3 WhileProgramBlock (org.apache.sysml.runtime.controlprogram.WhileProgramBlock)3 HashSet (java.util.HashSet)2 DMLProgram (org.apache.sysml.parser.DMLProgram)2 Program (org.apache.sysml.runtime.controlprogram.Program)2 CacheableData (org.apache.sysml.runtime.controlprogram.caching.CacheableData)2 ExecutionContext (org.apache.sysml.runtime.controlprogram.context.ExecutionContext)2 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 LongWritable (org.apache.hadoop.io.LongWritable)1 Text (org.apache.hadoop.io.Text)1