aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic Symes <dominic.symes@arm.com>2023-12-08 17:45:31 +0000
committerDominic Symes <dominic.symes@arm.com>2024-01-15 09:50:58 +0000
commit8754ec288dc491f3a9e936e68a1fd35783c9808e (patch)
tree601cc4c765e97ea8a0450d3f79332e64c1f18ee4
parent2f3f4a2abb894ca608cdf536f5f803dc4c971a04 (diff)
downloadspecification-8754ec288dc491f3a9e936e68a1fd35783c9808e.tar.gz
Main Conformance: TANH change, SCATTER clarification
TANH can have cancellation between exp(x) and exp(-x) for small abs(x). To allow for this, a lower bound of 0.5*exp(-normal_fraction<in_out_t>) is set for the error bound. The TANH formula also can contain 4 exp() values, so the error bound is increased to 4 multiplied by the exp() error bound. SCATTER output size K must be as least as great as the number of indices W, as each index is distinct. Change-Id: I8d1f1c866bd59d8140cf7db76404f5006a04a3f3 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
-rw-r--r--chapters/introduction.adoc8
-rw-r--r--chapters/scatter_gather.adoc1
2 files changed, 8 insertions, 1 deletions
diff --git a/chapters/introduction.adoc b/chapters/introduction.adoc
index 11ba26b..dc45808 100644
--- a/chapters/introduction.adoc
+++ b/chapters/introduction.adoc
@@ -281,12 +281,18 @@ Let `out_ref` be the result of the fp64_t reference implementation of `pow(x,y)`
Let `err_bnd = abs(out_ref) * exp2(-normal_frac<in_out_t>) * (1+abs(log(abs(x))*y))` +
Then `tosa_reference_check_fp_bnd<in_out_t>(out_imp, out_ref, err_bnd)` must be true
-| <<SIGMOID>>, <<TANH>>
+| <<SIGMOID>>
| Let `x` be an input element and `out_imp` the implementation output. +
Let `out_ref` be the result of the fp64_t reference implementation. +
Let `err_bnd = abs(out_ref) * exp2(-normal_frac<in_out_t>) * (2 * (1+abs(x)))` +
Then `tosa_reference_check_fp_bnd<in_out_t>(out_imp, out_ref, err_bnd)` must be true
+| <<TANH>>
+| Let `x` be an input element and `out_imp` the implementation output. +
+Let `out_ref` be the result of the fp64_t reference implementation. +
+Let `err_bnd = exp2(-normal_frac<in_out_t>) * max(0.5, abs(out_ref) * (4 * (1+abs(x))))` +
+Then `tosa_reference_check_fp_bnd<in_out_t>(out_imp, out_ref, err_bnd)` must be true
+
| <<REDUCE_SUM>>
| Each output can be expressed as a dot product of an input vector with a vector of ones. +
This dot product must meet the <<Dot product accuracy requirements>>
diff --git a/chapters/scatter_gather.adoc b/chapters/scatter_gather.adoc
index 1dbda4f..d694d39 100644
--- a/chapters/scatter_gather.adoc
+++ b/chapters/scatter_gather.adoc
@@ -31,6 +31,7 @@ for_each(0 <= n < N, 0 <= w < W, 0 <= c < C) {
The values_out tensor is set to the values_in tensor with data modified as follows: data from the input tensor is inserted at the positions specified by the indices tensor.
N is the number of batches, W the number of indices in each batch, K the range of each index and C the number data channels for each index.
It is not permitted to repeat the same output index within a single SCATTER operation and so each output index occurs at most once.
+It follows that K >= W.
In use cases that require multiple updates to the same output position, these must be decomposed into multiple SCATTER operations.
include::{generated}/operators/SCATTER.adoc[]