mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-04 09:32:00 +00:00 
			
		
		
		
	add test_im2col_3d to test-backend-ops
This commit is contained in:
		@@ -297,6 +297,8 @@ static std::string var_to_str(ggml_scale_mode mode) {
 | 
			
		||||
#define VARS_TO_STR11(a, b, c, d, e, f, g, h, i, j, k) VAR_TO_STR(a) + "," + VARS_TO_STR10(b, c, d, e, f, g, h, i, j, k)
 | 
			
		||||
#define VARS_TO_STR12(a, b, c, d, e, f, g, h, i, j, k, l) VAR_TO_STR(a) + "," + VARS_TO_STR11(b, c, d, e, f, g, h, i, j, k, l)
 | 
			
		||||
#define VARS_TO_STR13(a, b, c, d, e, f, g, h, i, j, k, l, m) VAR_TO_STR(a) + "," + VARS_TO_STR12(b, c, d, e, f, g, h, i, j, k, l, m)
 | 
			
		||||
#define VARS_TO_STR14(a, b, c, d, e, f, g, h, i, j, k, l, m, n) VAR_TO_STR(a) + "," + VARS_TO_STR13(b, c, d, e, f, g, h, i, j, k, l, m, n)
 | 
			
		||||
#define VARS_TO_STR15(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) VAR_TO_STR(a) + "," + VARS_TO_STR14(b, c, d, e, f, g, h, i, j, k, l, m, n, o)
 | 
			
		||||
 | 
			
		||||
#ifdef GGML_USE_SYCL
 | 
			
		||||
static bool inline _isinf(float f) {
 | 
			
		||||
@@ -4023,6 +4025,56 @@ struct test_im2col : public test_case {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// GGML_OP_IM2COL_3D
 | 
			
		||||
struct test_im2col_3d : public test_case {
 | 
			
		||||
    const ggml_type type_input;
 | 
			
		||||
    const ggml_type type_kernel;
 | 
			
		||||
    const ggml_type dst_type;
 | 
			
		||||
    const std::array<int64_t, 4> ne_input;
 | 
			
		||||
    const std::array<int64_t, 4> ne_kernel;
 | 
			
		||||
    // stride
 | 
			
		||||
    const int s0;
 | 
			
		||||
    const int s1;
 | 
			
		||||
    const int s2;
 | 
			
		||||
    // padding
 | 
			
		||||
    const int p0;
 | 
			
		||||
    const int p1;
 | 
			
		||||
    const int p2;
 | 
			
		||||
    // dilation
 | 
			
		||||
    const int d0;
 | 
			
		||||
    const int d1;
 | 
			
		||||
    const int d2;
 | 
			
		||||
    
 | 
			
		||||
    const int64_t IC;
 | 
			
		||||
 | 
			
		||||
    std::string vars() override {
 | 
			
		||||
        return VARS_TO_STR15(type_input, type_kernel, dst_type, ne_input, ne_kernel, IC, s0, s1, s2, p0, p1, p2, d0, d1, d2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    test_im2col_3d(ggml_type type_input = GGML_TYPE_F32, ggml_type type_kernel = GGML_TYPE_F16, ggml_type dst_type = GGML_TYPE_F32,
 | 
			
		||||
                std::array<int64_t, 4> ne_input = {10, 10, 10, 9}, // [OC*IC, KD, KH, KW]
 | 
			
		||||
                std::array<int64_t, 4> ne_kernel = {3, 3, 3, 1}, // [N*IC, ID, IH, IW]
 | 
			
		||||
                int s0 = 1, int s1 = 1, int s2 = 1,
 | 
			
		||||
                int p0 = 1, int p1 = 1, int p2 = 1,
 | 
			
		||||
                int d0 = 1, int d1 = 1, int d2 = 1,
 | 
			
		||||
                int64_t IC = 3)
 | 
			
		||||
        : type_input(type_input), type_kernel(type_kernel), dst_type(dst_type), ne_input(ne_input), ne_kernel(ne_kernel), s0(s0), s1(s1), s2(s2), p0(p0), p1(p1), p2(p2), d0(d0), d1(d1), d2(d2), IC(IC) {}
 | 
			
		||||
 | 
			
		||||
    ggml_tensor * build_graph(ggml_context * ctx) override {
 | 
			
		||||
        ggml_tensor * input = ggml_new_tensor(ctx, type_input, 4, ne_input.data());
 | 
			
		||||
        ggml_set_param(input);
 | 
			
		||||
        ggml_set_name(input, "input");
 | 
			
		||||
 | 
			
		||||
        ggml_tensor * kernel = ggml_new_tensor(ctx, type_kernel, 4, ne_kernel.data());
 | 
			
		||||
        ggml_set_name(kernel, "kernel");
 | 
			
		||||
 | 
			
		||||
        ggml_tensor * out = ggml_im2col_3d(ctx, kernel, input, IC, s0, s1, s2, p0, p1, p2, d0, d1, d2, dst_type);
 | 
			
		||||
        ggml_set_name(out, "out");
 | 
			
		||||
 | 
			
		||||
        return out;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// CONV_2D
 | 
			
		||||
struct test_conv_2d : public test_case {
 | 
			
		||||
    const std::array<int64_t, 4> ne_input;
 | 
			
		||||
@@ -4227,6 +4279,7 @@ struct test_conv_3d : public test_case {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// GGML_OP_CONCAT
 | 
			
		||||
struct test_concat : public test_case {
 | 
			
		||||
    const ggml_type type;
 | 
			
		||||
@@ -5623,6 +5676,32 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
 | 
			
		||||
    test_cases.emplace_back(new test_im2col(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F16, {12, 12, 2, 2560}, {3, 3, 2, 2560}, 1, 1, 1, 1, 1, 1, true));
 | 
			
		||||
    test_cases.emplace_back(new test_im2col(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F16, {5, 5, 1, 32}, {3, 4, 1, 32}, 1, 1, 0, 0, 1, 1, true));
 | 
			
		||||
 | 
			
		||||
    // im2col 3D
 | 
			
		||||
    test_cases.emplace_back(new test_im2col_3d(GGML_TYPE_F32, GGML_TYPE_F32, GGML_TYPE_F32));
 | 
			
		||||
    test_cases.emplace_back(new test_im2col_3d(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F32));
 | 
			
		||||
    test_cases.emplace_back(new test_im2col_3d(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F16));
 | 
			
		||||
    for (int s0 : {1, 3}) {
 | 
			
		||||
        for (int s1 : {1, 3}) {
 | 
			
		||||
            for (int s2 : {1, 3}) {
 | 
			
		||||
                for (int p0 : {0, 3}) {
 | 
			
		||||
                    for (int p1 : {0, 3}) {
 | 
			
		||||
                        for (int p2 : {0, 3}) {
 | 
			
		||||
                            for (int d0 : {1, 3}) {
 | 
			
		||||
                                for (int d1 : {1, 3}) {
 | 
			
		||||
                                    for (int d2 : {1, 3}) {
 | 
			
		||||
                                        test_cases.emplace_back(new test_im2col_3d(
 | 
			
		||||
                                            GGML_TYPE_F32, GGML_TYPE_F32, GGML_TYPE_F32, {20, 20, 3, 3}, {3, 3, 3, 3},
 | 
			
		||||
                                            3, s0, s1, s2, p0, p1, p2, d0, d1, d2));
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
// Conv_2D test cases
 | 
			
		||||
#ifdef DETAILED_TESTS
 | 
			
		||||
    // Probably we do not have enough time to execute these in the pipeline.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user