use of org.apache.sysml.runtime.instructions.cp.Data in project incubator-systemml by apache.
the class ParForProgramBlock method createEmptyUnscopedVariables.
/**
* Create empty matrix objects and scalars for all unscoped vars
* (created within the parfor).
*
* NOTE: parfor gives no guarantees on the values of those objects - hence
* we return -1 for sclars and empty matrix objects.
*
* @param out local variable map
* @param sb statement block
*/
private static void createEmptyUnscopedVariables(LocalVariableMap out, StatementBlock sb) {
VariableSet updated = sb.variablesUpdated();
VariableSet livein = sb.liveIn();
// for all vars IN <updated> AND NOT IN <livein>
for (String var : updated.getVariableNames()) if (!livein.containsVariable(var)) {
// create empty output
DataIdentifier dat = updated.getVariable(var);
DataType datatype = dat.getDataType();
ValueType valuetype = dat.getValueType();
Data dataObj = null;
switch(datatype) {
case SCALAR:
switch(valuetype) {
case BOOLEAN:
dataObj = new BooleanObject(false);
break;
case INT:
dataObj = new IntObject(-1);
break;
case DOUBLE:
dataObj = new DoubleObject(-1d);
break;
case STRING:
dataObj = new StringObject("-1");
break;
default:
throw new DMLRuntimeException("Value type not supported: " + valuetype);
}
break;
case MATRIX:
case FRAME:
// because metadata (e.g., outputinfo) not known at this place.
break;
case UNKNOWN:
break;
default:
throw new DMLRuntimeException("Data type not supported: " + datatype);
}
if (dataObj != null)
out.put(var, dataObj);
}
}
use of org.apache.sysml.runtime.instructions.cp.Data in project incubator-systemml by apache.
the class ProgramBlock method checkSparsity.
private static void checkSparsity(Instruction lastInst, LocalVariableMap vars) {
for (String varname : vars.keySet()) {
Data dat = vars.get(varname);
if (dat instanceof MatrixObject) {
MatrixObject mo = (MatrixObject) dat;
if (mo.isDirty() && !mo.isPartitioned()) {
MatrixBlock mb = mo.acquireRead();
boolean sparse1 = mb.isInSparseFormat();
long nnz1 = mb.getNonZeros();
synchronized (mb) {
// potential state change
mb.recomputeNonZeros();
mb.examSparsity();
}
if (mb.isInSparseFormat() && mb.isAllocated()) {
mb.getSparseBlock().checkValidity(mb.getNumRows(), mb.getNumColumns(), mb.getNonZeros(), true);
}
boolean sparse2 = mb.isInSparseFormat();
long nnz2 = mb.getNonZeros();
mo.release();
if (nnz1 != nnz2)
throw new DMLRuntimeException("Matrix nnz meta data was incorrect: (" + varname + ", actual=" + nnz1 + ", expected=" + nnz2 + ", inst=" + lastInst + ")");
if (sparse1 != sparse2 && mb.isAllocated())
throw new DMLRuntimeException("Matrix was in wrong data representation: (" + varname + ", actual=" + sparse1 + ", expected=" + sparse2 + ", nrow=" + mb.getNumRows() + ", ncol=" + mb.getNumColumns() + ", nnz=" + nnz1 + ", inst=" + lastInst + ")");
}
}
}
}
use of org.apache.sysml.runtime.instructions.cp.Data in project incubator-systemml by apache.
the class CostEstimator method maintainVariableStatistics.
private static void maintainVariableStatistics(LocalVariableMap vars, HashMap<String, VarStats> stats) {
for (String varname : vars.keySet()) {
Data dat = vars.get(varname);
VarStats vs = null;
if (// matrix
dat instanceof MatrixObject) {
MatrixObject mo = (MatrixObject) dat;
MatrixCharacteristics mc = mo.getMatrixCharacteristics();
long rlen = mc.getRows();
long clen = mc.getCols();
int brlen = mc.getRowsPerBlock();
int bclen = mc.getColsPerBlock();
long nnz = mc.getNonZeros();
boolean inmem = mo.getStatusAsString().equals("CACHED");
vs = new VarStats(rlen, clen, brlen, bclen, nnz, inmem);
} else // scalar
{
vs = _scalarStats;
}
stats.put(varname, vs);
}
}
use of org.apache.sysml.runtime.instructions.cp.Data in project incubator-systemml by apache.
the class PreparedScript method executeScript.
/**
* Executes the prepared script over the bound inputs, creating the
* result variables according to bound and registered outputs.
*
* @return ResultVariables object encapsulating output results
*/
public ResultVariables executeScript() {
// add reused variables
_vars.putAll(_inVarReuse);
// set thread-local configurations
ConfigurationManager.setLocalConfig(_dmlconf);
ConfigurationManager.setLocalConfig(_cconf);
// create and populate execution context
ExecutionContext ec = ExecutionContextFactory.createContext(_vars, _prog);
// core execute runtime program
_prog.execute(ec);
// cleanup unnecessary outputs
_vars.removeAllNotIn(_outVarnames);
// construct results
ResultVariables rvars = new ResultVariables();
for (String ovar : _outVarnames) {
Data tmpVar = _vars.get(ovar);
if (tmpVar != null)
rvars.addResult(ovar, tmpVar);
}
// clear thread-local configurations
ConfigurationManager.clearLocalConfigs();
return rvars;
}
use of org.apache.sysml.runtime.instructions.cp.Data in project incubator-systemml by apache.
the class ResultVariables method getMatrixBlock.
/**
* Obtain the matrix represented by the given output variable.
* Calling this method avoids unnecessary output conversions.
*
* @param varname output variable name
* @return matrix as matrix block
*/
public MatrixBlock getMatrixBlock(String varname) {
Data dat = _out.get(varname);
if (dat == null)
throw new DMLException("Non-existent output variable: " + varname);
// basic checks for data type
if (!(dat instanceof MatrixObject))
throw new DMLException("Expected matrix result '" + varname + "' not a matrix.");
// convert output matrix to double array
MatrixObject mo = (MatrixObject) dat;
MatrixBlock mb = mo.acquireRead();
mo.release();
return mb;
}
Aggregations