aboutsummaryrefslogtreecommitdiff
path: root/chapters/introduction.adoc
AgeCommit message (Collapse)Author
2024-01-15Main Conformance: TANH change, SCATTER clarificationDominic Symes
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>
2024-01-09Fix typo in i48_t descriptionEric Kunze
i48_t is 48-bit, not 32-bit. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Icd602931ffb5d74842359fae2a8885e96b85bf59
2024-01-09Main Conformance: Clarify REDUCE_PRODUCT conformanceDominic Symes
Update the REDUCE_PRODUCT conformance description to be consistent with EXP, POW, TANH, SIGMOID. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I083c41ce09e70b51d07cfea30a4bbc4dff4a8657
2024-01-08Add note to POW accuracyEric Kunze
Cannot raise a negative base to a non-integral power. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I851006abc30bccb612b2a41e27f5c259bb221e41
2023-12-04Main Conformance: Update SIGMOID, TANH precisionDominic Symes
Change SIGMOID, TANH precision to allow an implementation using EXP. The bound is based on the EXP bound. Change-Id: I19582b31753ac614a1064a1b81961dbc54acf823 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-11-22Main Conformance: Update RSQRT precisionDominic Symes
Change RSQRT precision to 2 ulp to allow unfused square root and reciprocal. Also fixes: - a typo in EXP and POW conformance - exp2() handling of large negative values - symmetry about 0 of test set S=4 data generation - err_bnd cannot be negative - ulp not taken for reference value of 0 Change-Id: Idaeeb7b615f1634e8e09dea5f82827039780b462 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-11-01Main Conformance: Update EXP, POW precisionDominic Symes
EXP and POW are complex to implement in a precise number of ulp and a more flexible precision is given. Additionally, the test generater S=5 has the bias values changed to zero. If the bias values are non-zero then a bias for all output tensor elements of the channel can affect the dot product bias test. The numeric accuracy helpers are updated for bf16. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: Ia46a2ef4d577244b6983a08ce850de3db9573a42
2023-10-09Main conformance: clarify floating point accuracyDominic Symes
Clarify how to compare with an error range of a given number of ulp in this specification. Denormals may be flushed to zero. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I1158e777030c4770d74f1acff84ab98e4a3420ac
2023-09-26Define missing accuracy boundsEric Kunze
REDUCE_MIN, REDUCE_MAX, SELECT did not have an accuracy bound defined. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I0fea091752dfcdc2bb55eae7becc68b9c1860e9e
2023-09-12Main Conformance: Add local_bound to RFFT2DDominic Symes
Also express the fp32_t acc_min_normal calculation without a double negation. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I34ba274264bc511e60f0e01601d5d0a3f983e594
2023-09-07Main Conformance: Update dot product error boundv0.90a0Dominic Symes
Update the error bound for dot product operations to allow floating point accumulators where denormal values are flushed to zero. Change-Id: I1d5805f0ad613ca9d78c6a6da12e31d7df5f6cc4 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-08-17Change TOSA specification to signless typesEric Kunze
Integer inputs and outputs to TOSA operators are now defined as signless values. In most instances the operator will used signed arithmetic as indicated in previous versions of the specification resulting in little functional change to the specification. New attributes have been added to the RESCALE operator to indicate whether the input and output values should be treated as signed or unsigned. Explicit use of static_cast, sign_extend, zero_extend and truncate are added to the pseudocode to avoid ambiguity. Change-Id: I71c67d3e5aeaabc418c768f821fce6ee3eebb65b
2023-08-16Main conformance: Add local bound flag for convolutionsDominic Symes
Adds a local_bound flag to convolution operations. If the local_bound flag is true then the output accuracy for floating-point is measured relative to the input tensor data local to the particular convolution output. If the local_bound flag is false then the output accuracy for floating-point is measured relative to the whole input tensor. This accuracy measure is the default and more approapriate for implementations with non local optimizations (such as transform based fast convolutions). Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I64e3e4981a63e26e6391149e28d5d71e7ef5560a
2023-08-16Add DIM operator and operations on shape_t valuesDominic Symes
Shape inference derives the shape of tensors in the graph from input shapes. Operations such as RESHAPE may need calculations to derive the new tensor shape. This patch: - Adds a DIM operator to get the size of a tensor in a given axis as a rank 0 tensor of type shape_t - Allows RESHAPE to take a 1D shape tensor as input for the new shape - Allows RESIZE, TILE, PAD to take input sizes based on shape tensors. - Allows ADD, SUB, MUL, INTDIV to operate on rank 0 shape_t tensors - Allows CONCAT to concatenate 0D shape_t tensors to a 1D shape_t tensor - Adds CONST support for shape_t tensors In this version of the specification shape tensors must be resolvable to constants at backend compile time. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I484bd44452453b5e05d0d8a82689564587b224e4
2023-07-24COND_IF/WHILE_LOOP: Add nesting level limitDominic Symes
Nesting of if/while is bounded by MAX_NESTING, set accoring to the TOSA level. Change-Id: If9435a143ffa6bd7ba2e46a68542459b3d723b76 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-06-21Add ERF activation functionEric Kunze
Defined for floating-point types only. For integer versions, a TABLE should be used. Change-Id: Ieaec6e6eb3227c5dcd9741cddd57426002a8db4d Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2023-05-24Formalise the description of operator argument typesKevin Petit
- Standardise the terminology for operator arguments. Argument, Operand, and Parameter were used interchangeably. - Introduce a templatized tensor_t<> type for tensor arguments. Scalars are represented by rank-0 tensors. - Types can be checked with the XSD schema. Signed-off-by: Kevin Petit <kevin.petit@arm.com> Change-Id: Ic57b9387950824e994c5e7f9ec1489c29159b974
2023-05-22Update descriptions for activation functions.Eric Kunze
Provide the mathematical formulas for sigmoid and tanh. Define the operation function for sigmoid and tanh for floating-point numbers. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Ib949d2e8e06309e5c5292aa0192746ad0f9b1f11
2023-05-18Replace uint6_t with int8_tKevin Petit
Add REQUIRE statements to constrain the range where needed. Also fix a typo. Change-Id: I281e6249d8951b4cb3ff19eaf199660bed3feac9 Signed-off-by: Kevin Petit <kevin.petit@arm.com>
2023-05-09Main inference compliance testing updatesDominic Symes
- Add additional main inference compliance test data sets for dot product testing in Appendix A. - Express dot product test criteria in terms of tensors rather than individual dot products. - Add per-operation details on test set generation in Appendix A. - Clarify compliance vs conformance wording. - Clarify that the comment in the table of section 1.8.2 on integer saturation applies to the CAST from floating point to integer operation. Change-Id: I1b4c4493b02ed7c8a6eb547656c91ca67d4b0e86 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-04-27Move the tensor size limit into the level range definitionDominic Symes
The tensor size in bytes must fit within the level defined size range. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I131e3aa7e8666b4d0093ae8198367f243081da51
2023-04-26Generate level maximums from the XMLKevin Petit
Also make LEVEL_CHECKs unconditional in pseudocode. The various MAX_* maximums are always defined. Change-Id: Iee5d8ade5cba3b4f86cc09f8b867b59fe18f5cfe Signed-off-by: Kevin Petit <kevin.petit@arm.com>
2023-04-18Fix description of tensor size limitKevin Petit
Also replace all instances of "co-ordinate" with "coordinate" for consistency. Signed-off-by: Kevin Petit <kevin.petit@arm.com> Change-Id: Idff73092711d3ff85bf4db33df92924c754cf451
2023-02-24Main inference conformance additionsDominic Symes
Add a check on the error bias for dot product calculations and slightly increase the error variance bound for dot products. Change-Id: I518704d1fb1b109695b0f90f7ca6733850e6a8c7 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2023-02-01Main inference conformance draftDominic Symes
This patch contains a draft of the Main Inference profile floating-point conformance requirements. Change-Id: Ib1201fff7f4015668b2de6dccf4cd85b419c3f76 Signed-off-by: Dominic Symes <dominic.symes@arm.com>
2022-12-05Add Levels defintionDominic Symes
Add definition of Level 1.0. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I1b34ae22396f273cc5ecdf99198fdbece6e2809c
2022-10-19Define the index type for tensor co-ordinatesDominic Symes
Tensor co-ordinate indices are signed 32-bit values in this version of the specification. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I6b8dde500ef9c4c4c5688c1a43f8d658863e4a49
2022-06-30Relax limit on input value for RESCALEEric Kunze
The current value is too strict, and can lead to some cases to fail. By making the new value limit between (-1 << shift-1) and (1 << shift-1), we still restrict the input value a range that works for optimized implementations that left shift their values before multiplying. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Ib4f49732e361418884888d398087560da3ccd6e8
2022-06-17Initial work on floating-point type definitionEric Kunze
Define operations in terms of common floating-point data types. Definitions for the data types are in the introduction. Added a section to describe status of the different profiles. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Iac57026806acfb7913f40af61176322fb02b7cc1
2022-06-17Rework the introductionEric Kunze
The information on quantization and numerics was out of date. The tensor access helpers were also consolidated and moved into their own section in the pseudocode chapter. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I472e674ed88f4a3ef379010cf50b13cf8afa5f17
2022-05-16Add the uint16_t data typeEric Kunze
An unsigned 16-bit integer data type for use with image networks. Limited to only operating with the RESCALE operator for conversion to signed int16. Zero point can be 0 or 32768 in the RESCALE to allow for no loss of precision (by subtracting 32768), or keeping all values as positive, (zero point=0) with scaling/clipping as defined in the other RESCALE arguments. Change-Id: Id1aebab68fa207f8f8cc235fc3fa5d050307198e Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2022-05-03Specify width of integer typesDominic Symes
Clarify for types previously definded as int the width assumed by the specification. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: Ied62d4803a4323a600d33cff09752a76ca48f18d
2022-03-15Update floating point edge casesEric Kunze
Cover cases where NaN, +/- 0, +/- infinity are involved Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I1a5a23c7b856ddb997f7cdc00282420294ef3e6d
2022-02-03TABLE: Clarify the interpolation slope rangeDominic Symes
The interpolation slope must not exceed int16_t range. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: Ic9037dcc11c293c78b9398952118a129e3be66f5
2022-01-24apply_scale_32: adjust range checkingDominic Symes
Range checking adjusted to test that optimized implementations with prior left shift do not overflow. Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I45a851a1dfc1f1a767f912bb1429d047ed0fb110
2022-01-07Ensure ranks match in apply_broadcastEric Kunze
ERROR_IF to make sure rank(index) == rank(out_shape) Also try to better explain what the expected value for index is. Change-Id: I0731324d33335cb1ffc0a6fbd153fbc8521ce2e9 Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2022-01-07Add rudimentary spell check for specificationEric Kunze
We can't easily spell check the entire specification, the pseudocode and operator tables make it unworkable. This adds a simple python script that tries to extract just the description of the operators for checking. It also does a check over the entire license. A custom dictionary is used to contain specification custom words. Change-Id: I74558c03af1506e2970f20b3246d920c2753ca44 Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2021-10-28Remove zp subtraction from tensor_read pseudocodeEric Kunze
Operators which use the zero-point functionalty for 8-bit integer processing are updated to do the zero-point subtract in their pseudocode. Note that the PAD operator no longer takes a zero point argument, and instead requires callers to account for the zero point in the pad_const argument. Change-Id: I3bca1cae85aa2093000c420f0433633c347a29de
2021-09-29Allow PAD operator to pad with non-zeroEric Kunze
PAD now takes an additional attribute, with the padding value. Will generally be zero, but other values are allowed. tensor_read now requires the coordinates to be within the given tensor, with unpredictable behavior occurring if an access outside of the tensor occurs. Callers of tensor_read are expected to check the coordinates and take the appropriate action. The primary impact of this is to move the responsibility for padding to each operator. In practice, this is expected to not be a functional change, but a cleanup to make the behavior more clear. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I4f21ca9a13d82d422bbd66c400f23aa9a0bd2aa0
2021-09-16Clarify range limitations for tensorsEric Kunze
Catch zero and negative sized tensors. Clarify configuration of bool_t in the reference model. int4_t limitations on -8 to stay symmetric around 0. Pad values must be >= 0. Stride,dilation values must be >= 1. Change-Id: Idb6ef740f855912a8340475ba319816f90c9b051 Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2021-07-13Add definition of TOSA complianceDominic Symes
Signed-off-by: Dominic Symes <dominic.symes@arm.com> Change-Id: I2e25d0467843adb078d5ab9fd681af40b2ffa52e
2021-06-24Replace assert with REQUIRE()Eric Kunze
REQUIRE is a direct replacement for the asserts, and uses the unpredictable() function in pseudocode to describe the required conditions for operators Change-Id: I35dc81e083d8e41f16728d992bdb8b06b0271226 Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2021-03-11Make pseudocode block tags consistentEric Kunze
They are all now [source,c++] and use ---- as the delimiter. Also made the pseudocode indentation consistent (4 spaces) in the introduction sections. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I1287a60cfeae8b7e3c63b9fc8885b1ebf3d3386d
2021-03-11Adjust pseudocode types to account for zero pointEric Kunze
When reading tensor values with zero point, the returned value has one more bit than the original to account for zero point. Update cases of apply_clip to properly represent the types involved. Change-Id: I60c17b1b244c34b4f04f042807936ae0f282ce93
2021-03-08Consistency cleanupEric Kunze
Attempt to get consistent across the pseudocode. Change the data types to all be intN_t instead of some cases of intN. Use float_t as the general floating point data type. Be consistent on use of the term "floating-point" Move general pseudocode helpers to their own section. Change-Id: Ie77666cd3ee438c71f39c62b9c424fe687b0bb51 Signed-off-by: Eric Kunze <eric.kunze@arm.com>
2021-01-26Update elementwise operator overviewEric Kunze
Elementwise operators no longer scale their inputs to a common range. The elementwise introductory section reflected the old behavior. Also clear up some language on the unary functions. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I86bf9da8b51e9a64e4fe6766e01f0c35d43d805a
2021-01-25Remove aint8 typeEric Kunze
The aint8 type represented an asymmetrically quantized range. With the change to move scaling fully into the RESCALE operator, the aint8 and int8 types didn't have significant differences in their use with operators. Unifying to a single data type makes things simpler. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I3ee89cbdafdc61293ef1f1bec52398d744e716a1
2020-12-16Disambiguate scale_t in RESIZE commandEric Kunze
scale_t is already defined globally for the rescaling. Move pseudocode for count_leading_zeros to introduction, and use it in the implementation of CLZ. Change-Id: I2453bce93b6dd25e870b8a010fc62af4c001cbf9
2020-11-10Update introduction sectionsEric Kunze
Bring the overview and goals up to date. Incorporate a section on finding the source to the spec and building it. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: I8c862f8e58b01091d5561296702bcae83a8517e9
2020-11-03Add int48 to supported number formatsEric Kunze
Currently only enabled for the accumulator of a convolution and the input to a RESCALE. Signed-off-by: Eric Kunze <eric.kunze@arm.com> Change-Id: Ic5474124b4a8735f12ef9c20c2be48e55767a3fc