7
7
#include < cmath>
8
8
#include < functional>
9
9
#include < iostream>
10
+ #include < string_view>
10
11
#include < unordered_map>
11
12
12
13
#include " openvino/core/type/element_type_traits.hpp"
@@ -28,56 +29,109 @@ struct TypeInfo {
28
29
bool m_is_quantized;
29
30
const char * m_cname;
30
31
const char * m_type_name;
31
- const std::initializer_list<const char *> m_aliases;
32
+ const char * const * aliases;
33
+ size_t alias_count;
32
34
33
35
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
+ }
35
42
}
36
43
37
44
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 ;
40
46
}
41
47
};
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
+ }
42
69
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
77
131
};
78
132
79
133
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 ;
81
135
}
82
136
83
137
static_assert (validate_types_info(types_info), " Some entries of type_info have not valid information" );
0 commit comments