|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 |
- #include "megdnn/dtype.h"
- #include "test/arm_common/fixture.h"
- #include "test/common/benchmarker.h"
- #include "test/common/conv_bias.h"
-
- #include "test/arm_common/cpuinfo_help.h"
-
- using namespace megdnn;
- using namespace test;
- using namespace conv_bias;
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONVBIAS_IM2COL_FP32_STRIDE2) {
- #define cb(name) \
- check_conv_bias( \
- get_conv_bias_args({1, 2, 3, 4, 5, 6, 7}, 2, false, false, false), \
- handle(), name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F32K8X12X1") cb("IM2COLMATMUL:AARCH64_F32K4X16X1")
- cb("IM2COLMATMUL:FB_F32_K8X12X1")
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_F32")
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONVBIAS_IM2COL_FP32_STRIDE1) {
- #define cb(name) \
- check_conv_bias( \
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, 1, false, false, false), handle(), \
- name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F32K8X12X1") cb("IM2COLMATMUL:AARCH64_F32K4X16X1")
- cb("IM2COLMATMUL:FB_F32_K8X12X1")
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_F32") cb("IM2COLMATMUL:FB_F32_K8X12X1")
- #endif
- #undef cb
- }
-
- //! CPUINFO ralated test
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_CPUINFO
- TEST_F(ARM_COMMON_MULTI_THREADS, CONVBIAS_IM2COL_FP32_A55) {
- CpuInfoTmpReplace cpu_replace_guard(cpuinfo_uarch_cortex_a55);
- #define cb(name, stride) \
- check_conv_bias( \
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, stride, false, false, false), \
- handle(), name);
-
- cb("IM2COLMATMUL:AARCH64_F32K8X12X1", 1) cb("IM2COLMATMUL:AARCH64_F32K8X12X1", 2)
- #undef cb
- }
- #endif
- #endif
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_CPUINFO
- TEST_F(ARM_COMMON_MULTI_THREADS, CONVBIAS_IM2COL_FP32_A53) {
- CpuInfoTmpReplace cpu_replace_guard(cpuinfo_uarch_cortex_a53);
- #define cb(name, stride) \
- check_conv_bias( \
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, stride, false, false, false), \
- handle(), name);
-
- cb("IM2COLMATMUL:AARCH64_F32K8X12X1", 1) cb("IM2COLMATMUL:AARCH64_F32K8X12X1", 2)
- #undef cb
- }
- #endif
- #endif
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_CPUINFO
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COL_MK4_PACK_F32_A55) {
- CpuInfoTmpReplace cpu_replace_guard(cpuinfo_uarch_cortex_a55);
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_nchw44_conv_bias_args({2, 3, 7}, FULL_NLMODE, ONLY_NO_BIASMODE, 1);
- check_conv_bias(args, handle(), "IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- args = get_nchw44_conv_bias_args({2, 3, 7}, FULL_NLMODE, ONLY_NO_BIASMODE, 2);
- check_conv_bias(args, handle(), "IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- }
- #endif
- #endif
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_CPUINFO
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COL_MK4_PACK_F32_A53) {
- CpuInfoTmpReplace cpu_replace_guard(cpuinfo_uarch_cortex_a53);
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_nchw44_conv_bias_args({2, 3, 7}, FULL_NLMODE, ONLY_NO_BIASMODE, 1);
- check_conv_bias(args, handle(), "IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- args = get_nchw44_conv_bias_args({2, 3, 7}, FULL_NLMODE, ONLY_NO_BIASMODE, 2);
- check_conv_bias(args, handle(), "IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- }
- #endif
- #endif
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, 1, false, false, false, true, true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name); \
- checker_conv_bias_common( \
- get_conv_bias_args({1}, 2, false, false, false, true, true), handle(), \
- &rng, epsilon, dtype::QuantizedS8(2.5f), dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS32(6.25f), dtype::QuantizedS8(60.25f), name);
-
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K8X12X4_DOTPROD");
- #else
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K8X8X8");
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K4X4X16");
- #endif
- #elif MEGDNN_ARMV7
- epsilon = 1;
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_K4X8X8");
- #endif
- #undef cb
- }
-
- #if MGB_ENABLE_DOT
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_MK4_DOT) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 1, false, \
- false, true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name); \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {1}, ONLY_IDENTITY_NLMODE, ONLY_BR_BIASMODE, 2, false, false, \
- true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
-
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_8X12X4_DOTPROD:96");
- #elif MEGDNN_ARMV7
- epsilon = 1;
- cb("IM2COLMATMUL:AARCH32_INT8_MK4_8X4X4_DOTPROD:96");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_MK4_DOT_S2_FUSE) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {3}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 2, false, false, true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
-
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_8X12X4_DOTPROD:96");
- #elif MEGDNN_ARMV7
- epsilon = 1;
- cb("IM2COLMATMUL:AARCH32_INT8_MK4_8X4X4_DOTPROD:96");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_S8x8x32_MK4_DOT) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, ONLY_IDENTITY_NLMODE, BR_AND_BIAS_BIASMODE, 1, \
- false, false, true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), {}, name); \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {1}, ONLY_IDENTITY_NLMODE, BR_AND_BIAS_BIASMODE, 2, false, false, \
- true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), {}, name);
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_8X12X4_DOTPROD:96");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:AARCH32_INT8_MK4_8X4X4_DOTPROD:96");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_INT8x8x32_MK4_DOT) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, ONLY_IDENTITY_NLMODE, BR_AND_NO_BIASMODE, 1, \
- false, false, true), \
- handle(), &rng, epsilon, dtype::Int8(), dtype::Int8(), dtype::Int32(), {}, \
- name); \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {1}, ONLY_IDENTITY_NLMODE, BR_AND_BIAS_BIASMODE, 2, false, false, \
- true), \
- handle(), &rng, epsilon, dtype::Int8(), dtype::Int8(), dtype::Int32(), {}, \
- name);
-
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_8X12X4_DOTPROD:96");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:AARCH32_INT8_MK4_8X4X4_DOTPROD:96");
- #endif
- #undef cb
- }
- #endif
-
- // clang-format on
- #if MEGDNN_AARCH64 || MEGDNN_ARMV7
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDASYM) {
- NormalRNG rng(128.f);
- #define cb(name) \
- checker_conv_bias_common( \
- get_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, 1, false, false, false, true, true), \
- handle(), &rng, epsilon, dtype::Quantized8Asymm(1.2f, (uint8_t)125), \
- dtype::Quantized8Asymm(1.3f, (uint8_t)129), \
- dtype::QuantizedS32(1.2 * 1.3), \
- dtype::Quantized8Asymm(50.3f, (uint8_t)120), name); \
- checker_conv_bias_common( \
- get_conv_bias_args({1}, 2, false, false, false, true, true), handle(), \
- &rng, epsilon, dtype::Quantized8Asymm(1.2f, (uint8_t)125), \
- dtype::Quantized8Asymm(1.3f, (uint8_t)129), \
- dtype::QuantizedS32(1.2 * 1.3), \
- dtype::Quantized8Asymm(50.3f, (uint8_t)120), name);
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH64_QUINT8_K8X8X4_DOTPROD");
- #else
- cb("IM2COLMATMUL:AARCH64_QUINT8_K8X8X8");
- #endif
- #elif MEGDNN_ARMV7
- epsilon = 1;
- cb("IM2COLMATMUL:ARMV7_QUINT8_K4X8X8");
- #endif
- #undef cb
- }
- #endif
-
- #if MEGDNN_AARCH64 || MEGDNN_ARMV7
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUINT8x8x32) {
- UniformIntRNG rng{-50, 50};
- float epsilon = 0.001;
- #define cb(name) \
- checker_conv_bias_common( \
- get_conv_bias_args( \
- {2, 3, 4, 5, 6, 7}, 1, false, false, true, true, false), \
- handle(), &rng, epsilon, dtype::Quantized8Asymm(1.2f, (uint8_t)125), \
- dtype::Quantized8Asymm(1.3f, (uint8_t)129), \
- dtype::QuantizedS32(1.2 * 1.3), {}, name); \
- checker_conv_bias_common( \
- get_conv_bias_args({1}, 2, false, false, true, true, false), handle(), \
- &rng, epsilon, dtype::Quantized8Asymm(1.2f, (uint8_t)125), \
- dtype::Quantized8Asymm(1.3f, (uint8_t)129), \
- dtype::QuantizedS32(1.2 * 1.3), {}, name);
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH64_QUINT8_K8X8X4_DOTPROD");
- #else
- cb("IM2COLMATMUL:AARCH64_QUINT8_K8X8X8");
- #endif
- #elif MEGDNN_ARMV7
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH32_QUINT8_K4X8X4");
- #endif
- cb("IM2COLMATMUL:ARMV7_QUINT8_K4X8X8");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONVBIAS_IM2COLMATMUL_INT8x8x16) {
- UniformIntRNG rng{-50, 50};
- float epsilon = 0.001;
- std::vector<conv_bias::TestArg> args_nchw44 = get_nchw44_conv_bias_args(
- {2, 3, 4, 5, 6, 7}, ONLY_IDENTITY_NLMODE, BR_AND_BIAS_BIASMODE, 1, true);
- std::vector<conv_bias::TestArg> args_nchw44_1x1s2 = get_nchw44_conv_bias_args(
- {1}, ONLY_IDENTITY_NLMODE, BR_AND_BIAS_BIASMODE, 2, true);
- #define cb(name) \
- checker_conv_bias_common( \
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, 1, false, false, true), handle(), \
- &rng, epsilon, dtype::Int8{}, dtype::Int8{}, dtype::Int16{}, \
- dtype::Int16{}, name); \
- checker_conv_bias_common( \
- get_conv_bias_args({1}, 2, false, false, true), handle(), &rng, epsilon, \
- dtype::Int8{}, dtype::Int8{}, dtype::Int16{}, dtype::Int16{}, name);
-
- #define cb_nchw44(name) \
- checker_conv_bias_common( \
- args_nchw44, handle(), &rng, epsilon, dtype::Int8{}, dtype::Int8{}, \
- dtype::Int16{}, dtype::Int16{}, name); \
- checker_conv_bias_common( \
- args_nchw44_1x1s2, handle(), &rng, epsilon, dtype::Int8{}, dtype::Int8{}, \
- dtype::Int16{}, dtype::Int16{}, name);
-
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X16_K8X8X8");
- cb("IM2COLMATMUL:AARCH64_INT8X8X16_K4X4X16");
- cb_nchw44("IM2COLMATMUL:AARCH64_INT8X8X16_MK4_4X4X8");
- cb_nchw44("IM2COLMATMUL:AARCH64_INT8X8X16_MK4_16X12X4");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_INT8X8X16_K4X8X8");
- cb("IM2COLMATMUL:ARMV7_INT8X8X16_K4X2X16");
- cb_nchw44("IM2COLMATMUL:ARMV7_INT8X8X16_MK4_K8X8X4");
- #endif
- cb("IM2COLMATMUL:ARM_COMMON_INT8X8X16");
-
- #undef cb
- #undef cb_nchw44
- }
-
- #endif
-
- #if __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_FP16) {
- using namespace conv_bias;
-
- param::ConvBias cur_param;
-
- std::vector<conv_bias::TestArg> args =
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, 1, false, false, false);
- std::vector<conv_bias::TestArg> args1 =
- get_conv_bias_args({1}, 2, false, false, false);
- args.insert(args.begin(), args1.begin(), args1.end());
-
- NormalRNG rng(1);
- #define cb(name) \
- checker_conv_bias_common( \
- args, handle(), &rng, 0.03, dtype::Float16{}, dtype::Float16{}, \
- dtype::Float16{}, dtype::Float16{}, name);
-
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F16_K8X24X1");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:AARCH32_F16_K4X16X1");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_MK8_FP16) {
- using namespace conv_bias;
-
- std::vector<conv_bias::TestArg> args = get_nchw88_conv_bias_args(
- {2, 3, 4, 5, 6, 7}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 1);
- auto args1 = get_nchw88_conv_bias_args(
- {2, 3, 4, 5, 6, 7}, QUAN_NLMODE, BR_AND_BIAS_BIASMODE, 2, 3);
- args.insert(args.begin(), args1.begin(), args1.begin());
- args1 = get_nchw88_conv_bias_args(
- {2, 3, 4, 5, 6, 7, 9}, QUAN_NLMODE, BR_AND_BIAS_BIASMODE, 3, 4);
- args.insert(args.begin(), args1.begin(), args1.begin());
-
- NormalRNG rng(1);
- #define cb(name) \
- checker_conv_bias_common( \
- args, handle(), &rng, 0.03, dtype::Float16{}, dtype::Float16{}, \
- dtype::Float16{}, dtype::Float16{}, name);
-
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F16_MK8_16X12X1");
- #endif
- #undef cb
- }
- #endif
-
- #if MEGDNN_AARCH64 || MEGDNN_ARMV7
- //! enable none dot algo now
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_INT8x8x32NCHW44_S2) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args = get_nchw44_conv_bias_args(
- {2, 5, 7}, ONLY_IDENTITY_NLMODE, BR_AND_NO_BIASMODE, 2, false);
-
- #define cb(name) checker_conv_bias_mul_int8x8x32(args, handle(), name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_4X4X16:96");
- #else
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_MK4_4X2X16:96");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_INT8x8x32NCHW44_S1) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args = get_nchw44_conv_bias_args(
- {3, 4, 6}, ONLY_IDENTITY_NLMODE, BR_AND_NO_BIASMODE, 1);
-
- #define cb(name) checker_conv_bias_mul_int8x8x32(args, handle(), name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_4X4X16:96");
- #else
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_MK4_4X2X16:96");
- #endif
-
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_NCHW44_S2) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args({3, 4, 6}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 2), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_4X4X16:96");
- #else
- epsilon = 1;
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_MK4_4X2X16:96");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_NCHW44_S1) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args({2, 5, 7}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 1), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
- float epsilon = 0.001;
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_4X4X16:96");
- #else
- epsilon = 1;
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_MK4_4X2X16:96");
- #endif
- #undef cb
- }
-
- #if MEGDNN_AARCH64
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_NCHW44_FUSE) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args({3}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 1), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
- float epsilon = 0.001;
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_4X4X16:96");
- #undef cb
- }
-
- #endif
- #endif
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_DOT
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_QUANTIZEDSYM_NCHW44DOT_FUSE) {
- UniformIntRNG rng{-50, 50};
-
- #define cb(name) \
- checker_conv_bias_common( \
- get_nchw44_conv_bias_args( \
- {3}, QUAN_NLMODE, BR_AND_NO_BIASMODE, 1, false, false, true), \
- handle(), &rng, epsilon, dtype::QuantizedS8(2.5f), \
- dtype::QuantizedS8(2.5f), dtype::QuantizedS32(6.25f), \
- dtype::QuantizedS8(60.25f), name);
- float epsilon = 0.001;
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_MK4_8X12X4_DOTPROD:96");
- #undef cb
- }
- #endif
- #endif
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COLMATMUL_INT8x8x32) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_conv_bias_args({2, 3, 4, 5, 6, 7}, 1, false, true, true);
- std::vector<conv_bias::TestArg> args1 =
- get_conv_bias_args({1}, 2, false, true, true);
- args.insert(args.begin(), args1.begin(), args1.end());
-
- #define cb(name) checker_conv_bias_mul_int8x8x32(args, handle(), name);
-
- #if MEGDNN_AARCH64
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K8X12X4_DOTPROD");
- #else
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K8X8X8");
- cb("IM2COLMATMUL:AARCH64_INT8X8X32_K4X4X16");
- #endif
- #elif MEGDNN_ARMV7
- #if MGB_ENABLE_DOT
- cb("IM2COLMATMUL:AARCH32_INT8_K6X8X4");
- #endif
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_K4X8X8");
- #endif
-
- #if MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_INT8X8X32_K4X2X16");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COL_S1_MK4_PACK_F32) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_nchw44_conv_bias_args({2, 4, 7}, FULL_NLMODE, BR_AND_BIAS_BIASMODE, 1);
- #if MEGDNN_AARCH64
- check_conv_bias(args, handle(), "IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- #elif MEGDNN_ARMV7
- check_conv_bias(args, handle(), "IM2COLMATMUL:ARMV7_F32_MK4_PACK_4X12");
- #endif
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COL_S2_MK4_PACK_F32) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_nchw44_conv_bias_args({3, 5, 6}, FULL_NLMODE, BR_AND_BIAS_BIASMODE, 2);
- #define cb(name) check_conv_bias(args, handle(), name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_F32_MK4_PACK_4X12");
- #endif
- #undef cb
- }
-
- TEST_F(ARM_COMMON_MULTI_THREADS, CONV_BIAS_IM2COL_S2_MK4_PACK_F32_FUSE) {
- using namespace conv_bias;
- std::vector<conv_bias::TestArg> args =
- get_nchw44_conv_bias_args({3}, FULL_NLMODE, ALL_BIASMODE, 2);
- #define cb(name) check_conv_bias(args, handle(), name);
- #if MEGDNN_AARCH64
- cb("IM2COLMATMUL:AARCH64_F32_MK4_K8X12X1");
- #elif MEGDNN_ARMV7
- cb("IM2COLMATMUL:ARMV7_F32_MK4_PACK_4X12");
- #endif
- #undef cb
- }
-
- // vim: syntax=cpp.doxygen
|