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:
Jozef Daniecki authored and GitHub committed 2021-05-24 13:05:54 +03:00
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);
}
}
}
+7 -6
View File
@@ -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
+73 -14
View File
@@ -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>