mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-24 13:28:50 +01:00
Print backend name on test-backend-ops failure (#4751)
This commit is contained in:
parent
3c0b585561
commit
a91928014f
@ -392,15 +392,21 @@ struct test_case {
|
|||||||
struct callback_userdata {
|
struct callback_userdata {
|
||||||
bool ok;
|
bool ok;
|
||||||
double max_err;
|
double max_err;
|
||||||
|
ggml_backend_t backend1;
|
||||||
|
ggml_backend_t backend2;
|
||||||
};
|
};
|
||||||
|
|
||||||
callback_userdata ud {
|
callback_userdata ud {
|
||||||
true,
|
true,
|
||||||
max_nmse_err(),
|
max_nmse_err(),
|
||||||
|
backend1,
|
||||||
|
backend2
|
||||||
};
|
};
|
||||||
|
|
||||||
auto callback = [](int index, ggml_tensor * t1, ggml_tensor * t2, void * user_data) -> bool {
|
auto callback = [](int index, ggml_tensor * t1, ggml_tensor * t2, void * user_data) -> bool {
|
||||||
callback_userdata * ud = (callback_userdata *) user_data;
|
callback_userdata * ud = (callback_userdata *) user_data;
|
||||||
|
const char * bn1 = ggml_backend_name(ud->backend1);
|
||||||
|
const char * bn2 = ggml_backend_name(ud->backend2);
|
||||||
|
|
||||||
if (t1->op == GGML_OP_NONE) {
|
if (t1->op == GGML_OP_NONE) {
|
||||||
// sentinels must be unchanged
|
// sentinels must be unchanged
|
||||||
@ -422,7 +428,7 @@ struct test_case {
|
|||||||
for (size_t i = 0; i < f1.size(); i++) {
|
for (size_t i = 0; i < f1.size(); i++) {
|
||||||
// check for nans
|
// check for nans
|
||||||
if (std::isnan(f1[i]) || std::isnan(f2[i])) {
|
if (std::isnan(f1[i]) || std::isnan(f2[i])) {
|
||||||
printf("[%s] NaN at index %zu (%f %f) ", ggml_op_desc(t1), i, f1[i], f2[i]);
|
printf("[%s] NaN at index %zu (%s=%f %s=%f) ", ggml_op_desc(t1), i, bn1, f1[i], bn2, f2[i]);
|
||||||
ud->ok = false;
|
ud->ok = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -430,12 +436,12 @@ struct test_case {
|
|||||||
if (isinf_or_max(f1[i]) || isinf_or_max(f2[i])) {
|
if (isinf_or_max(f1[i]) || isinf_or_max(f2[i])) {
|
||||||
if (isinf_or_max(f1[i]) && isinf_or_max(f2[i])) {
|
if (isinf_or_max(f1[i]) && isinf_or_max(f2[i])) {
|
||||||
if (std::signbit(f1[i]) != std::signbit(f2[i])) {
|
if (std::signbit(f1[i]) != std::signbit(f2[i])) {
|
||||||
printf("[%s] inf sign mismatch: %f %f ", ggml_op_desc(t1), f1[i], f2[i]);
|
printf("[%s] inf sign mismatch: %s=%f %s=%f ", ggml_op_desc(t1), bn1, f1[i], bn2, f2[i]);
|
||||||
ud->ok = false;
|
ud->ok = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("[%s] inf mismatch: %f %f ", ggml_op_desc(t1), f1[i], f2[i]);
|
printf("[%s] inf mismatch: %s=%f %s=%f ", ggml_op_desc(t1), bn1, f1[i], bn2, f2[i]);
|
||||||
ud->ok = false;
|
ud->ok = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user