#[repr(i32)]pub enum PrimitiveType {
Show 28 variants
Invalid = 0,
Pred = 1,
S2 = 26,
S4 = 21,
S8 = 2,
S16 = 3,
S32 = 4,
S64 = 5,
U2 = 27,
U4 = 22,
U8 = 6,
U16 = 7,
U32 = 8,
U64 = 9,
F16 = 10,
F32 = 11,
Bf16 = 16,
F64 = 12,
F8e5m2 = 19,
F8e4m3fn = 20,
F8e4m3b11fnuz = 23,
F8e5m2fnuz = 24,
F8e4m3fnuz = 25,
C64 = 15,
C128 = 18,
Tuple = 13,
OpaqueType = 14,
Token = 17,
}Expand description
Primitive types are the individual values that can be held in rectangular multidimensional arrays. A description of the rectangular multidimensional array dimensions / primitive type is given by Shape, below.
LINT.IfChange
Variants§
Invalid = 0
Invalid primitive type to serve as default.
Pred = 1
Predicates are two-state booleans.
S2 = 26
Signed integral values of fixed width.
S4 = 21
S8 = 2
S16 = 3
S32 = 4
S64 = 5
U2 = 27
Unsigned integral values of fixed width.
U4 = 22
U8 = 6
U16 = 7
U32 = 8
U64 = 9
F16 = 10
Floating-point values of fixed width.
Note: if f16s are not natively supported on the device, they will be converted to f16 from f32 at arbirary points in the computation.
F32 = 11
Bf16 = 16
Truncated 16 bit floating-point format. This is similar to IEEE’s 16 bit floating-point format, but uses 1 bit for the sign, 8 bits for the exponent and 7 bits for the mantissa.
F64 = 12
F8e5m2 = 19
FP8 dtypes, as described in this paper: https://arxiv.org/abs/2209.05433
F8E5M2 has 5 exponent bits and 2 mantissa bits, and is similar to the existing IEEE types.
F8E4M3FN has 4 exponent bits and 3 mantissa bits. The “FN” means only Finite and NaN values are supported. Unlike IEEE types, infinities are not supported. NaN is represented when the exponent and mantissa bits are all 1s. All other values are finite.
F8E4M3B11FNUZ has 4 exponent bits and 3 mantissa bits and a bias of 11. The “FNUZ” means only Finite and NaN values are supported; zero is unsigned. Unlike IEEE types, infinities are not supported. NaN is represented when the exponent and mantissa bits are all 0s with a sign bit of 1. All other values are finite.
Support for these dtypes is under development. They do not yet work properly in most cases. TODO(b/259609697): Fully support FP8.
F8e4m3fn = 20
F8e4m3b11fnuz = 23
F8e5m2fnuz = 24
FP8 dtypes, as described in this paper: https://arxiv.org/abs/2206.02915
F8E5M2FNUZ has 5 exponent bits and 2 mantissa bits. F8E4M3FNUZ has 4 exponent bits and 3 mantissa bits.
The “FNUZ” means only Finite and NaN values are supported; zero is unsigned. Unlike IEEE types, infinities are not supported. NaN is represented when the exponent and mantissa bits are all 0s with a sign bit of 1. All other values are finite.
These differences mean there’s an additional exponent value available. To keep the same dynamic range as an IEEE-like FP8 type, the exponent is biased one more than would be expected given the number of exponent bits (8 for Float8E4M3FNUZ and 16 for Float8E5M2FNUZ).
F8e4m3fnuz = 25
C64 = 15
Complex values of fixed width.
Paired F32 (real, imag), as in std::complex
C128 = 18
Paired F64 (real, imag), as in std::complex
Tuple = 13
A tuple is a polymorphic sequence; e.g. a shape that holds different sub-shapes. They are used for things like returning multiple values from a computation; e.g. a computation that returns weights and biases may have a signature that results in a tuple like (f32[784x2000], f32[2000])
If a shape proto has the tuple element type, it may not have any entries in the dimensions field.
OpaqueType = 14
An opaque type used for passing context-specific data to a custom operation. Shapes of this primitive type will have empty dimensions and tuple_shapes fields.
(OPAQUE would be a better name for this identifier, but that conflicts with a macro defined in windows.h.)
Token = 17
A token type threaded between side-effecting operations. Shapes of this primitive type will have empty dimensions and tuple_shapes fields.
Implementations§
Source§impl PrimitiveType
impl PrimitiveType
Source§impl PrimitiveType
impl PrimitiveType
Sourcepub fn as_str_name(&self) -> &'static str
pub fn as_str_name(&self) -> &'static str
String value of the enum field names used in the ProtoBuf definition.
The values are not transformed in any way and thus are considered stable (if the ProtoBuf definition does not change) and safe for programmatic use.
Sourcepub fn from_str_name(value: &str) -> Option<Self>
pub fn from_str_name(value: &str) -> Option<Self>
Creates an enum from field names used in the ProtoBuf definition.
Trait Implementations§
Source§impl Clone for PrimitiveType
impl Clone for PrimitiveType
Source§fn clone(&self) -> PrimitiveType
fn clone(&self) -> PrimitiveType
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PrimitiveType
impl Debug for PrimitiveType
Source§impl Default for PrimitiveType
impl Default for PrimitiveType
Source§fn default() -> PrimitiveType
fn default() -> PrimitiveType
Source§impl From<PrimitiveType> for i32
impl From<PrimitiveType> for i32
Source§fn from(value: PrimitiveType) -> i32
fn from(value: PrimitiveType) -> i32
Source§impl Hash for PrimitiveType
impl Hash for PrimitiveType
Source§impl Ord for PrimitiveType
impl Ord for PrimitiveType
Source§impl PartialEq for PrimitiveType
impl PartialEq for PrimitiveType
Source§impl PartialOrd for PrimitiveType
impl PartialOrd for PrimitiveType
Source§impl TryFrom<i32> for PrimitiveType
impl TryFrom<i32> for PrimitiveType
Source§type Error = UnknownEnumValue
type Error = UnknownEnumValue
Source§fn try_from(value: i32) -> Result<PrimitiveType, UnknownEnumValue>
fn try_from(value: i32) -> Result<PrimitiveType, UnknownEnumValue>
impl Copy for PrimitiveType
impl Eq for PrimitiveType
impl StructuralPartialEq for PrimitiveType
Auto Trait Implementations§
impl Freeze for PrimitiveType
impl RefUnwindSafe for PrimitiveType
impl Send for PrimitiveType
impl Sync for PrimitiveType
impl Unpin for PrimitiveType
impl UnwindSafe for PrimitiveType
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)