This is an automated email from the ASF dual-hosted git repository. baunsgaard pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/systemds.git
commit 451e84c538abf1f4bc274cdb2ee3388ea49915bf Author: baunsgaard <[email protected]> AuthorDate: Thu Oct 20 17:54:02 2022 +0200 [MINOR] Fix rand instruction to return empty matrix if sparsity == 0.0 Closes #1706 --- .../compress/colgroup/mapping/MapToBit.java | 12 -------- .../runtime/compress/utils/DoubleCountHashMap.java | 32 +--------------------- .../instructions/cp/DataGenCPInstruction.java | 7 +++-- 3 files changed, 6 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/apache/sysds/runtime/compress/colgroup/mapping/MapToBit.java b/src/main/java/org/apache/sysds/runtime/compress/colgroup/mapping/MapToBit.java index 4d06e1efd6..061b69f41e 100644 --- a/src/main/java/org/apache/sysds/runtime/compress/colgroup/mapping/MapToBit.java +++ b/src/main/java/org/apache/sysds/runtime/compress/colgroup/mapping/MapToBit.java @@ -385,16 +385,4 @@ public class MapToBit extends AMapToData { return new MapToBit(getUnique(), retBS, p); } - - private static String bl(long l) { - int lead = Long.numberOfLeadingZeros(l); - if(lead == 64) - return "0000000000000000000000000000000000000000000000000000000000000000"; - StringBuilder sb = new StringBuilder(64); - for(int i = 0; i < lead; i++) { - sb.append('0'); - } - sb.append(Long.toBinaryString(l)); - return sb.toString(); - } } diff --git a/src/main/java/org/apache/sysds/runtime/compress/utils/DoubleCountHashMap.java b/src/main/java/org/apache/sysds/runtime/compress/utils/DoubleCountHashMap.java index 4785c65cbf..ddf344c71d 100644 --- a/src/main/java/org/apache/sysds/runtime/compress/utils/DoubleCountHashMap.java +++ b/src/main/java/org/apache/sysds/runtime/compress/utils/DoubleCountHashMap.java @@ -231,39 +231,9 @@ public class DoubleCountHashMap { } private final int hashIndex(final double key) { - - // previous require pow2 size.: - // long bits = Double.doubleToRawLongBits(key); - // int h =(int)( bits ^ (bits >>> 32)); - // h = h ^ (h >>> 20) ^ (h >>> 12); - // h = h ^ (h >>> 7) ^ (h >>> 4); - // return h & (_data.length - 1); - // 100.809.414.955 instructions - // Option 1 ... conflict on 1 vs -1 - long bits = Double.doubleToLongBits(key); + final long bits = Double.doubleToLongBits(key); return Math.abs((int)(bits ^ (bits >>> 32)) % _data.length); - // 102.356.926.448 instructions - - // Option 2 - // long bits = Double.doubleToRawLongBits(key); - // return (int) ((bits ^ (bits >> 32) % _data.length)); - - - // basic double hash code (w/o object creation) - // return Double.hashCode(key) % _data.length; - // return (int) ((bits ^ (bits >>> 32)) % _data.length); - // long bits = Double.doubleToLongBits(key); - // return (int) Long.remainderUnsigned(bits, (long) _data.length); - // long bits = Double.doubleToLongBits(key); - // long bits = Double.doubleToRawLongBits(key); - // return (int) (bits % (long) _data.length); - - // return h; - - // This function ensures that hashCodes that differ only by - // constant multiples at each bit position have a bounded - // number of collisions (approximately 8 at default load factor). } // private static int indexFor(int h, int length) { diff --git a/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java b/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java index 8d2e83ff19..3d7867b218 100644 --- a/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java +++ b/src/main/java/org/apache/sysds/runtime/instructions/cp/DataGenCPInstruction.java @@ -411,13 +411,16 @@ public class DataGenCPInstruction extends UnaryCPInstruction { long lcols = ec.getScalarInput(cols).getLongValue(); checkValidDimensions(lrows, lcols); + if(sparsity == 0.0 && lrows < Integer.MAX_VALUE && lcols < Integer.MAX_VALUE) + return new MatrixBlock((int)lrows,(int)lcols, 0.0); + if(ConfigurationManager.isCompressionEnabled() && minValue == maxValue && sparsity == 1.0) { // contains constant if(lrows > 1000 && lcols > 0 && lrows / lcols > 1) return CompressedMatrixBlockFactory.createConstant((int)lrows, (int)lcols, minValue); - else - return MatrixBlock.randOperations(getGenerator(lrows, lcols), lSeed, numThreads); + + return MatrixBlock.randOperations(getGenerator(lrows, lcols), lSeed, numThreads); } else return MatrixBlock.randOperations(getGenerator(lrows, lcols), lSeed, numThreads);
