diff options
author | Jerry Ge <jerry.ge@arm.com> | 2024-02-26 13:31:22 -0800 |
---|---|---|
committer | Jerry Ge <jerry.ge@arm.com> | 2024-02-27 10:35:07 -0800 |
commit | 758e73e117c5cef17f8f0b1c543efc1df953b2fa (patch) | |
tree | 2033377d30b702abff184884bd87daeba90d2d91 | |
parent | 81db8ee8f580d30ec0ca53067df32ef046e6f09e (diff) | |
download | serialization_lib-758e73e117c5cef17f8f0b1c543efc1df953b2fa.tar.gz |
Update ConvertU8toF16 to save outputs in F16 containers
- If we save FP16 in FP32 containers, it will change byte representation
- which causes wrong values after deserialization
- Update the code to store F16 values in F16 containers
Signed-off-by: Jerry Ge <jerry.ge@arm.com>
Change-Id: I2ddea67471997c596980faea1419422d96bad60d
-rw-r--r-- | include/tosa_serialization_handler.h | 3 | ||||
-rw-r--r-- | src/tosa_serialization_handler.cpp | 8 |
2 files changed, 6 insertions, 5 deletions
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h index f50d7ad..5c53f57 100644 --- a/include/tosa_serialization_handler.h +++ b/include/tosa_serialization_handler.h @@ -421,7 +421,8 @@ public: static tosa_err_t ConvertI4toU8(const std::vector<int8_t>& in, std::vector<uint8_t>& out); static tosa_err_t ConvertBooltoU8(const std::vector<bool>& in, std::vector<uint8_t>& out); - static tosa_err_t ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out); + static tosa_err_t + ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<half_float::half>& out); static tosa_err_t ConvertU8toF32(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out); static tosa_err_t ConvertU8toI64(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<int64_t>& out); static tosa_err_t ConvertU8toI48(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<int64_t>& out); diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp index 453670f..749a3c8 100644 --- a/src/tosa_serialization_handler.cpp +++ b/src/tosa_serialization_handler.cpp @@ -896,8 +896,9 @@ tosa_err_t TosaSerializationHandler::ConvertBooltoU8(const std::vector<bool>& in return TOSA_OK; } -tosa_err_t - TosaSerializationHandler::ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out) +tosa_err_t TosaSerializationHandler::ConvertU8toF16(const std::vector<uint8_t>& in, + uint32_t out_size, + std::vector<half_float::half>& out) { // Note: fp16 values returned in fp32 type out.clear(); @@ -916,8 +917,7 @@ tosa_err_t // Reinterpret u16 byte as fp16 then convert to fp32 half_float::half val_f16 = *(half_float::half*)&val_u16; - float val_fp32 = half_float::half_cast<float, half_float::half>(val_f16); - out.push_back(val_fp32); + out.push_back(val_f16); } return TOSA_OK; } |