@@ -3734,6 +3734,7 @@ struct test_im2col : public test_case {
37343734struct test_conv_2d : public test_case {
37353735 const std::array<int64_t , 4 > ne_input;
37363736 const std::array<int64_t , 4 > ne_kernel;
3737+ const ggml_type type_kernel;
37373738 const int stride0;
37383739 const int stride1;
37393740 const int padding0;
@@ -3751,7 +3752,11 @@ struct test_conv_2d : public test_case {
37513752 // IM2COL -> MUL_MM graph will be built.
37523753
37533754 std::string vars () override {
3754- return VARS_TO_STR9 (ne_input, ne_kernel, stride0, stride1, padding0, padding1, dilation0, dilation1, cwhn);
3755+ return VARS_TO_STR10 (ne_input, ne_kernel, type_kernel, stride0, stride1, padding0, padding1, dilation0, dilation1, cwhn);
3756+ }
3757+
3758+ double max_nmse_err () override {
3759+ return 5e-4 ;
37553760 }
37563761
37573762 uint64_t op_flops (ggml_tensor * t) override {
@@ -3782,10 +3787,11 @@ struct test_conv_2d : public test_case {
37823787 }
37833788
37843789 test_conv_2d (std::array<int64_t , 4 > ne_input = { 64 , 64 , 16 , 1 },
3785- std::array<int64_t , 4 > ne_kernel = { 3 , 3 , 1 , 16 }, int stride0 = 1 , int stride1 = 1 , int padding0 = 0 ,
3786- int padding1 = 0 , int dilation0 = 1 , int dilation1 = 1 , bool cwhn = false ) :
3790+ std::array<int64_t , 4 > ne_kernel = { 3 , 3 , 1 , 16 }, ggml_type type_kernel = GGML_TYPE_F32 , int stride0 = 1 ,
3791+ int stride1 = 1 , int padding0 = 0 , int padding1 = 0 , int dilation0 = 1 , int dilation1 = 1 , bool cwhn = false ) :
37873792 ne_input (ne_input),
37883793 ne_kernel (ne_kernel),
3794+ type_kernel (type_kernel),
37893795 stride0 (stride0),
37903796 stride1 (stride1),
37913797 padding0 (padding0),
@@ -3798,7 +3804,7 @@ struct test_conv_2d : public test_case {
37983804 ggml_tensor * input = ggml_new_tensor (ctx, GGML_TYPE_F32, 4 , ne_input.data ());
37993805 ggml_set_name (input, " input" );
38003806
3801- ggml_tensor * kernel = ggml_new_tensor (ctx, GGML_TYPE_F32 , 4 , ne_kernel.data ());
3807+ ggml_tensor * kernel = ggml_new_tensor (ctx, type_kernel , 4 , ne_kernel.data ());
38023808 ggml_set_name (kernel, " kernel" );
38033809
38043810 if (cwhn) {
@@ -5165,10 +5171,13 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
51655171 { 16 , 3 , 256 , 128 , 8 }
51665172 };
51675173
5168- for (auto act_case : cases) {
5169- test_cases.emplace_back (new test_conv_2d (
5170- { act_case[iwh_idx], act_case[iwh_idx], act_case[Cin_idx], act_case[B_idx] },
5171- { act_case[kwh_idx], act_case[kwh_idx], act_case[Cin_idx], act_case[Cout_idx] }, 1 , 1 , 0 , 0 , 1 , 1 , false ));
5174+ for (auto kernel_type : {GGML_TYPE_F32, GGML_TYPE_F16}) {
5175+ for (auto act_case : cases) {
5176+ test_cases.emplace_back (new test_conv_2d (
5177+ { act_case[iwh_idx], act_case[iwh_idx], act_case[Cin_idx], act_case[B_idx] },
5178+ { act_case[kwh_idx], act_case[kwh_idx], act_case[Cin_idx], act_case[Cout_idx] },
5179+ kernel_type, 1 , 1 , 0 , 0 , 1 , 1 , false ));
5180+ }
51725181 }
51735182#endif
51745183
@@ -5194,8 +5203,10 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
51945203 for (uint32_t W : { 1 , 141 }) {
51955204 if (calc_conv_output_size (W, KW, s0, p0, d0) > 0 &&
51965205 calc_conv_output_size (H, KH, s1, p1, d1) > 0 ) {
5197- test_cases.emplace_back (new test_conv_2d (
5198- { W, H, Cin, 2 }, { KW, KH, Cin, Cout }, s0, s1, p0, p1, d0, d1, false ));
5206+ for (auto kernel_type : {GGML_TYPE_F32, GGML_TYPE_F16}) {
5207+ test_cases.emplace_back (new test_conv_2d (
5208+ { W, H, Cin, 2 }, { KW, KH, Cin, Cout }, kernel_type, s0, s1, p0, p1, d0, d1, false ));
5209+ }
51995210 }
52005211 }
52015212 }
@@ -5840,11 +5851,14 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_perf() {
58405851 { 16 , 3 , 512 , 128 , 8 },
58415852 };
58425853
5843- for (auto act_case : cases) {
5844- // Direct CONV_2D
5845- test_cases.emplace_back (new test_conv_2d (
5846- { act_case[iwh_idx], act_case[iwh_idx], act_case[Cin_idx], act_case[B_idx] },
5847- { act_case[kwh_idx], act_case[kwh_idx], act_case[Cin_idx], act_case[Cout_idx] }, 1 , 1 , 0 , 0 , 1 , 1 , false ));
5854+ for (auto kernel_type : {GGML_TYPE_F32, GGML_TYPE_F16}) {
5855+ for (auto act_case : cases) {
5856+ // Direct CONV_2D
5857+ test_cases.emplace_back (new test_conv_2d (
5858+ { act_case[iwh_idx], act_case[iwh_idx], act_case[Cin_idx], act_case[B_idx] },
5859+ { act_case[kwh_idx], act_case[kwh_idx], act_case[Cin_idx], act_case[Cout_idx] },
5860+ kernel_type, 1 , 1 , 0 , 0 , 1 , 1 , false ));
5861+ }
58485862 }
58495863
58505864 test_cases.emplace_back (new test_bin_bcast (ggml_add, GGML_TYPE_F32, {4096 , 1 , 1 , 1 }, {1 , 1 , 1 , 1 }));
0 commit comments