@@ -70,23 +70,27 @@ static std::vector<float> tensor_to_float(const ggml_tensor * t) {
70
70
std::vector<uint8_t > buf (ggml_nbytes (t));
71
71
ggml_backend_tensor_get (t, buf.data (), 0 , ggml_nbytes (t));
72
72
73
+ ggml_type_traits_t tt = ggml_internal_get_type_traits (t->type );
74
+
73
75
// access elements by index to avoid gaps in views
74
76
for (int64_t i3 = 0 ; i3 < t->ne [3 ]; i3++) {
75
77
for (int64_t i2 = 0 ; i2 < t->ne [2 ]; i2++) {
76
78
for (int64_t i1 = 0 ; i1 < t->ne [1 ]; i1++) {
77
- for (int64_t i0 = 0 ; i0 < t->ne [0 ]; i0++ ) {
79
+ for (int64_t i0 = 0 ; i0 < t->ne [0 ]; i0 += ggml_blck_size (t-> type ) ) {
78
80
size_t i = i3*t->nb [3 ] + i2*t->nb [2 ] + i1*t->nb [1 ] + i0*t->nb [0 ];
79
- float v;
80
81
if (t->type == GGML_TYPE_F16) {
81
- v = ( float ) ggml_fp16_to_fp32 (*(ggml_fp16_t *)&buf[i]);
82
+ tv. push_back ( ggml_fp16_to_fp32 (*(ggml_fp16_t *)&buf[i]) );
82
83
} else if (t->type == GGML_TYPE_F32) {
83
- v = *(float *) &buf[i];
84
+ tv. push_back ( *(float *) &buf[i]) ;
84
85
} else if (t->type == GGML_TYPE_I32) {
85
- v = *(int32_t *) &buf[i];
86
+ tv.push_back ((float )*(int32_t *) &buf[i]);
87
+ } else if (ggml_is_quantized (t->type )) {
88
+ std::vector<float > vq (ggml_blck_size (t->type ));
89
+ tt.to_float (&buf[i], vq.data (), ggml_blck_size (t->type ));
90
+ tv.insert (tv.end (), vq.begin (), vq.end ());
86
91
} else {
87
92
GGML_ASSERT (false );
88
93
}
89
- tv.push_back (v);
90
94
}
91
95
}
92
96
}
@@ -320,7 +324,7 @@ struct test_case {
320
324
for (size_t i = 0 ; i < f1.size (); i++) {
321
325
// check for nans
322
326
if (std::isnan (f1[i]) || std::isnan (f2[i])) {
323
- printf (" [%s] NaN at index %zu " , ggml_op_desc (t1), i);
327
+ printf (" [%s] NaN at index %zu (%f %f) " , ggml_op_desc (t1), i, f1[i], f2[i] );
324
328
ud->ok = false ;
325
329
return true ;
326
330
}
@@ -1253,7 +1257,11 @@ static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op
1253
1257
test_cases.emplace_back (new test_repeat (GGML_TYPE_F32, {10 , 10 , 10 , 10 }, {1 , 1 , 1 , 2 }));
1254
1258
1255
1259
test_cases.emplace_back (new test_dup ());
1256
- test_cases.emplace_back (new test_cpy ());
1260
+
1261
+ for (ggml_type type : all_types) {
1262
+ test_cases.emplace_back (new test_cpy (GGML_TYPE_F32, type, {256 , 100 , 100 , 1 }));
1263
+ }
1264
+
1257
1265
test_cases.emplace_back (new test_cont ());
1258
1266
1259
1267
auto add_test_bin_bcast = [&](ggml_type type, std::array<int64_t , 4 > ne, std::array<int , 4 > nr) {
0 commit comments