|
|
@@ -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]
|
|
|
+ int64_t IC = 3,
|
|
|
+ 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)
|
|
|
+ : 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;
|
|
|
@@ -4221,7 +4273,7 @@ struct test_conv_3d : public test_case {
|
|
|
ggml_tensor * kernel = ggml_new_tensor(ctx, type_kernel, 4, ne_kernel);
|
|
|
ggml_set_name(kernel, "kernel");
|
|
|
|
|
|
- ggml_tensor * out = ggml_conv_3d(ctx, kernel, input, s0, s1, s2, p0, p1, p2, d0, d1, d2, (int)IC, (int)N, (int)OC);
|
|
|
+ ggml_tensor * out = ggml_conv_3d_direct(ctx, kernel, input, s0, s1, s2, p0, p1, p2, d0, d1, d2, (int)IC, (int)N, (int)OC);
|
|
|
ggml_set_name(out, "out");
|
|
|
return out;
|
|
|
}
|
|
|
@@ -4640,6 +4692,39 @@ struct test_pad : public test_case {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+struct test_pad_ext : public test_case {
|
|
|
+ const ggml_type type;
|
|
|
+ const std::array<int64_t, 4> ne_a;
|
|
|
+ const int lp0;
|
|
|
+ const int rp0;
|
|
|
+ const int lp1;
|
|
|
+ const int rp1;
|
|
|
+ const int lp2;
|
|
|
+ const int rp2;
|
|
|
+ const int lp3;
|
|
|
+ const int rp3;
|
|
|
+
|
|
|
+ std::string vars() override {
|
|
|
+ return VARS_TO_STR10(type, ne_a, lp0, rp0, lp1, rp1, lp2, rp2, lp3, rp3);
|
|
|
+ }
|
|
|
+
|
|
|
+ test_pad_ext(ggml_type type = GGML_TYPE_F32,
|
|
|
+ std::array<int64_t, 4> ne_a = {512, 512, 3, 1},
|
|
|
+ int lp0 = 1, int rp0 = 1, int lp1 = 1, int rp1 = 1,
|
|
|
+ int lp2 = 1, int rp2 = 1, int lp3 = 1, int rp3 = 1)
|
|
|
+ : type(type), ne_a(ne_a), lp0(lp0), rp0(rp0), lp1(lp1), rp1(rp1), lp2(lp2), rp2(rp2), lp3(lp3), rp3(rp3) {}
|
|
|
+
|
|
|
+ ggml_tensor * build_graph(ggml_context * ctx) override {
|
|
|
+ ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne_a.data());
|
|
|
+ ggml_set_name(a, "a");
|
|
|
+
|
|
|
+ ggml_tensor * out = ggml_pad_ext(ctx, a, lp0, rp0, lp1, rp1, lp2, rp2, lp3, rp3);
|
|
|
+ ggml_set_name(out, "out");
|
|
|
+
|
|
|
+ return out;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
// GGML_OP_PAD_REFLECT_1D
|
|
|
struct test_pad_reflect_1d : public test_case {
|
|
|
const ggml_type type;
|
|
|
@@ -5623,6 +5708,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, 10, 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.
|
|
|
@@ -6340,6 +6451,7 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
|
|
|
test_cases.emplace_back(new test_group_norm_mul_add(GGML_TYPE_F32, {9, 9, 1280, 1}));
|
|
|
test_cases.emplace_back(new test_acc());
|
|
|
test_cases.emplace_back(new test_pad());
|
|
|
+ test_cases.emplace_back(new test_pad_ext());
|
|
|
test_cases.emplace_back(new test_pad_reflect_1d());
|
|
|
test_cases.emplace_back(new test_roll());
|
|
|
test_cases.emplace_back(new test_arange());
|