Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,29 @@ public MatrixBlock apply(CacheBlock in, MatrixBlock out, int outputCol, int rowS
protected abstract double[] getCodeCol(CacheBlock in, int startInd, int blkSize);


protected void applySparse(CacheBlock in, MatrixBlock out, int outputCol, int rowStart, int blk){
/*protected void applySparse(CacheBlock in, MatrixBlock out, int outputCol, int rowStart, int blk){
int index = _colID - 1;
for(int r = rowStart; r < getEndIndex(in.getNumRows(), rowStart, blk); r++) {
SparseRowVector row = (SparseRowVector) out.getSparseBlock().get(r);
row.values()[index] = getCode(in, r);
row.indexes()[index] = outputCol;
}
}*/

protected void applySparse(CacheBlock in, MatrixBlock out, int outputCol, int rowStart, int blk){
int index = _colID - 1;
// Apply loop tiling to exploit CPU caches
double[] codes = getCodeCol(in, rowStart, blk);
int rowEnd = getEndIndex(in.getNumRows(), rowStart, blk);
int B = 32; //tile size
for(int i = rowStart; i < rowEnd; i+=B) {
int lim = Math.min(i+B, rowEnd);
for (int ii=i; ii<lim; ii++) {
SparseRowVector row = (SparseRowVector) out.getSparseBlock().get(ii);
row.values()[index] = codes[ii-rowStart];
row.indexes()[index] = outputCol;
}
}
}

/*protected void applyDense(CacheBlock in, MatrixBlock out, int outputCol, int rowStart, int blk){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,28 @@ protected void applyDense(CacheBlock in, MatrixBlock out, int outputCol, int row
throw new DMLRuntimeException("ColumnEncoderDummycode called with: " + in.getClass().getSimpleName() +
" and not MatrixBlock");
}
for(int i = rowStart; i < getEndIndex(in.getNumRows(), rowStart, blk); i++) {
// Using outputCol here as index since we have a MatrixBlock as input where dummycoding could have been
// applied in a previous encoder
double val = in.getDouble(i, outputCol);
if(Double.isNaN(val)){
// 0 if NaN
out.quickSetValue(i, outputCol, 0);
continue;
int rowEnd = getEndIndex(in.getNumRows(), rowStart, blk);
double vals[] = new double[rowEnd -rowStart];
for (int i=rowStart; i<rowEnd; i++)
vals[i-rowStart] = in.getDouble(i, outputCol);

// Using outputCol here as index since we have a MatrixBlock as input where
// dummycoding might have been applied in a previous encoder
int B = 32;
for(int i=rowStart; i<rowEnd; i+=B) {
// Apply loop tiling to exploit CPU caches
int lim = Math.min(i+B, rowEnd);
for (int ii=i; ii<lim; ii++) {
double val = vals[ii-rowStart];
if(Double.isNaN(val)) {
out.quickSetValue(ii, outputCol, 0); //0 if NaN
continue;
}
int nCol = outputCol + (int) val - 1;
if(nCol != outputCol)
out.quickSetValue(ii, outputCol, 0);
out.quickSetValue(ii, nCol, 1);
}
int nCol = outputCol + (int) val - 1;
if(nCol != outputCol)
out.quickSetValue(i, outputCol, 0);
out.quickSetValue(i, nCol, 1);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,23 @@ protected double[] getCodeCol(CacheBlock in, int startInd, int blkSize) {
protected void applySparse(CacheBlock in, MatrixBlock out, int outputCol, int rowStart, int blk){
Set<Integer> sparseRowsWZeros = null;
int index = _colID - 1;
for(int r = rowStart; r < getEndIndex(in.getNumRows(), rowStart, blk); r++) {
double v = getCode(in, r);
SparseRowVector row = (SparseRowVector) out.getSparseBlock().get(r);
if(v == 0) {
if(sparseRowsWZeros == null)
sparseRowsWZeros = new HashSet<>();
sparseRowsWZeros.add(r);
// Apply loop tiling to exploit CPU caches
double[] codes = getCodeCol(in, rowStart, blk);
int rowEnd = getEndIndex(in.getNumRows(), rowStart, blk);
int B = 32; //tile size
for(int i = rowStart; i < rowEnd; i+=B) {
int lim = Math.min(i+B, rowEnd);
for (int ii=i; ii<lim; ii++) {
double v = codes[ii-rowStart];
SparseRowVector row = (SparseRowVector) out.getSparseBlock().get(ii);
if(v == 0) {
if(sparseRowsWZeros == null)
sparseRowsWZeros = new HashSet<>();
sparseRowsWZeros.add(ii);
}
row.values()[index] = v;
row.indexes()[index] = outputCol;
}
row.values()[index] = v;
row.indexes()[index] = outputCol;
}
if(sparseRowsWZeros != null){
addSparseRowsWZeros(sparseRowsWZeros);
Expand Down