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


The following commit(s) were added to refs/heads/main by this push:
     new 7ecdb38a20 [MINOR] Vectorized string memory cost
7ecdb38a20 is described below

commit 7ecdb38a20d34ee095fcd7cfc07e4d754f82d18d
Author: Sebastian Baunsgaard <[email protected]>
AuthorDate: Fri Jan 5 17:06:52 2024 +0100

    [MINOR] Vectorized string memory cost
---
 .../org/apache/sysds/utils/MemoryEstimates.java    | 26 ++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sysds/utils/MemoryEstimates.java 
b/src/main/java/org/apache/sysds/utils/MemoryEstimates.java
index 43e9fddd25..5fd8b26701 100644
--- a/src/main/java/org/apache/sysds/utils/MemoryEstimates.java
+++ b/src/main/java/org/apache/sysds/utils/MemoryEstimates.java
@@ -189,12 +189,34 @@ public class MemoryEstimates {
         * @return The array memory cost
         */
        public static final double stringArrayCost(String[] strings) {
-               long size = 0;
-               for(int i = 0; i < strings.length; i++)
+               double size = 0;
+               int i = 0;
+               int by8 = strings.length - strings.length %8 ;
+               for(;i < by8; i+= 8)
+                       size += stringArrayCostVec8(strings, i);
+               for(; i < strings.length; i++)
                        size += stringCost(strings[i]);
                return size;
        }
 
+       private static final double stringArrayCostVec8(String[] strings, int 
r){
+               long size = 0;
+               size += stringCost(strings[r]);
+               size += stringCost(strings[r+1]);
+               size += stringCost(strings[r+2]);
+               size += stringCost(strings[r+3]);
+               size += stringCost(strings[r+4]);
+               size += stringCost(strings[r+5]);
+               size += stringCost(strings[r+6]);
+               size += stringCost(strings[r+7]);
+               return size;
+       }
+
+       public static final double stringArrayCost(int length, int 
avgStringLength){
+               // if null 16 object + 8 array ref
+               return  stringCost(avgStringLength) * length + 24.0d;
+       }
+
        /**
         * Get the worst case memory usage of a single string.
         * 

Reply via email to