diff options
Diffstat (limited to 'reference_model/include')
-rw-r--r-- | reference_model/include/verify.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/reference_model/include/verify.h b/reference_model/include/verify.h new file mode 100644 index 0000000..0cf6b6c --- /dev/null +++ b/reference_model/include/verify.h @@ -0,0 +1,71 @@ +// Copyright (c) 2023, ARM Limited. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//===----------------------------------------------------------------------===// +// +// Verification functionality as per TOSA Specification +// Output Verification : Section 1.8.2 +// +//===----------------------------------------------------------------------===// + +#include <cstddef> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +// Check result +// +// Error is valid only and only if is_valid is true +struct CheckResult +{ + bool is_valid; + double error; +}; + +/// Validate and calculate tensor element error when using an fp32 accumulator +/// +/// \param ref Tensor element calculated using fp64 +/// \param bnd Tensor element calculated using fp64 on abs(input, weights) +/// \param imp Tensor element calculated through the implementation +/// \param KS The kernel size +/// +/// \return Output error +CheckResult tosa_validate_element_accfp32(double ref, double bnd, float imp, size_t KS); + +/// Validate the accumulated output error +/// +/// \param err_sum Sum of error of all the tensor elements within a tensor +/// \param err_sum_sq Sum of error squares of all the tensor elements within a tensor +/// \param T Number of output (dot-product) elements +/// \param KS The kernel size +/// \param S Test set used as a input/weight generator +/// +/// \return True if the error is within margin else false +bool tosa_validate_output_error(double err_sum, double err_sum_sq, size_t T, size_t KS, int S); + +/// Validate error of whole vector of output data +/// +/// \param ref Output elements calculated using fp64 +/// \param bnd Output elements calculated using fp64 on abs(input, weights) +/// \param imp Output elements calculated using the implementation +/// \param T Number of elements in outputs (need to match) +/// \param KS The kernel size +/// \param S Test set used as a input/weight generator +/// +/// \return True if the error is within margin else false +bool tosa_validate_data_fp32(double* ref, double* bnd, float* imp, size_t T, size_t KS, int S); + +#ifdef __cplusplus +} +#endif /* __cplusplus */
\ No newline at end of file |