@@ -1459,11 +1459,13 @@ struct test_cpy : public test_case {
1459
1459
const ggml_type type_src;
1460
1460
const ggml_type type_dst;
1461
1461
const std::array<int64_t , 4 > ne;
1462
- const std::array<int64_t , 4 > permute;
1462
+ const std::array<int64_t , 4 > permute_src;
1463
+ const std::array<int64_t , 4 > permute_dst;
1463
1464
bool _src_use_permute;
1465
+ bool _dst_use_permute;
1464
1466
1465
1467
std::string vars () override {
1466
- return VARS_TO_STR4 (type_src, type_dst, ne, permute );
1468
+ return VARS_TO_STR5 (type_src, type_dst, ne, permute_src, permute_dst );
1467
1469
}
1468
1470
1469
1471
double max_nmse_err () override {
@@ -1476,23 +1478,30 @@ struct test_cpy : public test_case {
1476
1478
1477
1479
test_cpy (ggml_type type_src = GGML_TYPE_F32, ggml_type type_dst = GGML_TYPE_F32,
1478
1480
std::array<int64_t , 4 > ne = {10 , 10 , 10 , 1 },
1479
- std::array<int64_t , 4 > permute = {0 , 0 , 0 , 0 })
1480
- : type_src(type_src), type_dst(type_dst), ne(ne), permute(permute),
1481
- _src_use_permute (permute[0 ] + permute[1 ] + permute[2 ] + permute[3 ] > 0 ) {}
1481
+ std::array<int64_t , 4 > permute_src = {0 , 0 , 0 , 0 },
1482
+ std::array<int64_t , 4 > permute_dst = {0 , 0 , 0 , 0 })
1483
+ : type_src(type_src), type_dst(type_dst), ne(ne), permute_src(permute_src), permute_dst(permute_dst),
1484
+ _src_use_permute (permute_src[0 ] + permute_src[1 ] + permute_src[2 ] + permute_src[3 ] > 0 ),
1485
+ _dst_use_permute(permute_dst[0 ] + permute_dst[1 ] + permute_dst[2 ] + permute_dst[3 ] > 0 ) {}
1482
1486
1483
1487
ggml_tensor * build_graph (ggml_context * ctx) override {
1484
1488
ggml_tensor * src = ggml_new_tensor (ctx, type_src, 4 , ne.data ());
1485
1489
ggml_set_param (ctx, src);
1486
1490
ggml_set_name (src, " src" );
1487
1491
1488
1492
if (_src_use_permute) {
1489
- src = ggml_permute (ctx, src, permute [0 ], permute [1 ], permute [2 ], permute [3 ]);
1493
+ src = ggml_permute (ctx, src, permute_src [0 ], permute_src [1 ], permute_src [2 ], permute_src [3 ]);
1490
1494
ggml_set_name (src, " src_permuted" );
1491
1495
}
1492
1496
1493
- ggml_tensor* dst = ggml_new_tensor (ctx, type_dst, 4 , src->ne );
1497
+ ggml_tensor * dst = ggml_new_tensor (ctx, type_dst, 4 , src->ne );
1494
1498
ggml_set_name (dst, " dst" );
1495
1499
1500
+ if (_dst_use_permute) {
1501
+ dst = ggml_permute (ctx, dst, permute_dst[0 ], permute_dst[1 ], permute_dst[2 ], permute_dst[3 ]);
1502
+ ggml_set_name (dst, " dst_permuted" );
1503
+ }
1504
+
1496
1505
ggml_tensor * out = ggml_cpy (ctx, src, dst);
1497
1506
ggml_set_name (out, " out" );
1498
1507
@@ -3930,13 +3939,13 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() {
3930
3939
}
3931
3940
3932
3941
// same-type copy
3933
- for (int nb = 1 ; nb < 4 ; ++nb) {
3934
- for (ggml_type type : all_types) {
3935
- const auto neb = ggml_blck_size (type);
3942
+ for (ggml_type type : all_types) {
3943
+ const auto nk = ggml_blck_size (type);
3936
3944
3937
- test_cases.emplace_back (new test_cpy (type, type, {nb*neb, 2 , 3 , 4 }, {0 , 1 , 2 , 3 }));
3938
- test_cases.emplace_back (new test_cpy (type, type, {nb*neb, 2 , 3 , 4 }, {0 , 2 , 1 , 3 }));
3939
- test_cases.emplace_back (new test_cpy (type, type, {nb*neb, 2 , 3 , 4 }, {0 , 3 , 1 , 2 }));
3945
+ for (int k = 1 ; k < 4 ; ++k) {
3946
+ test_cases.emplace_back (new test_cpy (type, type, {k*nk, 2 , 3 , 4 }));
3947
+ test_cases.emplace_back (new test_cpy (type, type, {k*nk, 2 , 3 , 4 }, {0 , 2 , 1 , 3 }));
3948
+ test_cases.emplace_back (new test_cpy (type, type, {k*nk, 2 , 3 , 4 }, {0 , 3 , 1 , 2 }, {0 , 2 , 1 , 3 }));
3940
3949
}
3941
3950
}
3942
3951
0 commit comments