aboutsummaryrefslogtreecommitdiff
path: root/chapters/scatter_gather.adoc
diff options
context:
space:
mode:
authorKevin Petit <kevin.petit@arm.com>2024-01-08 15:27:25 +0000
committerKevin Petit <kevin.petit@arm.com>2024-01-15 10:19:01 +0000
commita7ac313a13f8f82b4b3ca9730bd746392f6600d9 (patch)
tree242c97650a951f48a5de96b44e0d5c124ea1c212 /chapters/scatter_gather.adoc
parent8754ec288dc491f3a9e936e68a1fd35783c9808e (diff)
downloadspecification-a7ac313a13f8f82b4b3ca9730bd746392f6600d9.tar.gz
Move operator pseudocode to separate files
This makes it easier to process the pseudocode automatically. Change-Id: I84394192598e589de07d43a7af60b96788e14f86 Signed-off-by: Kevin Petit <kevin.petit@arm.com>
Diffstat (limited to 'chapters/scatter_gather.adoc')
-rw-r--r--chapters/scatter_gather.adoc32
1 files changed, 3 insertions, 29 deletions
diff --git a/chapters/scatter_gather.adoc b/chapters/scatter_gather.adoc
index d694d39..4632e3a 100644
--- a/chapters/scatter_gather.adoc
+++ b/chapters/scatter_gather.adoc
@@ -1,7 +1,7 @@
//
// This confidential and proprietary software may be used only as
// authorised by a licensing agreement from ARM Limited
-// (C) COPYRIGHT 2020-2021 ARM Limited
+// (C) COPYRIGHT 2020-2024 ARM Limited
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorised
// copies and copies may only be made to the extent permitted
@@ -18,12 +18,7 @@ include::{generated}/operators/GATHER.adoc[]
[source,c++]
----
-for_each(0 <= n < N, 0 <= w < W, 0 <= c < C) {
- index_t k = tensor_read<index_t>(indices, [N,W], [n,w]);
- REQUIRE(0 <= k && k < K);
- in_out_t value = tensor_read<in_out_t>(values, [N,K,C], [n,k,c]);
- tensor_write<in_out_t>(output, [N,W,C], [n,w,c], value);
-}
+include::{pseudocode}/operators/GATHER.tosac[lines=10..-1]
----
==== SCATTER
@@ -38,26 +33,5 @@ include::{generated}/operators/SCATTER.adoc[]
[source,c++]
----
-
-// The following array is used to check compliance that an output position
-// is modified at most once.
-bool_t output_modified[N,K,C];
-
-// Copy the values_in tensor to the values_out tensor.
-// Values not written by the scatter operation are unchanged in the output.
-for_each(0 <= n < N, 0 <= k < K, 0 <= c < C) {
- in_out_t value = tensor_read<in_out_t>(values_in, [N,K,C], [n,k,c]);
- tensor_write<in_out_t>(values_out, [N,K,C], [n, k, c], value);
- output_modified[n,k,c]=false;
-}
-
-// Now perform the SCATTER operation, modifying the positions from the indices tensor
-for_each(0 <= n < N, 0 <= w < W, 0 <= c < C) {
- index_t k = tensor_read<index_t>(indices, [N,W], [n,w]);
- REQUIRE(0 <= k && k < K);
- REQUIRE(output_modified[n,k,c] == false);
- in_out_t value = tensor_read<in_out_t>(input, [N,W,C], [n,w,c]);
- tensor_write<in_out_t>(values_out, [N,K,C], [n, k, c], value);
- output_modified[n,k,c] = true;
-}
+include::{pseudocode}/operators/SCATTER.tosac[lines=10..-1]
----