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);

Reply via email to