From 196e898ca7b8598e918d42e69e44279bc1255c37 Mon Sep 17 00:00:00 2001 From: "Raasz, Pawel" Date: Thu, 23 Jan 2025 15:36:12 +0000 Subject: [PATCH] Try fix build issues realted constexpr Signed-off-by: Raasz, Pawel --- src/core/src/type/element_type.cpp | 101 ++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 30 deletions(-) diff --git a/src/core/src/type/element_type.cpp b/src/core/src/type/element_type.cpp index e84cf1dd3e54e0..bd12b79e9b5dc5 100644 --- a/src/core/src/type/element_type.cpp +++ b/src/core/src/type/element_type.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include "openvino/core/type/element_type_traits.hpp" @@ -28,10 +29,14 @@ struct TypeInfo { bool m_is_quantized; const char* m_cname; const char* m_type_name; - const std::initializer_list m_aliases; + struct Aliases { + const char* const* ptr; + size_t size; + } m_aliases; bool has_name(const std::string& type) const { - return type == m_type_name || std::find(m_aliases.begin(), m_aliases.end(), type) != m_aliases.end(); + return type == m_type_name || + std::find(m_aliases.ptr, m_aliases.ptr + m_aliases.size, type) != m_aliases.ptr + m_aliases.size; } constexpr bool is_valid() const { @@ -40,40 +45,76 @@ struct TypeInfo { } }; -static constexpr std::array types_info{ +constexpr TypeInfo::Aliases aliases() { + return {nullptr, 0}; +} + +template +constexpr TypeInfo::Aliases aliases(const ARRAY& aliases) { + return {aliases.data(), aliases.size()}; +} + +constexpr auto undefined_aliases = util::make_array("UNSPECIFIED"); +constexpr auto boolean_aliases = util::make_array("BOOL", "boolean", "char"); +constexpr auto bf16_aliases = util::make_array("BF16", "bfloat16"); +constexpr auto f16_aliases = util::make_array("FP16", "float16"); +constexpr auto f32_aliases = util::make_array("FP32", "float"); +constexpr auto f64_aliases = util::make_array("FP64", "double"); +constexpr auto i4_aliases = util::make_array("I4"); +constexpr auto i8_aliases = util::make_array("I8"); +constexpr auto i16_aliases = util::make_array("I16"); +constexpr auto i32_aliases = util::make_array("I32"); +constexpr auto i64_aliases = util::make_array("I64"); +constexpr auto u1_aliases = util::make_array("U1", "bin", "BIN"); +constexpr auto u2_aliases = util::make_array("U2"); +constexpr auto u3_aliases = util::make_array("U3"); +constexpr auto u4_aliases = util::make_array("U4"); +constexpr auto u6_aliases = util::make_array("U6"); +constexpr auto u8_aliases = util::make_array("U8"); +constexpr auto u16_aliases = util::make_array("U16"); +constexpr auto u32_aliases = util::make_array("U32"); +constexpr auto u64_aliases = util::make_array("U64"); +constexpr auto nf4_aliases = util::make_array("NF4"); +constexpr auto f8e4m3_aliases = util::make_array("F8E4M3"); +constexpr auto f8e5m2_aliases = util::make_array("F8E5M2"); +constexpr auto string_aliases = util::make_array("STRING"); +constexpr auto f4e2m1_aliases = util::make_array("F4E2M1"); +constexpr auto f8e8m0_aliases = util::make_array("F8E8M0"); + +static constexpr std::array types_info = { TypeInfo{std::numeric_limits::max(), false, false, false, "undefined", "undefined", - {"UNSPECIFIED"}}, // undefined - {0, false, false, false, "dynamic", "dynamic", {}}, // dynamic - {8, false, true, false, "char", "boolean", {"BOOL"}}, // boolean - {16, true, true, false, "bfloat16", "bf16", {"BF16"}}, // bf16 - {16, true, true, false, "float16", "f16", {"FP16"}}, // f16 - {32, true, true, false, "float", "f32", {"FP32"}}, // f32 - {64, true, true, false, "double", "f64", {"FP64"}}, // f64 - {4, false, true, true, "int4_t", "i4", {"I4"}}, // i4 - {8, false, true, true, "int8_t", "i8", {"I8"}}, // i8 - {16, false, true, false, "int16_t", "i16", {"I16"}}, // i16 - {32, false, true, true, "int32_t", "i32", {"I32"}}, // i32 - {64, false, true, false, "int64_t", "i64", {"I64"}}, // i64 - {1, false, false, false, "uint1_t", "u1", {"U1", "bin", "BIN"}}, // u1 - {2, false, false, false, "uint2_t", "u2", {"U2"}}, // u2 - {3, false, false, false, "uint3_t", "u3", {"U3"}}, // u3 - {4, false, false, false, "uint4_t", "u4", {"U4"}}, // u4 - {6, false, false, false, "uint6_t", "u6", {"U6"}}, // u6 - {8, false, false, true, "uint8_t", "u8", {"U8"}}, // u8 - {16, false, false, false, "uint16_t", "u16", {"U16"}}, // u16 - {32, false, false, false, "uint32_t", "u32", {"U32"}}, // u32 - {64, false, false, false, "uint64_t", "u64", {"U64"}}, // u64 - {4, false, false, true, "nfloat4", "nf4", {"NF4"}}, // nf4 - {8, true, true, true, "f8e4m3", "f8e4m3", {"F8E4M3"}}, // f8e4m3 - {8, true, true, true, "f8e5m2", "f8e5m2", {"F8E5M2"}}, // f8e5m2 - {8 * sizeof(std::string), false, false, false, "string", "string", {"STRING"}}, // string - {4, true, true, true, "f4e2m1", "f4e2m1", {"F4E2M1"}}, // f4e2m1 - {8, true, true, true, "f8e8m0", "f8e8m0", {"F8E8M0"}} // f8e8m0 + aliases(undefined_aliases)}, // undefined + TypeInfo{0, false, false, false, "dynamic", "dynamic", aliases()}, // dynamic + TypeInfo{8, false, true, false, "char", "boolean", aliases(boolean_aliases)}, // boolean + TypeInfo{16, true, true, false, "bfloat16", "bf16", aliases(bf16_aliases)}, // bf16 + TypeInfo{16, true, true, false, "float16", "f16", aliases(f16_aliases)}, // f16 + TypeInfo{32, true, true, false, "float", "f32", aliases(f32_aliases)}, // f32 + TypeInfo{64, true, true, false, "double", "f64", aliases(f64_aliases)}, // f64 + TypeInfo{4, false, true, true, "int4_t", "i4", aliases(i4_aliases)}, // i4 + TypeInfo{8, false, true, true, "int8_t", "i8", aliases(i8_aliases)}, // i8 + TypeInfo{16, false, true, false, "int16_t", "i16", aliases(i16_aliases)}, // i16 + TypeInfo{32, false, true, true, "int32_t", "i32", aliases(i32_aliases)}, // i32 + TypeInfo{64, false, true, false, "int64_t", "i64", aliases(i64_aliases)}, // i64 + TypeInfo{1, false, false, false, "uint1_t", "u1", aliases(u1_aliases)}, // u1 + TypeInfo{2, false, false, false, "uint2_t", "u2", aliases(u2_aliases)}, // u2 + TypeInfo{3, false, false, false, "uint3_t", "u3", aliases(u3_aliases)}, // u3 + TypeInfo{4, false, false, false, "uint4_t", "u4", aliases(u4_aliases)}, // u4 + TypeInfo{6, false, false, false, "uint6_t", "u6", aliases(u6_aliases)}, // u6 + TypeInfo{8, false, false, true, "uint8_t", "u8", aliases(u8_aliases)}, // u8 + TypeInfo{16, false, false, false, "uint16_t", "u16", aliases(u16_aliases)}, // u16 + TypeInfo{32, false, false, false, "uint32_t", "u32", aliases(u32_aliases)}, // u32 + TypeInfo{64, false, false, false, "uint64_t", "u64", aliases(u64_aliases)}, // u64 + TypeInfo{4, false, false, true, "nfloat4", "nf4", aliases(nf4_aliases)}, // nf4 + TypeInfo{8, true, true, true, "f8e4m3", "f8e4m3", aliases(f8e4m3_aliases)}, // f8e4m3 + TypeInfo{8, true, true, true, "f8e5m2", "f8e5m2", aliases(f8e5m2_aliases)}, // f8e5m2 + TypeInfo{8 * sizeof(std::string), false, false, false, "string", "string", aliases(string_aliases)}, // string + TypeInfo{4, true, true, true, "f4e2m1", "f4e2m1", aliases(f4e2m1_aliases)}, // f4e2m1 + TypeInfo{8, true, true, true, "f8e8m0", "f8e8m0", aliases(f8e8m0_aliases)} // f8e8m0 }; constexpr bool validate_types_info(decltype(types_info)& info, size_t i = 0) {