From 08965d35f728d93d8b215753b4b270a422fe39c9 Mon Sep 17 00:00:00 2001 From: Jeremy Johnson Date: Mon, 19 Feb 2024 13:57:21 +0000 Subject: Verifier - change to output largest error deviance Add general validateData function used by ABS_ERROR, ULP, RELATIVE and REDUCE_PRODUCT to find and output largest deviance from the error bounds. Clean up naming inconsistencies bewteen verify modes. Signed-off-by: Jeremy Johnson Change-Id: Ib903faf36f784cacae91edab61d8e489461a727c --- reference_model/src/verify/verify_relative.cc | 30 ++++++++------------------- 1 file changed, 9 insertions(+), 21 deletions(-) (limited to 'reference_model/src/verify/verify_relative.cc') diff --git a/reference_model/src/verify/verify_relative.cc b/reference_model/src/verify/verify_relative.cc index b12daf7..5085fd9 100644 --- a/reference_model/src/verify/verify_relative.cc +++ b/reference_model/src/verify/verify_relative.cc @@ -24,27 +24,13 @@ namespace TosaReference namespace { -template -bool validateData(const double* ref, - const OutDtype* imp, - const std::vector& shape, - const RelativeVerifyInfo& cfg) +double calcErrorBound(double referenceValue, double boundsValue, const void* cfgPtr) { - const size_t T = static_cast(numElements(shape)); - TOSA_REF_REQUIRE(T > 0, "[R] Invalid shape for reference tensor"); + const auto cfg = reinterpret_cast(cfgPtr); + unused(referenceValue); + unused(boundsValue); - double errBound = cfg.max * cfg.scale; - for (size_t i = 0; i < T; ++i) - { - bool valid = tosaCheckFloatBound(imp[i], ref[i], errBound); - if (!valid) - { - auto pos = indexToPosition(i, shape); - WARNING("[Verifier][RP] Location %s", positionToString(pos).c_str()); - return false; - } - } - return true; + return cfg->max * cfg->scale; } } // namespace @@ -61,17 +47,19 @@ bool verifyRelative(const CTensor* referenceTensor, const double* refData = reinterpret_cast(referenceTensor->data); TOSA_REF_REQUIRE(refData != nullptr, "[R] Missing data for reference"); + const std::string modeStr = "R"; + switch (implementationTensor->data_type) { case tosa_datatype_fp32_t: { const auto* impData = reinterpret_cast(implementationTensor->data); TOSA_REF_REQUIRE(impData != nullptr, "[R] Missing data for implementation"); - return validateData(refData, impData, refShape, rInfo); + return validateData(refData, nullptr, impData, refShape, modeStr, &rInfo, &calcErrorBound); } case tosa_datatype_fp16_t: { const auto* impData = reinterpret_cast(implementationTensor->data); TOSA_REF_REQUIRE(impData != nullptr, "[R] Missing data for implementation"); - return validateData(refData, impData, refShape, rInfo); + return validateData(refData, nullptr, impData, refShape, modeStr, &rInfo, &calcErrorBound); } default: WARNING("[Verifier][R] Data-type not supported."); -- cgit v1.2.1