More unit tests for Convert reference implementation. (#5745)
* Add Convert unit tests to check C++ to LP types convertion. * Add unit tests to check LP types to C++ ints. * Disable LP to C++ ints tets in CPU plugin. * Remove f64 support from Convert evaluate.
This commit is contained in:
1 parent
66d98530d9
commit
9eb7bfdfc0
5 files changed
+1044
-105
No files matched your search
@@ -72,25 +72,25 @@ namespace ngraph
|
||||
}
|
||||
return val;
|
||||
}
|
||||
template <typename T>
|
||||
T get_value(const uint8_t* buf, size_t idx, element::Type type)
|
||||
template <typename TO, typename TI>
|
||||
TO get_value(const uint8_t* buf, size_t idx, element::Type from_type)
|
||||
{
|
||||
if (type == element::u1)
|
||||
if (from_type == element::u1)
|
||||
{
|
||||
return detail::get_u1(buf, idx);
|
||||
}
|
||||
|
||||
if (type == element::u4)
|
||||
if (from_type == element::u4)
|
||||
{
|
||||
return detail::get_u4(buf, idx);
|
||||
}
|
||||
|
||||
if (type == element::i4)
|
||||
if (from_type == element::i4)
|
||||
{
|
||||
return detail::get_i4(buf, idx);
|
||||
}
|
||||
|
||||
return static_cast<T>(buf[idx]);
|
||||
auto v = reinterpret_cast<const TI*>(buf);
|
||||
return static_cast<TO>(v[idx]);
|
||||
}
|
||||
|
||||
template <typename TI, typename TO>
|
||||
@@ -107,21 +107,21 @@ namespace ngraph
|
||||
if (dst_type == element::u1)
|
||||
{
|
||||
detail::set_u1(
|
||||
output, i, detail::get_value<uint8_t>(input, i, src_type));
|
||||
output, i, detail::get_value<uint8_t, TI>(input, i, src_type));
|
||||
}
|
||||
else if (dst_type == element::u4)
|
||||
{
|
||||
detail::set_u4(
|
||||
output, i, detail::get_value<uint8_t>(input, i, src_type));
|
||||
output, i, detail::get_value<uint8_t, TI>(input, i, src_type));
|
||||
}
|
||||
else if (dst_type == element::i4)
|
||||
{
|
||||
detail::set_i4(
|
||||
output, i, detail::get_value<int8_t>(input, i, src_type));
|
||||
output, i, detail::get_value<int8_t, TI>(input, i, src_type));
|
||||
}
|
||||
else
|
||||
{
|
||||
out[i] = detail::get_value<TO>(input, i, src_type);
|
||||
out[i] = detail::get_value<TO, TI>(input, i, src_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,6 @@ namespace convert
|
||||
TYPE_OUT_CASE(bf16, arg, out);
|
||||
TYPE_OUT_CASE(f16, arg, out);
|
||||
TYPE_OUT_CASE(f32, arg, out);
|
||||
TYPE_OUT_CASE(f64, arg, out);
|
||||
TYPE_OUT_CASE(boolean, arg, out);
|
||||
default: rc = false; break;
|
||||
}
|
||||
@@ -119,13 +118,15 @@ namespace convert
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u1, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u4, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u8, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i4, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i8, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i32, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i16, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i64, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u16, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u32, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, u64, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i4, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i8, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i16, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i32, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, i64, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, bf16, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, f16, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, f32, arg, out);
|
||||
NGRAPH_TYPE_CASE(evaluate_convert, boolean, arg, out);
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1048,30 +1048,89 @@ roll_3d_input_negative_shift
|
||||
roll_negative_axes
|
||||
|
||||
# convert operation
|
||||
IE_CPU.convert_f16_to_f32
|
||||
IE_CPU.convert_u8_to_f16
|
||||
IE_CPU.convert_u8_to_i4
|
||||
IE_CPU.convert_u8_to_i16
|
||||
IE_CPU.convert_u8_to_i64
|
||||
IE_CPU.convert_u8_to_u1
|
||||
IE_CPU.convert_u8_to_u4
|
||||
IE_CPU.convert_u8_to_u16
|
||||
IE_CPU.convert_u8_to_u32
|
||||
IE_CPU.convert_u8_to_u64
|
||||
IE_CPU.convert_u8_to_boolean
|
||||
IE_CPU.convert_i32_to_boolean
|
||||
IE_CPU.convert_f32_to_boolean
|
||||
IE_CPU.convert_u32_to_f32 # NOT_IMPLEMENTED
|
||||
IE_CPU.convert_i4_to_f32 # NOT_IMPLEMENTED
|
||||
IE_CPU.convert_u1_to_f32 # NOT_IMPLEMENTED
|
||||
IE_CPU.convert_u4_to_f32 # NOT_IMPLEMENTED
|
||||
IE_CPU.convert_u8_to_f16
|
||||
IE_CPU.convert_u8_to_i16
|
||||
IE_CPU.convert_u8_to_i64
|
||||
IE_CPU.convert_u8_to_u16
|
||||
IE_CPU.convert_u8_to_u32
|
||||
IE_CPU.convert_u8_to_u64
|
||||
IE_CPU.convert_f16_to_f32
|
||||
IE_CPU.convert_u32_to_f32
|
||||
IE_CPU.convert_i4_to_f32
|
||||
IE_CPU.convert_u1_to_f32
|
||||
IE_CPU.convert_u4_to_f32
|
||||
|
||||
IE_CPU.convert_u1_to_u1
|
||||
IE_CPU.convert_u4_to_u1
|
||||
IE_CPU.convert_u8_to_u1
|
||||
IE_CPU.convert_u16_to_u1
|
||||
IE_CPU.convert_u32_to_u1
|
||||
IE_CPU.convert_u64_to_u1
|
||||
IE_CPU.convert_i4_to_u1
|
||||
IE_CPU.convert_i8_to_u1
|
||||
IE_CPU.convert_i16_to_u1
|
||||
IE_CPU.convert_i32_to_u1
|
||||
IE_CPU.convert_i64_to_u1
|
||||
IE_CPU.convert_f16_to_u1
|
||||
IE_CPU.convert_bf16_to_u1
|
||||
IE_CPU.convert_f32_to_u1
|
||||
|
||||
IE_CPU.convert_u1_to_i4
|
||||
IE_CPU.convert_u4_to_i4
|
||||
IE_CPU.convert_u8_to_i4
|
||||
IE_CPU.convert_u16_to_i4
|
||||
IE_CPU.convert_u32_to_i4
|
||||
IE_CPU.convert_u64_to_i4
|
||||
IE_CPU.convert_i8_to_i4
|
||||
IE_CPU.convert_i16_to_i4
|
||||
IE_CPU.convert_i32_to_i4
|
||||
IE_CPU.convert_i64_to_i4
|
||||
IE_CPU.convert_f16_to_i4
|
||||
IE_CPU.convert_bf16_to_i4
|
||||
IE_CPU.convert_f32_to_i4
|
||||
|
||||
IE_CPU.convert_u1_to_u4
|
||||
IE_CPU.convert_u4_to_u4
|
||||
IE_CPU.convert_u8_to_u4
|
||||
IE_CPU.convert_u16_to_u4
|
||||
IE_CPU.convert_u32_to_u4
|
||||
IE_CPU.convert_u64_to_u4
|
||||
IE_CPU.convert_i4_to_u4
|
||||
IE_CPU.convert_i8_to_u4
|
||||
IE_CPU.convert_i16_to_u4
|
||||
IE_CPU.convert_i32_to_u4
|
||||
IE_CPU.convert_i64_to_u4
|
||||
IE_CPU.convert_f16_to_u4
|
||||
IE_CPU.convert_bf16_to_u4
|
||||
IE_CPU.convert_f32_to_u4
|
||||
|
||||
IE_CPU.convert_u1_to_i8
|
||||
IE_CPU.convert_u4_to_i8
|
||||
IE_CPU.convert_i4_to_i8
|
||||
IE_CPU.convert_u1_to_i16
|
||||
IE_CPU.convert_u4_to_i16
|
||||
IE_CPU.convert_i4_to_i16
|
||||
IE_CPU.convert_u1_to_i32
|
||||
IE_CPU.convert_u4_to_i32
|
||||
IE_CPU.convert_i4_to_i32
|
||||
IE_CPU.convert_u1_to_i64
|
||||
IE_CPU.convert_u4_to_i64
|
||||
IE_CPU.convert_i4_to_i64
|
||||
IE_CPU.convert_u1_to_u8
|
||||
IE_CPU.convert_u4_to_u8
|
||||
IE_CPU.convert_i4_to_u8
|
||||
IE_CPU.convert_u1_to_u16
|
||||
IE_CPU.convert_u4_to_u16
|
||||
IE_CPU.convert_i4_to_u16
|
||||
IE_CPU.convert_u1_to_u32
|
||||
IE_CPU.convert_u4_to_u32
|
||||
IE_CPU.convert_i4_to_u32
|
||||
IE_CPU.convert_u1_to_u64
|
||||
IE_CPU.convert_u4_to_u64
|
||||
IE_CPU.convert_i4_to_u64
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# Inference Engine CPU plugin excludes
|
||||
|
||||
@@ -1489,72 +1489,6 @@ namespace
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace convert_v0
|
||||
{
|
||||
template <element::Type_t ti, element::Type_t to>
|
||||
inline void evaluate(const shared_ptr<op::v0::Convert>& op,
|
||||
const HostTensorVector& outputs,
|
||||
const HostTensorVector& inputs)
|
||||
{
|
||||
using TI = typename element_type_traits<ti>::value_type;
|
||||
using TO = typename element_type_traits<to>::value_type;
|
||||
runtime::reference::convert<TI, TO>(inputs[0]->get_data_ptr<TI>(),
|
||||
outputs[0]->get_data_ptr<TO>(),
|
||||
shape_size(inputs[0]->get_shape()));
|
||||
}
|
||||
} // namespace convert_v0
|
||||
|
||||
template <element::Type_t OUT_ET>
|
||||
bool evaluate(const shared_ptr<op::v0::Convert>& op,
|
||||
const HostTensorVector& outputs,
|
||||
const HostTensorVector& inputs)
|
||||
{
|
||||
switch (inputs[0]->get_element_type())
|
||||
{
|
||||
case element::Type_t::boolean:
|
||||
convert_v0::evaluate<element::Type_t::boolean, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::i8:
|
||||
convert_v0::evaluate<element::Type_t::i8, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::i16:
|
||||
convert_v0::evaluate<element::Type_t::i16, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::i32:
|
||||
convert_v0::evaluate<element::Type_t::i32, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::i64:
|
||||
convert_v0::evaluate<element::Type_t::i64, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::u8:
|
||||
convert_v0::evaluate<element::Type_t::u8, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::u16:
|
||||
convert_v0::evaluate<element::Type_t::u16, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::u32:
|
||||
convert_v0::evaluate<element::Type_t::u32, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::u64:
|
||||
convert_v0::evaluate<element::Type_t::u64, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::f16:
|
||||
convert_v0::evaluate<element::Type_t::f16, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::f32:
|
||||
convert_v0::evaluate<element::Type_t::f32, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::f64:
|
||||
convert_v0::evaluate<element::Type_t::f64, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
case element::Type_t::bf16:
|
||||
convert_v0::evaluate<element::Type_t::bf16, OUT_ET>(op, outputs, inputs);
|
||||
break;
|
||||
default: return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace convert_like_v1
|
||||
{
|
||||
template <element::Type_t ti, element::Type_t to>
|
||||
|
||||
Reference in new issue
Block a user