diff options
author | Grant Watson <grant.watson@arm.com> | 2022-11-16 15:32:39 +0000 |
---|---|---|
committer | Eric Kunze <eric.kunze@arm.com> | 2022-12-15 16:41:27 +0000 |
commit | 64285a1f25e2c7b85ed1f00b7947403e92baea00 (patch) | |
tree | 6d29c54f6497741449339e808508c854ba6a2267 /reference_model/include/operators.h | |
parent | b45db9a696f5df7b233f374248f329c16ee7ae64 (diff) | |
download | reference_model-64285a1f25e2c7b85ed1f00b7947403e92baea00.tar.gz |
Extend reference model API with eager operator execution entrypoints
- Adds a script to generate operators.h and operators.cc
- Adds jinja2 templates for generating operators.h and operators.cc
- Adds unit tests for a subset of the operators generated
- Includes the TOSA specification as a submodule
- Adds supporting C++ and header files
Signed-off-by: Grant Watson <grant.watson@arm.com>
Change-Id: I5b60db4c56113110d8e75fe1152525d258233f9c
Diffstat (limited to 'reference_model/include/operators.h')
-rw-r--r-- | reference_model/include/operators.h | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/reference_model/include/operators.h b/reference_model/include/operators.h new file mode 100644 index 0000000..6e21e95 --- /dev/null +++ b/reference_model/include/operators.h @@ -0,0 +1,337 @@ + +// Copyright (c) 2022, 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. + +// THIS FILE IS GENERATED. DO NOT EDIT! +// See scripts/operator_api/generate_api.py + +#ifndef OPERATORS_H_ +#define OPERATORS_H_ + +#include <stddef.h> +#include <stdint.h> + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + // Note status needs to be aligned with graph_status + enum tosa_status_t + { + tosa_status_valid = 0, + tosa_status_unpredictable = 1, + tosa_status_error = 2 + }; + + enum tosa_mode_t + { + tosa_mode_unknown = 0, + tosa_mode_nearest = 1, + tosa_mode_bilinear = 2, + tosa_mode_min = 3, + tosa_mode_max = 4 + }; + + enum tosa_datatype_t + { + tosa_datatype_bf16_t = 0, + tosa_datatype_bool_t = 1, + tosa_datatype_fp16_t = 2, + tosa_datatype_fp32_t = 3, + tosa_datatype_int16_t = 4, + tosa_datatype_int32_t = 5, + tosa_datatype_int48_t = 6, + tosa_datatype_int4_t = 7, + tosa_datatype_int8_t = 8, + tosa_datatype_uint16_t = 9, + tosa_datatype_uint8_t = 10, + }; + + struct tosa_tensor_t + { + int32_t* shape; + int32_t num_dims; + tosa_datatype_t data_type; + uint8_t* data; + size_t size; + }; + + tosa_status_t tosa_run_argmax(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t tosa_run_avg_pool2d(tosa_tensor_t client_input, + const int32_t client_kernel[2], + const int32_t client_stride[2], + const int32_t client_pad[4], + const int32_t client_input_zp, + const int32_t client_output_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_conv2d(tosa_tensor_t client_input, + tosa_tensor_t client_weight, + tosa_tensor_t client_bias, + const int32_t client_pad[4], + const int32_t client_stride[2], + const int32_t client_dilation[2], + const int32_t client_input_zp, + const int32_t client_weight_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_conv3d(tosa_tensor_t client_input, + tosa_tensor_t client_weight, + tosa_tensor_t client_bias, + const int32_t client_pad[6], + const int32_t client_stride[3], + const int32_t client_dilation[3], + const int32_t client_input_zp, + const int32_t client_weight_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_depthwise_conv2d(tosa_tensor_t client_input, + tosa_tensor_t client_weight, + tosa_tensor_t client_bias, + const int32_t client_pad[4], + const int32_t client_stride[2], + const int32_t client_dilation[2], + const int32_t client_input_zp, + const int32_t client_weight_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_fully_connected(tosa_tensor_t client_input, + const int32_t client_input_zp, + const int32_t client_weight_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_matmul(tosa_tensor_t client_a, + tosa_tensor_t client_b, + const int32_t client_a_zp, + const int32_t client_b_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_max_pool2d(tosa_tensor_t client_input, + const int32_t client_kernel[2], + const int32_t client_stride[2], + const int32_t client_pad[4], + const int32_t client_input_zp, + const int32_t client_output_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_transpose_conv2d(tosa_tensor_t client_input, + tosa_tensor_t client_weight, + tosa_tensor_t client_bias, + const int32_t client_out_pad[4], + const int32_t client_stride[2], + const int32_t client_out_shape[4], + const int32_t client_input_zp, + const int32_t client_weight_zp, + const int32_t client_pad_len, + const int32_t client_pad[], + const int32_t client_dilation_len, + const int32_t client_dilation[], + tosa_tensor_t client_output); + + tosa_status_t tosa_run_clamp(tosa_tensor_t client_input, + const int32_t client_min_int, + const int32_t client_max_int, + const float client_min_fp, + const float client_max_fp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, tosa_tensor_t client_output); + + tosa_status_t tosa_run_tanh(tosa_tensor_t client_input, tosa_tensor_t client_output); + + tosa_status_t tosa_run_add(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t tosa_run_arithmetic_right_shift(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + const bool client_round, + tosa_tensor_t client_output); + + tosa_status_t + tosa_run_bitwise_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_bitwise_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_bitwise_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_intdiv(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_logical_and(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t tosa_run_logical_left_shift(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_logical_right_shift(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output); + + tosa_status_t + tosa_run_logical_or(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_logical_xor(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_maximum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_minimum(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t tosa_run_mul(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + const uint8_t client_shift, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_pow(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t tosa_run_sub(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t tosa_run_table(tosa_tensor_t client_input, + const int32_t client_table_len, + const int16_t client_table[], + tosa_tensor_t client_output); + + tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_clz(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_exp(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_floor(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_log(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_negate(tosa_tensor_t client_input1, + const int32_t client_input1_zp, + const int32_t client_output_zp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_rsqrt(tosa_tensor_t client_input1, tosa_tensor_t client_output); + + tosa_status_t tosa_run_select(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_input3, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_greater(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_greater_equal(tosa_tensor_t client_input1, tosa_tensor_t client_input2, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_all(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_any(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_max(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_min(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_product(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t + tosa_run_reduce_sum(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t tosa_run_concat(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t tosa_run_pad(tosa_tensor_t client_input1, + const int32_t client_padding_len, + const int32_t client_padding[], + const int32_t client_pad_const_int, + const float client_pad_const_fp, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_reshape(tosa_tensor_t client_input1, + const int32_t client_new_shape_len, + const int32_t client_new_shape[], + tosa_tensor_t client_output); + + tosa_status_t tosa_run_reverse(tosa_tensor_t client_input, const int32_t client_axis, tosa_tensor_t client_output); + + tosa_status_t tosa_run_slice(tosa_tensor_t client_input1, + const int32_t client_start_len, + const int32_t client_start[], + const int32_t client_size_len, + const int32_t client_size[], + tosa_tensor_t client_output); + + tosa_status_t tosa_run_tile(tosa_tensor_t client_input1, + const int32_t client_multiplies_len, + const int32_t client_multiplies[], + const int32_t client_multiples_len, + const int32_t client_multiples[], + tosa_tensor_t client_output); + + tosa_status_t tosa_run_transpose(tosa_tensor_t client_input1, + const int32_t client_perms_len, + const int32_t client_perms[], + tosa_tensor_t client_output); + + tosa_status_t + tosa_run_gather(tosa_tensor_t client_values, tosa_tensor_t client_indices, tosa_tensor_t client_output); + + tosa_status_t tosa_run_scatter(tosa_tensor_t client_values_in, + tosa_tensor_t client_indices, + tosa_tensor_t client_input, + tosa_tensor_t client_values_out); + + tosa_status_t tosa_run_resize(tosa_tensor_t client_input, + const int16_t client_scale[4], + const int16_t client_offset[2], + const int16_t client_border[2], + const tosa_mode_t client_mode, + tosa_tensor_t client_output); + + tosa_status_t tosa_run_cast(tosa_tensor_t client_input, tosa_tensor_t client_output); + + tosa_status_t tosa_run_rescale(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const int32_t client_input_zp, + const int32_t client_output_zp, + const int32_t client_multiplier_len, + const int32_t client_multiplier[], + const int32_t client_shift_len, + const uint8_t client_shift[], + const bool client_scale32, + const bool client_double_round, + const bool client_per_channel); + + tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, tosa_tensor_t client_output); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif // OPERATORS_H_
\ No newline at end of file |