@@ -3734,6 +3734,7 @@ struct test_im2col : public test_case {
3734
3734
struct test_conv_2d : public test_case {
3735
3735
const std::array<int64_t , 4 > ne_input;
3736
3736
const std::array<int64_t , 4 > ne_kernel;
3737
+ const ggml_type type_kernel;
3737
3738
const int stride0;
3738
3739
const int stride1;
3739
3740
const int padding0;
@@ -3751,7 +3752,11 @@ struct test_conv_2d : public test_case {
3751
3752
// IM2COL -> MUL_MM graph will be built.
3752
3753
3753
3754
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 ;
3755
3760
}
3756
3761
3757
3762
uint64_t op_flops (ggml_tensor * t) override {
@@ -3782,10 +3787,11 @@ struct test_conv_2d : public test_case {
3782
3787
}
3783
3788
3784
3789
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 ) :
3787
3792
ne_input (ne_input),
3788
3793
ne_kernel (ne_kernel),
3794
+ type_kernel (type_kernel),
3789
3795
stride0 (stride0),
3790
3796
stride1 (stride1),
3791
3797
padding0 (padding0),
@@ -3798,7 +3804,7 @@ struct test_conv_2d : public test_case {
3798
3804
ggml_tensor * input = ggml_new_tensor (ctx, GGML_TYPE_F32, 4 , ne_input.data ());
3799
3805
ggml_set_name (input, " input" );
3800
3806
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 ());
3802
3808
ggml_set_name (kernel, " kernel" );
3803
3809
3804
3810
if (cwhn) {
@@ -5165,10 +5171,13 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
5165
5171
{ 16 , 3 , 256 , 128 , 8 }
5166
5172
};
5167
5173
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
+ }
5172
5181
}
5173
5182
#endif
5174
5183
@@ -5194,8 +5203,10 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
5194
5203
for (uint32_t W : { 1 , 141 }) {
5195
5204
if (calc_conv_output_size (W, KW, s0, p0, d0) > 0 &&
5196
5205
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
+ }
5199
5210
}
5200
5211
}
5201
5212
}
@@ -5840,11 +5851,14 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_perf() {
5840
5851
{ 16 , 3 , 512 , 128 , 8 },
5841
5852
};
5842
5853
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
+ }
5848
5862
}
5849
5863
5850
5864
test_cases.emplace_back (new test_bin_bcast (ggml_add, GGML_TYPE_F32, {4096 , 1 , 1 , 1 }, {1 , 1 , 1 , 1 }));
0 commit comments