Baunsgaard commented on a change in pull request #1219:
URL: https://github.com/apache/systemds/pull/1219#discussion_r613148938
##########
File path:
src/main/java/org/apache/sysds/runtime/instructions/fed/IndexingFEDInstruction.java
##########
@@ -171,4 +190,110 @@ private void rightIndexing(ExecutionContext ec)
out.setFedMapping(fedMap.copyWithNewID(fr1[0].getID()));
}
}
+
+ private void leftIndexing(ExecutionContext ec)
+ {
+ //get input and requested index range
+ CacheableData<?> in1 = ec.getCacheableData(input1);
+ CacheableData<?> in2 = ec.getCacheableData(input2);
+ IndexRange ixrange = getIndexRange(ec);
+
+ //check bounds
+ if( ixrange.rowStart < 0 || ixrange.rowStart >=
in1.getNumRows() || ixrange.rowEnd >= in1.getNumRows()
+ || ixrange.colStart < 0 || ixrange.colStart >=
in1.getNumColumns() || ixrange.colEnd >= in1.getNumColumns() ) {
+ throw new DMLRuntimeException("Invalid values for
matrix indexing: ["+(ixrange.rowStart+1)+":"+(ixrange.rowEnd+1)+","
+ +
(ixrange.colStart+1)+":"+(ixrange.colEnd+1)+"] " + "must be within matrix
dimensions ["+in1.getNumRows()+","+in1.getNumColumns()+"].");
+ }
+ if( (ixrange.rowEnd-ixrange.rowStart+1) != in2.getNumRows() ||
(ixrange.colEnd-ixrange.colStart+1) != in2.getNumColumns()) {
+ throw new DMLRuntimeException("Invalid values for
matrix indexing: " +
+ "dimensions of the source matrix
["+in2.getNumRows()+"x" + in2.getNumColumns() + "] " +
+ "do not match the shape of the matrix specified
by indices [" +
+ (ixrange.rowStart+1) +":" + (ixrange.rowEnd+1)
+ ", " + (ixrange.colStart+1) + ":" + (ixrange.colEnd+1) + "].");
+ }
+
+ FederationMap fedMap = in1.getFedMapping();
+
+ String[] instStrings = new String[fedMap.getSize()];
+ int[][] sliceIxs = new int[fedMap.getSize()][];
+ FederatedRange[] ranges = new FederatedRange[fedMap.getSize()];
+
+ // replace old reshape values for each worker
+ int i = 0, prev = 0, from = fedMap.getSize();
+ for(FederatedRange range : fedMap.getMap().keySet()) {
+ long rs = range.getBeginDims()[0], re =
range.getEndDims()[0],
+ cs = range.getBeginDims()[1], ce =
range.getEndDims()[1];
+ long rsn = (ixrange.rowStart >= rs) ? (ixrange.rowStart
- rs) : 0;
+ long ren = (ixrange.rowEnd >= rs && ixrange.rowEnd <
re) ? (ixrange.rowEnd - rs) : (re - rs - 1);
+ long csn = (ixrange.colStart >= cs) ? (ixrange.colStart
- cs) : 0;
+ long cen = (ixrange.colEnd >= cs && ixrange.colEnd <
ce) ? (ixrange.colEnd - cs) : (ce - cs - 1);
+
+ long[] newIx = new long[]{(int) rsn, (int) ren, (int)
csn, (int) cen};
+
+ // find ranges where to apply leftIndex
+ long to;
+ if(in1.isFederated(FederationMap.FType.ROW) && (to =
(prev + ren - rsn)) >= 0 &&
+ to < in2.getNumRows() &&
ixrange.rowStart <= re) {
+ sliceIxs[i] = new int[] { prev, (int)
to, 0, (int) in2.getNumColumns()-1};
+ prev = (int) (to + 1);
Review comment:
something has gone wrong with the indentation
##########
File path:
src/main/java/org/apache/sysds/runtime/instructions/fed/IndexingFEDInstruction.java
##########
@@ -171,4 +190,110 @@ private void rightIndexing(ExecutionContext ec)
out.setFedMapping(fedMap.copyWithNewID(fr1[0].getID()));
}
}
+
+ private void leftIndexing(ExecutionContext ec)
+ {
+ //get input and requested index range
+ CacheableData<?> in1 = ec.getCacheableData(input1);
+ CacheableData<?> in2 = ec.getCacheableData(input2);
+ IndexRange ixrange = getIndexRange(ec);
+
+ //check bounds
+ if( ixrange.rowStart < 0 || ixrange.rowStart >=
in1.getNumRows() || ixrange.rowEnd >= in1.getNumRows()
+ || ixrange.colStart < 0 || ixrange.colStart >=
in1.getNumColumns() || ixrange.colEnd >= in1.getNumColumns() ) {
+ throw new DMLRuntimeException("Invalid values for
matrix indexing: ["+(ixrange.rowStart+1)+":"+(ixrange.rowEnd+1)+","
+ +
(ixrange.colStart+1)+":"+(ixrange.colEnd+1)+"] " + "must be within matrix
dimensions ["+in1.getNumRows()+","+in1.getNumColumns()+"].");
+ }
+ if( (ixrange.rowEnd-ixrange.rowStart+1) != in2.getNumRows() ||
(ixrange.colEnd-ixrange.colStart+1) != in2.getNumColumns()) {
+ throw new DMLRuntimeException("Invalid values for
matrix indexing: " +
+ "dimensions of the source matrix
["+in2.getNumRows()+"x" + in2.getNumColumns() + "] " +
+ "do not match the shape of the matrix specified
by indices [" +
+ (ixrange.rowStart+1) +":" + (ixrange.rowEnd+1)
+ ", " + (ixrange.colStart+1) + ":" + (ixrange.colEnd+1) + "].");
+ }
+
+ FederationMap fedMap = in1.getFedMapping();
+
+ String[] instStrings = new String[fedMap.getSize()];
+ int[][] sliceIxs = new int[fedMap.getSize()][];
+ FederatedRange[] ranges = new FederatedRange[fedMap.getSize()];
+
+ // replace old reshape values for each worker
+ int i = 0, prev = 0, from = fedMap.getSize();
+ for(FederatedRange range : fedMap.getMap().keySet()) {
+ long rs = range.getBeginDims()[0], re =
range.getEndDims()[0],
+ cs = range.getBeginDims()[1], ce =
range.getEndDims()[1];
+ long rsn = (ixrange.rowStart >= rs) ? (ixrange.rowStart
- rs) : 0;
+ long ren = (ixrange.rowEnd >= rs && ixrange.rowEnd <
re) ? (ixrange.rowEnd - rs) : (re - rs - 1);
+ long csn = (ixrange.colStart >= cs) ? (ixrange.colStart
- cs) : 0;
+ long cen = (ixrange.colEnd >= cs && ixrange.colEnd <
ce) ? (ixrange.colEnd - cs) : (ce - cs - 1);
+
+ long[] newIx = new long[]{(int) rsn, (int) ren, (int)
csn, (int) cen};
+
+ // find ranges where to apply leftIndex
+ long to;
+ if(in1.isFederated(FederationMap.FType.ROW) && (to =
(prev + ren - rsn)) >= 0 &&
+ to < in2.getNumRows() &&
ixrange.rowStart <= re) {
+ sliceIxs[i] = new int[] { prev, (int)
to, 0, (int) in2.getNumColumns()-1};
+ prev = (int) (to + 1);
+
+ instStrings[i] = modifyIndices(newIx,
4, 8);
+ ranges[i] = range;
+ from = Math.min(i, from);
+ } else if(in1.isFederated(FederationMap.FType.COL) &&
(to = (prev + cen - csn)) >= 0 &&
+ to < in2.getNumColumns() &&
ixrange.colStart <= ce) {
+ sliceIxs[i] = new int[] {0, (int)
in2.getNumRows() - 1, prev, (int) to};
+ prev = (int) (to + 1);
+
+ instStrings[i] = modifyIndices(newIx,
4, 8);
+ ranges[i] = range;
+ from = Math.min(i, from);
+ } else
Review comment:
code style specifies newline before else after a }
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]