Skip to content

Commit 95cebc8

Browse files
committed
Change types_info array initialization
Signed-off-by: Raasz, Pawel <[email protected]>
1 parent 08b087b commit 95cebc8

File tree

1 file changed

+93
-39
lines changed

1 file changed

+93
-39
lines changed

src/core/src/type/element_type.cpp

Lines changed: 93 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <cmath>
88
#include <functional>
99
#include <iostream>
10+
#include <string_view>
1011
#include <unordered_map>
1112

1213
#include "openvino/core/type/element_type_traits.hpp"
@@ -28,56 +29,109 @@ struct TypeInfo {
2829
bool m_is_quantized;
2930
const char* m_cname;
3031
const char* m_type_name;
31-
const std::initializer_list<const char*> m_aliases;
32+
const char* const* aliases;
33+
size_t alias_count;
3234

3335
bool has_name(const std::string& type) const {
34-
return type == m_type_name || std::find(m_aliases.begin(), m_aliases.end(), type) != m_aliases.end();
36+
if (type == m_type_name) {
37+
return true;
38+
} else {
39+
const auto last = aliases + alias_count;
40+
return std::find(aliases, last, type) != last;
41+
}
3542
}
3643

3744
constexpr bool is_valid() const {
38-
constexpr auto null_info = TypeInfo{};
39-
return std::tie(m_cname, m_type_name) == std::tie(null_info.m_cname, null_info.m_type_name);
45+
return m_cname != nullptr && m_type_name != nullptr;
4046
}
4147
};
48+
;
49+
50+
constexpr TypeInfo type_info(size_t bitwidth,
51+
bool is_real,
52+
bool is_signed,
53+
bool is_quantized,
54+
const char* cname,
55+
const char* type_name) {
56+
return {bitwidth, is_real, is_signed, is_quantized, cname, type_name, nullptr, 0};
57+
}
58+
59+
template <class Array>
60+
constexpr TypeInfo type_info(size_t bitwidth,
61+
bool is_real,
62+
bool is_signed,
63+
bool is_quantized,
64+
const char* cname,
65+
const char* type_name,
66+
const Array& aliases) {
67+
return {bitwidth, is_real, is_signed, is_quantized, cname, type_name, aliases.data(), aliases.size()};
68+
}
4269

43-
static constexpr std::array<TypeInfo, enum_types_size> types_info{
44-
TypeInfo{std::numeric_limits<size_t>::max(),
45-
false,
46-
false,
47-
false,
48-
"undefined",
49-
"undefined",
50-
{"UNSPECIFIED"}}, // undefined
51-
{0, false, false, false, "dynamic", "dynamic", {}}, // dynamic
52-
{8, false, true, false, "char", "boolean", {"BOOL"}}, // boolean
53-
{16, true, true, false, "bfloat16", "bf16", {"BF16"}}, // bf16
54-
{16, true, true, false, "float16", "f16", {"FP16"}}, // f16
55-
{32, true, true, false, "float", "f32", {"FP32"}}, // f32
56-
{64, true, true, false, "double", "f64", {"FP64"}}, // f64
57-
{4, false, true, true, "int4_t", "i4", {"I4"}}, // i4
58-
{8, false, true, true, "int8_t", "i8", {"I8"}}, // i8
59-
{16, false, true, false, "int16_t", "i16", {"I16"}}, // i16
60-
{32, false, true, true, "int32_t", "i32", {"I32"}}, // i32
61-
{64, false, true, false, "int64_t", "i64", {"I64"}}, // i64
62-
{1, false, false, false, "uint1_t", "u1", {"U1", "bin", "BIN"}}, // u1
63-
{2, false, false, false, "uint2_t", "u2", {"U2"}}, // u2
64-
{3, false, false, false, "uint3_t", "u3", {"U3"}}, // u3
65-
{4, false, false, false, "uint4_t", "u4", {"U4"}}, // u4
66-
{6, false, false, false, "uint6_t", "u6", {"U6"}}, // u6
67-
{8, false, false, true, "uint8_t", "u8", {"U8"}}, // u8
68-
{16, false, false, false, "uint16_t", "u16", {"U16"}}, // u16
69-
{32, false, false, false, "uint32_t", "u32", {"U32"}}, // u32
70-
{64, false, false, false, "uint64_t", "u64", {"U64"}}, // u64
71-
{4, false, false, true, "nfloat4", "nf4", {"NF4"}}, // nf4
72-
{8, true, true, true, "f8e4m3", "f8e4m3", {"F8E4M3"}}, // f8e4m3
73-
{8, true, true, true, "f8e5m2", "f8e5m2", {"F8E5M2"}}, // f8e5m2
74-
{8 * sizeof(std::string), false, false, false, "string", "string", {"STRING"}}, // string
75-
{4, true, true, true, "f4e2m1", "f4e2m1", {"F4E2M1"}}, // f4e2m1
76-
{8, true, true, true, "f8e8m0", "f8e8m0", {"F8E8M0"}} // f8e8m0
70+
constexpr auto undefined_aliases = util::make_array("UNSPECIFIED");
71+
constexpr auto boolean_aliases = util::make_array("BOOL", "boolean", "char");
72+
constexpr auto bf16_aliases = util::make_array("BF16", "bfloat16");
73+
constexpr auto f16_aliases = util::make_array("FP16", "float16");
74+
constexpr auto f32_aliases = util::make_array("FP32", "float");
75+
constexpr auto f64_aliases = util::make_array("FP64", "double");
76+
constexpr auto i4_aliases = util::make_array("I4");
77+
constexpr auto i8_aliases = util::make_array("I8");
78+
constexpr auto i16_aliases = util::make_array("I16");
79+
constexpr auto i32_aliases = util::make_array("I32");
80+
constexpr auto i64_aliases = util::make_array("I64");
81+
constexpr auto u1_aliases = util::make_array("U1", "bin", "BIN");
82+
constexpr auto u2_aliases = util::make_array("U2");
83+
constexpr auto u3_aliases = util::make_array("U3");
84+
constexpr auto u4_aliases = util::make_array("U4");
85+
constexpr auto u6_aliases = util::make_array("U6");
86+
constexpr auto u8_aliases = util::make_array("U8");
87+
constexpr auto u16_aliases = util::make_array("U16");
88+
constexpr auto u32_aliases = util::make_array("U32");
89+
constexpr auto u64_aliases = util::make_array("U64");
90+
constexpr auto nf4_aliases = util::make_array("NF4");
91+
constexpr auto f8e4m3_aliases = util::make_array("F8E4M3");
92+
constexpr auto f8e5m2_aliases = util::make_array("F8E5M2");
93+
constexpr auto string_aliases = util::make_array("STRING");
94+
constexpr auto f4e2m1_aliases = util::make_array("F4E2M1");
95+
constexpr auto f8e8m0_aliases = util::make_array("F8E8M0");
96+
97+
static constexpr std::array<TypeInfo, enum_types_size> types_info = {
98+
type_info(std::numeric_limits<size_t>::max(),
99+
false,
100+
false,
101+
false,
102+
"undefined",
103+
"undefined",
104+
undefined_aliases), // undefined
105+
type_info(0, false, false, false, "dynamic", "dynamic"), // dynamic
106+
type_info(8, false, true, false, "char", "boolean", boolean_aliases), // boolean
107+
type_info(16, true, true, false, "bfloat16", "bf16", bf16_aliases), // bf16
108+
type_info(16, true, true, false, "float16", "f16", f16_aliases), // f16
109+
type_info(32, true, true, false, "float", "f32", f32_aliases), // f32
110+
type_info(64, true, true, false, "double", "f64", f64_aliases), // f64
111+
type_info(4, false, true, true, "int4_t", "i4", i4_aliases), // i4
112+
type_info(8, false, true, true, "int8_t", "i8", i8_aliases), // i8
113+
type_info(16, false, true, false, "int16_t", "i16", i16_aliases), // i16
114+
type_info(32, false, true, true, "int32_t", "i32", i32_aliases), // i32
115+
type_info(64, false, true, false, "int64_t", "i64", i64_aliases), // i64
116+
type_info(1, false, false, false, "uint1_t", "u1", u1_aliases), // u1
117+
type_info(2, false, false, false, "uint2_t", "u2", u2_aliases), // u2
118+
type_info(3, false, false, false, "uint3_t", "u3", u3_aliases), // u3
119+
type_info(4, false, false, false, "uint4_t", "u4", u4_aliases), // u4
120+
type_info(6, false, false, false, "uint6_t", "u6", u6_aliases), // u6
121+
type_info(8, false, false, true, "uint8_t", "u8", u8_aliases), // u8
122+
type_info(16, false, false, false, "uint16_t", "u16", u16_aliases), // u16
123+
type_info(32, false, false, false, "uint32_t", "u32", u32_aliases), // u32
124+
type_info(64, false, false, false, "uint64_t", "u64", u64_aliases), // u64
125+
type_info(4, false, false, true, "nfloat4", "nf4", nf4_aliases), // nf4
126+
type_info(8, true, true, true, "f8e4m3", "f8e4m3", f8e4m3_aliases), // f8e4m3
127+
type_info(8, true, true, true, "f8e5m2", "f8e5m2", f8e5m2_aliases), // f8e5m2
128+
type_info(8 * sizeof(std::string), false, false, false, "string", "string", string_aliases), // string
129+
type_info(4, true, true, true, "f4e2m1", "f4e2m1", f4e2m1_aliases), // f4e2m1
130+
type_info(8, true, true, true, "f8e8m0", "f8e8m0", f8e8m0_aliases) // f8e8m0
77131
};
78132

79133
constexpr bool validate_types_info(decltype(types_info)& info, size_t i = 0) {
80-
return i >= info.size() ? true : info[i].is_valid() ? false : validate_types_info(info, i + 1);
134+
return i >= info.size() ? true : info[i].is_valid() ? validate_types_info(info, i + 1) : false;
81135
}
82136

83137
static_assert(validate_types_info(types_info), "Some entries of type_info have not valid information");

0 commit comments

Comments
 (0)