From ce911a2f1d9cd678fb9fe82a40c86ad0c6772f5a Mon Sep 17 00:00:00 2001 From: Tai Ly Date: Thu, 21 Mar 2024 17:01:14 +0000 Subject: Add conversions of U8 to/from BF16 and FP8 Adds type to PadAttribute and ClampAttribute so their pad_const and max_val/min_val can be deserialized according to type Adds conversion functions of U8 arrays to/from BF16/FP8 values Also, refactor and expose TosaSerializer.convertDataToUint8Vec for converting dtype/data to uint8 list for serialization And modify convertDataToUint8Vec to serialize bf16 values into 2 bytes each, and serialize fp8 values into single bytes each. Signed-off-by: Tai Ly Change-Id: I05659e8187c76d359f1cc9f71c8c23cafd0e877f --- include/tosa_generated.h | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) (limited to 'include/tosa_generated.h') diff --git a/include/tosa_generated.h b/include/tosa_generated.h index 20f6993..0798256 100644 --- a/include/tosa_generated.h +++ b/include/tosa_generated.h @@ -1008,15 +1008,20 @@ inline ::flatbuffers::Offset CreateTransposeConvAttribut struct PadAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { typedef PadAttributeBuilder Builder; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { - VT_PAD_CONST = 4 + VT_PAD_CONST = 4, + VT_TYPE = 6 }; const ::flatbuffers::Vector *pad_const() const { return GetPointer *>(VT_PAD_CONST); } + tosa::DType type() const { + return static_cast(GetField(VT_TYPE, 0)); + } bool Verify(::flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_PAD_CONST) && verifier.VerifyVector(pad_const()) && + VerifyField(verifier, VT_TYPE, 4) && verifier.EndTable(); } }; @@ -1028,6 +1033,9 @@ struct PadAttributeBuilder { void add_pad_const(::flatbuffers::Offset<::flatbuffers::Vector> pad_const) { fbb_.AddOffset(PadAttribute::VT_PAD_CONST, pad_const); } + void add_type(tosa::DType type) { + fbb_.AddElement(PadAttribute::VT_TYPE, static_cast(type), 0); + } explicit PadAttributeBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); @@ -1041,20 +1049,24 @@ struct PadAttributeBuilder { inline ::flatbuffers::Offset CreatePadAttribute( ::flatbuffers::FlatBufferBuilder &_fbb, - ::flatbuffers::Offset<::flatbuffers::Vector> pad_const = 0) { + ::flatbuffers::Offset<::flatbuffers::Vector> pad_const = 0, + tosa::DType type = tosa::DType_UNKNOWN) { PadAttributeBuilder builder_(_fbb); + builder_.add_type(type); builder_.add_pad_const(pad_const); return builder_.Finish(); } inline ::flatbuffers::Offset CreatePadAttributeDirect( ::flatbuffers::FlatBufferBuilder &_fbb, - const std::vector *pad_const = nullptr) { + const std::vector *pad_const = nullptr, + tosa::DType type = tosa::DType_UNKNOWN) { if (pad_const) { _fbb.ForceVectorAlignment(pad_const->size(), sizeof(uint8_t), 8); } auto pad_const__ = pad_const ? _fbb.CreateVector(*pad_const) : 0; return tosa::CreatePadAttribute( _fbb, - pad_const__); + pad_const__, + type); } struct AxisAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { @@ -1193,7 +1205,8 @@ struct ClampAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { typedef ClampAttributeBuilder Builder; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_MIN_VAL = 4, - VT_MAX_VAL = 6 + VT_MAX_VAL = 6, + VT_TYPE = 8 }; const ::flatbuffers::Vector *min_val() const { return GetPointer *>(VT_MIN_VAL); @@ -1201,12 +1214,16 @@ struct ClampAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { const ::flatbuffers::Vector *max_val() const { return GetPointer *>(VT_MAX_VAL); } + tosa::DType type() const { + return static_cast(GetField(VT_TYPE, 0)); + } bool Verify(::flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_MIN_VAL) && verifier.VerifyVector(min_val()) && VerifyOffset(verifier, VT_MAX_VAL) && verifier.VerifyVector(max_val()) && + VerifyField(verifier, VT_TYPE, 4) && verifier.EndTable(); } }; @@ -1221,6 +1238,9 @@ struct ClampAttributeBuilder { void add_max_val(::flatbuffers::Offset<::flatbuffers::Vector> max_val) { fbb_.AddOffset(ClampAttribute::VT_MAX_VAL, max_val); } + void add_type(tosa::DType type) { + fbb_.AddElement(ClampAttribute::VT_TYPE, static_cast(type), 0); + } explicit ClampAttributeBuilder(::flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); @@ -1235,8 +1255,10 @@ struct ClampAttributeBuilder { inline ::flatbuffers::Offset CreateClampAttribute( ::flatbuffers::FlatBufferBuilder &_fbb, ::flatbuffers::Offset<::flatbuffers::Vector> min_val = 0, - ::flatbuffers::Offset<::flatbuffers::Vector> max_val = 0) { + ::flatbuffers::Offset<::flatbuffers::Vector> max_val = 0, + tosa::DType type = tosa::DType_UNKNOWN) { ClampAttributeBuilder builder_(_fbb); + builder_.add_type(type); builder_.add_max_val(max_val); builder_.add_min_val(min_val); return builder_.Finish(); @@ -1245,7 +1267,8 @@ inline ::flatbuffers::Offset CreateClampAttribute( inline ::flatbuffers::Offset CreateClampAttributeDirect( ::flatbuffers::FlatBufferBuilder &_fbb, const std::vector *min_val = nullptr, - const std::vector *max_val = nullptr) { + const std::vector *max_val = nullptr, + tosa::DType type = tosa::DType_UNKNOWN) { if (min_val) { _fbb.ForceVectorAlignment(min_val->size(), sizeof(uint8_t), 8); } auto min_val__ = min_val ? _fbb.CreateVector(*min_val) : 0; if (max_val) { _fbb.ForceVectorAlignment(max_val->size(), sizeof(uint8_t), 8); } @@ -1253,7 +1276,8 @@ inline ::flatbuffers::Offset CreateClampAttributeDirect( return tosa::CreateClampAttribute( _fbb, min_val__, - max_val__); + max_val__, + type); } struct RescaleAttribute FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { -- cgit v1.2.1