@@ -1639,7 +1639,8 @@ TEST(activation_i32_fw_gpu, basic_yxfb_i32_funcs) {
1639
1639
activation_func::negation,
1640
1640
activation_func::relu,
1641
1641
activation_func::clamp,
1642
- activation_func::floor
1642
+ activation_func::floor ,
1643
+ activation_func::abs
1643
1644
};
1644
1645
1645
1646
for (auto func : funcs) {
@@ -1680,6 +1681,76 @@ TEST(activation_i32_fw_gpu, basic_yxfb_i32_funcs) {
1680
1681
case activation_func::floor :
1681
1682
ASSERT_EQ ((int32_t )std::floor (input_ptr[i]), output_ptr[i]);
1682
1683
break ;
1684
+ case activation_func::abs :
1685
+ ASSERT_EQ (std::abs (static_cast <int32_t >(input_ptr[i])), output_ptr[i]);
1686
+ break ;
1687
+ default :
1688
+ break ;
1689
+ }
1690
+ }
1691
+ }
1692
+ }
1693
+
1694
+ TEST (activation_i32_fw_gpu, basic_yxfb_u8_funcs) {
1695
+ auto & engine = get_test_engine ();
1696
+ auto input = engine.allocate_memory ({ data_types::u8, format::yxfb,{ 2 , 2 , 2 , 2 } });
1697
+
1698
+ std::vector<uint8_t > input_vec = {
1699
+ 1 , 0 , 5 , 1 ,
1700
+ 2 , 0 , 6 , 5 ,
1701
+ 3 , 0 , 7 , 12 ,
1702
+ 4 , 0 , 8 , 8
1703
+ };
1704
+ set_values (input, input_vec);
1705
+
1706
+ // functions valid for uint8 type input
1707
+ std::vector<activation_func> funcs = {
1708
+ activation_func::none,
1709
+ activation_func::negation,
1710
+ activation_func::relu,
1711
+ activation_func::clamp,
1712
+ activation_func::floor ,
1713
+ activation_func::abs
1714
+ };
1715
+
1716
+ for (auto func : funcs) {
1717
+ topology topology;
1718
+ activation_additional_params params = {0.0 , 1.0 };
1719
+ topology.add (input_layout (" input" , input->get_layout ()));
1720
+ topology.add (activation (" activation" , input_info (" input" ), func, params));
1721
+
1722
+ network network (engine, topology, get_test_default_config (engine));
1723
+ network.set_input_data (" input" , input);
1724
+ auto outputs = network.execute ();
1725
+
1726
+ ASSERT_EQ (outputs.size (), size_t (1 ));
1727
+ ASSERT_EQ (outputs.begin ()->first , " activation" );
1728
+
1729
+ auto output_memory = outputs.at (" activation" ).get_memory ();
1730
+ auto output_layout = output_memory->get_layout ();
1731
+ cldnn::mem_lock<uint8_t > output_ptr (output_memory, get_test_stream ());
1732
+ cldnn::mem_lock<uint8_t > input_ptr (input, get_test_stream ());
1733
+
1734
+ for (size_t i = 0 ; i < output_layout.get_linear_size (); ++i) {
1735
+ switch (func) {
1736
+ case activation_func::none:
1737
+ ASSERT_EQ ((uint8_t )input_ptr[i], output_ptr[i]);
1738
+ break ;
1739
+ case activation_func::negation:
1740
+ ASSERT_EQ (!((uint8_t )input_ptr[i]), output_ptr[i]);
1741
+ break ;
1742
+ case activation_func::relu:
1743
+ ASSERT_EQ ((uint8_t )(std::max (static_cast <int32_t >(input_ptr[i]), 0 )), output_ptr[i]);
1744
+ break ;
1745
+ case activation_func::clamp:
1746
+ ASSERT_EQ (std::min (std::max (input_ptr[i], static_cast <uint8_t >(params.a )), static_cast <uint8_t >(params.b )), output_ptr[i]);
1747
+ break ;
1748
+ case activation_func::floor :
1749
+ ASSERT_EQ ((uint8_t )std::floor (input_ptr[i]), output_ptr[i]);
1750
+ break ;
1751
+ case activation_func::abs :
1752
+ ASSERT_EQ (std::abs (static_cast <uint8_t >(input_ptr[i])), output_ptr[i]);
1753
+ break ;
1683
1754
default :
1684
1755
break ;
1685
1756
}
0 commit comments