Class DataLayouts
DataLayout instances of data formats frequently used in linear algebra computation.
Example of usage:
// Storing boolean values in a ByteDataBuffer
BooleanDataBuffer boolBuffer = DataLayouts.BOOL.applyTo(byteDataBuffer);
// Allocating a new buffer of 256 half floats
FloatDataBuffer halfBuffer = DataLayouts.FLOAT16.applyTo(DataBuffers.ofShorts(256 * DataLayouts.FLOAT16.scale());
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final FloatDataLayout<ShortDataBuffer> Data layout for converting 16-bit bfloats to/from short values.static final BooleanDataLayout<ByteDataBuffer> Data layout for converting booleans to/from byte values.static final FloatDataLayout<ShortDataBuffer> Data layout for converting 16-bit half floats to/from short values. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic DataLayout<DataBuffer<byte[]>, String> Creates a data layout for converting strings to/from byte sequences.
-
Field Details
-
BFLOAT16
Data layout for converting 16-bit bfloats to/from short values.This format used to be specific to TensorFlow but has now been adopted more broadly in the machine learning field. It is optimized for fast conversion with single-precision 32-bit floating points by simply shifting their value and truncating the mantissa to only 7 bits.
Therefore, this is a lost of precision in the fraction part compared to the IEEE-754 half-precision floating point specification (see
FLOAT16but it has a larger range of possible values in the whole part as it preserves the 8-bit exponent and uses the same bias, (i.e. an absolute range above 0 of approximately [10-40, 3.39 × 1038]Some CPUs support the bfloat16 format natively for better performances.
-
FLOAT16
Data layout for converting 16-bit half floats to/from short values.Half floats are stored in memory accordingly to the IEEE-754 half-precision floating point specification, and are converted to/from 32-bit floats in the user space.
There is a potential loss of precision when converting a single float (32-bit) to a half float (16-bit). Absolute range of values above 0 for a half float is approximately [5.96 × 10-8, 6.55 × 104] and their decimal part is rounded up to a 10 bits mantissa.
In general, half float computation perform better on GPUs since, in general, CPUs do not support this format natively.
-
BOOL
Data layout for converting booleans to/from byte values.Since there is no Java NIO boolean buffer, this layout is particularly useful for mapping booleans values to standard byte buffers. The conversion between a boolean and a byte requires explicit type casting.
-
-
Constructor Details
-
DataLayouts
public DataLayouts()
-
-
Method Details
-
ofStrings
Creates a data layout for converting strings to/from byte sequences.This layout requires a
charsetin parameter to specify how the strings must be encoded/decoded as byte sequences. So a new layout instance is always returned.- Parameters:
charset- charset to use- Returns:
- a new string layout
-