
water.fvec.CUDChunk Maven / Gradle / Ivy
package water.fvec;
import water.AutoBuffer;
import water.MemoryManager;
import water.util.UnsafeUtils;
import java.util.HashMap;
import java.util.Map;
/**
* The "few unique doubles"-compression function
*/
public class CUDChunk extends Chunk {
public static int MAX_UNIQUES=256;
public static int computeByteSize(int uniques, int len) {
return 4 + 4 // _len + numUniques
+ (uniques << 3) //unique double values
+ (len << 1); //mapping of row -> unique value index (0...255)
}
int numUniques;
CUDChunk() {}
CUDChunk(byte[] bs, HashMap hs, int len) {
_start = -1;
numUniques = hs.size();
set_len(len);
_mem = MemoryManager.malloc1(computeByteSize(numUniques, _len), false);
UnsafeUtils.set4(_mem, 0, _len);
UnsafeUtils.set4(_mem, 4, numUniques);
int j=0;
//create the mapping and also store the unique values (as longs)
for (Map.Entry e : hs.entrySet()) {
e.setValue(new Byte((byte)(j-128))); //j is in 0...256 -> byte value needs to be in -128...127 for storage
UnsafeUtils.set8(_mem, 8 + (j << 3), e.getKey());
j++;
}
// store the mapping
for (int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy