All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.sysml.lops.LopProperties Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.apache.sysml.lops;

import java.util.ArrayList;

import org.apache.sysml.lops.compile.JobType;
import org.apache.sysml.runtime.controlprogram.parfor.util.IDSequence;

public class LopProperties 
{
	/**
	 * Execution types:
	 *
	 * 
    *
  • CP - Control Program (single JVM)
  • *
  • CP_FILE - ?
  • *
  • MR - Apache Hadoop
  • *
  • SPARK - Apache Spark
  • *
  • GPU - Execute on a GPU
  • *
  • INVALID - Invalid execution type
  • *
* */ public enum ExecType { CP, CP_FILE, MR, SPARK, GPU, INVALID } public enum ExecLocation {INVALID, RecordReader, Map, MapOrReduce, MapAndReduce, Reduce, Data, ControlProgram } // static variable to assign an unique ID to every lop that is created private static IDSequence UniqueLopID = null; static{ UniqueLopID = new IDSequence(); } /** * Execution properties for each lop. * * execLoc = in case execType=MR, where does this lop must run in a job (map, reduce, etc.) * compatibleJobs = list of job types in which this lop can be run. It is maintained as a bit vector. * breaksAlignment = does this lop alters the keys ? * isAligner = is this lop mainly used to reorder/sort/align the keys * */ long ID; int level; ExecType execType; ExecLocation execLoc; int compatibleJobs; boolean breaksAlignment; boolean isAligner; boolean definesMRJob; boolean producesIntermediateOutput; public LopProperties() { ID = UniqueLopID.getNextID(); execType = ExecType.INVALID; execLoc = ExecLocation.INVALID; compatibleJobs = JobType.INVALID.getBase(); breaksAlignment = true; isAligner = false; definesMRJob = false; producesIntermediateOutput = false; } public long getID() { return ID; } public int getLevel() { return level; } public void setLevel( int l ) { level = l; } public ExecLocation getExecLocation() { return execLoc; } public ExecType getExecType() { return execType; } public int getCompatibleJobs() { return compatibleJobs; } public boolean getBreaksAlignment() { return breaksAlignment; } public boolean getDefinesMRJob() { return definesMRJob; } public boolean isAligner() { return isAligner; } public boolean getProducesIntermediateOutput() { return producesIntermediateOutput; } public void setExecLocation(ExecLocation el) { execLoc = el; } public void addCompatibility ( JobType jt ) { compatibleJobs = compatibleJobs | jt.getBase(); } public void removeCompatibility ( JobType jt ) { compatibleJobs = compatibleJobs ^ jt.getBase(); } public void removeNonPiggybackableJobs() { // Remove compatibility with those jobs which do not allow any "other" instructions for ( JobType jt : JobType.values()) { if(jt.allowsNoOtherInstructions()) { compatibleJobs = compatibleJobs ^ jt.getBase(); } } } public void setCompatibleJobs(int cj) { compatibleJobs = cj; } public void setDefinesMRJob(boolean dmrj) { definesMRJob = dmrj; } public void setBreaksAlignment(boolean ba) { breaksAlignment = ba; } public void setAligner(boolean align) { isAligner = align; } public void setProducesIntermediateOutput(boolean pio) { producesIntermediateOutput = pio; } /* * Function to compute the node level in the entire Lops DAG. * level(v) = max( levels(v.inputs) ) + 1 */ public void setLevel(ArrayList inputs) { int tmplevel = -1; if ( inputs == null || inputs.isEmpty() ) tmplevel = 0; else { // find the max level among all inputs for(Lop in : inputs) { if(tmplevel < in.getLevel() ) { tmplevel = in.getLevel(); } } // this.level should be one more than the max tmplevel = tmplevel+1; } setLevel(tmplevel); } public void setProperties ( ArrayList inputs, ExecType et, ExecLocation el, boolean ba, boolean aligner, boolean definesMR ) { execType = et; execLoc = el; breaksAlignment = ba; isAligner = aligner; definesMRJob = definesMR; setLevel(inputs); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy