From 6e7b8b20c21a1d668b9401385d30525405e17125 Mon Sep 17 00:00:00 2001 From: Grant Watson Date: Mon, 28 Aug 2023 16:34:28 +0100 Subject: Pass func_config to individual operator API Updates the generate_api.py script and associated templates to allow func_config and debug_config to be passed when running individual operators on the API. This will allow us, for example, to set precise_mode and abs_mode when running individual operators. Signed-off-by: Grant Watson Change-Id: Ia3e7ffc146f876daa307558433177c68285843b7 --- reference_model/include/operators.h | 400 ++++++++++++++------ reference_model/src/operators.cc | 486 +++++++++++++++++-------- reference_model/test/model_runner_tests.cpp | 61 ++++ scripts/operator_api/generate_api.py | 7 +- scripts/operator_api/templates/operators_cc.j2 | 25 +- scripts/operator_api/templates/operators_h.j2 | 8 +- 6 files changed, 717 insertions(+), 270 deletions(-) diff --git a/reference_model/include/operators.h b/reference_model/include/operators.h index 2c31c30..14ad236 100644 --- a/reference_model/include/operators.h +++ b/reference_model/include/operators.h @@ -19,6 +19,9 @@ #ifndef OPERATORS_H_ #define OPERATORS_H_ +#include "func_config.h" +#include "func_debug.h" + #include #include @@ -69,7 +72,11 @@ extern "C" 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_argmax(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_avg_pool2d(tosa_tensor_t client_input, const int32_t client_kernel[2], @@ -77,7 +84,9 @@ extern "C" const int32_t client_pad[4], const int32_t client_input_zp, const int32_t client_output_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_conv2d(tosa_tensor_t client_input, tosa_tensor_t client_weight, @@ -87,7 +96,9 @@ extern "C" const int32_t client_dilation[2], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_conv3d(tosa_tensor_t client_input, tosa_tensor_t client_weight, @@ -97,7 +108,9 @@ extern "C" const int32_t client_dilation[3], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_depthwise_conv2d(tosa_tensor_t client_input, tosa_tensor_t client_weight, @@ -107,20 +120,26 @@ extern "C" const int32_t client_dilation[2], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_fully_connected(tosa_tensor_t client_input, tosa_tensor_t client_weight, tosa_tensor_t client_bias, const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_max_pool2d(tosa_tensor_t client_input, const int32_t client_kernel[2], @@ -128,7 +147,9 @@ extern "C" const int32_t client_pad[4], const int32_t client_input_zp, const int32_t client_output_zp, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_transpose_conv2d(tosa_tensor_t client_input, tosa_tensor_t client_weight, @@ -140,184 +161,340 @@ extern "C" const int32_t client_pad[], const int32_t client_dilation_len, const int32_t client_dilation[], - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, tosa_tensor_t client_output); + tosa_status_t tosa_run_erf(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_tanh(tosa_tensor_t client_input, tosa_tensor_t client_output); + tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_erf(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, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_add(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_bitwise_and(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_bitwise_or(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_bitwise_xor(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_intdiv(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_and(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_logical_left_shift(tosa_tensor_t client_input1, tosa_tensor_t client_input2, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_logical_or(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_logical_xor(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_maximum(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_minimum(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_mul(tosa_tensor_t client_input1, tosa_tensor_t client_input2, const int32_t client_shift, - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_pow(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_sub(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_bitwise_not(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_ceil(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_clz(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_exp(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_floor(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_log(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_logical_not(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, tosa_tensor_t client_output); + tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_rsqrt(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, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_equal(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_greater(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_greater_equal(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_all(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_any(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_max(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_min(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_product(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_reduce_sum(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_concat(tosa_tensor_t client_input1, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output); + tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_reverse(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_tile(tosa_tensor_t client_input1, const int32_t client_multiples_len, const int32_t client_multiples[], - tosa_tensor_t client_output); + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - 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_gather(tosa_tensor_t client_values, + tosa_tensor_t client_indices, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_values_out, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); 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_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); - tosa_status_t tosa_run_cast(tosa_tensor_t client_input, tosa_tensor_t client_output); + tosa_status_t tosa_run_cast(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); tosa_status_t tosa_run_rescale(tosa_tensor_t client_input, tosa_tensor_t client_output, @@ -331,9 +508,14 @@ extern "C" const bool client_double_round, const bool client_input_unsigned, const bool client_output_unsigned, - const bool client_per_channel); - - tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, tosa_tensor_t client_output); + const bool client_per_channel, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); + + tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config = func_config_t{}, + const func_debug_t& func_debug = func_debug_t{}); #ifdef __cplusplus } diff --git a/reference_model/src/operators.cc b/reference_model/src/operators.cc index cb71ae8..6c9b067 100644 --- a/reference_model/src/operators.cc +++ b/reference_model/src/operators.cc @@ -100,7 +100,11 @@ tosa::ResizeMode translate_client_tosa_mode(tosa_mode_t mode) extern "C" { - 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_argmax(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -119,7 +123,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -138,7 +142,9 @@ extern "C" const int32_t client_pad[4], const int32_t client_input_zp, const int32_t client_output_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[4]); @@ -162,7 +168,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -183,7 +189,9 @@ extern "C" const int32_t client_dilation[2], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[4]); @@ -210,7 +218,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size)); @@ -233,7 +241,9 @@ extern "C" const int32_t client_dilation[3], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[6]); @@ -260,7 +270,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size)); @@ -283,7 +293,9 @@ extern "C" const int32_t client_dilation[2], const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[4]); @@ -310,7 +322,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size)); @@ -330,7 +342,9 @@ extern "C" tosa_tensor_t client_bias, const int32_t client_input_zp, const int32_t client_weight_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t input_zp = client_input_zp; @@ -354,7 +368,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size)); @@ -373,7 +387,9 @@ extern "C" tosa_tensor_t client_b, const int32_t client_a_zp, const int32_t client_b_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t a_zp = client_a_zp; @@ -394,7 +410,7 @@ extern "C" { a->GetName(), b->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(a->GetName(), client_a.data, client_a.size)); TOSA_RETURN_ON_ERROR(runner.setInput(b->GetName(), client_b.data, client_b.size)); @@ -414,7 +430,9 @@ extern "C" const int32_t client_pad[4], const int32_t client_input_zp, const int32_t client_output_zp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[4]); @@ -438,7 +456,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -461,7 +479,9 @@ extern "C" const int32_t client_pad[], const int32_t client_dilation_len, const int32_t client_dilation[], - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector pad(&client_pad[0], &client_pad[0] + client_pad_len); @@ -488,7 +508,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); TOSA_RETURN_ON_ERROR(runner.setInput(weight->GetName(), client_weight.data, client_weight.size)); @@ -508,7 +528,9 @@ extern "C" const int32_t client_max_int, const float client_min_fp, const float client_max_fp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t min_int = client_min_int; @@ -530,7 +552,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -543,7 +565,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, tosa_tensor_t client_output) + tosa_status_t tosa_run_erf(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -553,15 +578,15 @@ extern "C" tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output"); // Create operator - auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_SIGMOID, tosa::Attribute::Attribute_NONE, &attr, + auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_ERF, tosa::Attribute::Attribute_NONE, &attr, { input->GetName() }, { output->GetName() }); // Create a tosa single-op basic block - tosa::TosaSerializationBasicBlock block("sigmoid", "main", { op }, { input, output }, { input->GetName() }, + tosa::TosaSerializationBasicBlock block("erf", "main", { op }, { input, output }, { input->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -574,7 +599,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_tanh(tosa_tensor_t client_input, tosa_tensor_t client_output) + tosa_status_t tosa_run_sigmoid(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -584,15 +612,15 @@ extern "C" tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output"); // Create operator - auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_TANH, tosa::Attribute::Attribute_NONE, &attr, + auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_SIGMOID, tosa::Attribute::Attribute_NONE, &attr, { input->GetName() }, { output->GetName() }); // Create a tosa single-op basic block - tosa::TosaSerializationBasicBlock block("tanh", "main", { op }, { input, output }, { input->GetName() }, + tosa::TosaSerializationBasicBlock block("sigmoid", "main", { op }, { input, output }, { input->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -605,7 +633,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_erf(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -615,15 +646,15 @@ extern "C" tosa::TosaSerializationTensor* output = translate_client_tensor(client_output, "output"); // Create operator - auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_ERF, tosa::Attribute::Attribute_NONE, &attr, + auto op = new tosa::TosaSerializationOperator(tosa::Op::Op_TANH, tosa::Attribute::Attribute_NONE, &attr, { input->GetName() }, { output->GetName() }); // Create a tosa single-op basic block - tosa::TosaSerializationBasicBlock block("erf", "main", { op }, { input, output }, { input->GetName() }, + tosa::TosaSerializationBasicBlock block("tanh", "main", { op }, { input, output }, { input->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -636,7 +667,11 @@ extern "C" return tosa_status_valid; } - 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_add(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -655,7 +690,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -672,7 +707,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const bool round = client_round; @@ -693,7 +730,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -707,8 +744,11 @@ extern "C" return tosa_status_valid; } - 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_and(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -727,7 +767,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -741,8 +781,11 @@ extern "C" return tosa_status_valid; } - 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_or(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -761,7 +804,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -775,8 +818,11 @@ extern "C" return tosa_status_valid; } - 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_bitwise_xor(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -795,7 +841,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -809,7 +855,11 @@ extern "C" return tosa_status_valid; } - 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_intdiv(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -828,7 +878,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -842,8 +892,11 @@ extern "C" return tosa_status_valid; } - 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_and(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -862,7 +915,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -878,7 +931,9 @@ extern "C" tosa_status_t tosa_run_logical_left_shift(tosa_tensor_t client_input1, tosa_tensor_t client_input2, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -898,7 +953,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -914,7 +969,9 @@ extern "C" tosa_status_t tosa_run_logical_right_shift(tosa_tensor_t client_input1, tosa_tensor_t client_input2, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -934,7 +991,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -948,8 +1005,11 @@ extern "C" return tosa_status_valid; } - 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_or(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -968,7 +1028,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -982,8 +1042,11 @@ extern "C" return tosa_status_valid; } - 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_logical_xor(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1002,7 +1065,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1016,8 +1079,11 @@ extern "C" return tosa_status_valid; } - 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_maximum(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1036,7 +1102,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1050,8 +1116,11 @@ extern "C" return tosa_status_valid; } - 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_minimum(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1070,7 +1139,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1087,7 +1156,9 @@ extern "C" tosa_status_t tosa_run_mul(tosa_tensor_t client_input1, tosa_tensor_t client_input2, const int32_t client_shift, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t shift = client_shift; @@ -1107,7 +1178,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1121,7 +1192,11 @@ extern "C" return tosa_status_valid; } - 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_pow(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1140,7 +1215,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1154,7 +1229,11 @@ extern "C" return tosa_status_valid; } - 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_sub(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1173,7 +1252,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1190,7 +1269,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector table(&client_table[0], &client_table[0] + client_table_len); @@ -1209,7 +1290,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1222,7 +1303,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, tosa_tensor_t client_output) + tosa_status_t tosa_run_abs(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1240,7 +1324,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1253,7 +1337,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_bitwise_not(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1271,7 +1358,7 @@ extern "C" { input1->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1284,7 +1371,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_ceil(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1302,7 +1392,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1315,7 +1405,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_clz(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1333,7 +1426,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1346,7 +1439,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_exp(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1364,7 +1460,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1377,7 +1473,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_floor(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1395,7 +1494,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1408,7 +1507,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_log(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1426,7 +1528,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1439,7 +1541,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_logical_not(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1457,7 +1562,7 @@ extern "C" { input1->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1473,7 +1578,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t input1_zp = client_input1_zp; @@ -1493,7 +1600,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1506,7 +1613,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, tosa_tensor_t client_output) + tosa_status_t tosa_run_reciprocal(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1524,7 +1634,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1537,7 +1647,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_rsqrt(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, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1555,7 +1668,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1571,7 +1684,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1593,7 +1708,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1608,7 +1723,11 @@ extern "C" return tosa_status_valid; } - 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_equal(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1627,7 +1746,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1641,8 +1760,11 @@ extern "C" return tosa_status_valid; } - 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(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1661,7 +1783,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1675,8 +1797,11 @@ extern "C" return tosa_status_valid; } - 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_greater_equal(tosa_tensor_t client_input1, + tosa_tensor_t client_input2, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -1696,7 +1821,7 @@ extern "C" { input1->GetName(), input2->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); TOSA_RETURN_ON_ERROR(runner.setInput(input2->GetName(), client_input2.data, client_input2.size)); @@ -1710,8 +1835,11 @@ extern "C" return tosa_status_valid; } - 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_all(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1730,7 +1858,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1743,8 +1871,11 @@ extern "C" return tosa_status_valid; } - 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_any(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1763,7 +1894,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1776,8 +1907,11 @@ extern "C" return tosa_status_valid; } - 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_max(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1796,7 +1930,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1809,8 +1943,11 @@ extern "C" return tosa_status_valid; } - 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_min(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1829,7 +1966,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1842,8 +1979,11 @@ extern "C" return tosa_status_valid; } - 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_product(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1863,7 +2003,7 @@ extern "C" { input->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1876,8 +2016,11 @@ extern "C" return tosa_status_valid; } - 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_reduce_sum(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1896,7 +2039,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -1909,7 +2052,11 @@ extern "C" return tosa_status_valid; } - 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_concat(tosa_tensor_t client_input1, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -1928,7 +2075,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1946,7 +2093,9 @@ extern "C" const int32_t client_padding[], const int32_t client_pad_const_int, const float client_pad_const_fp, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector padding(&client_padding[0], &client_padding[0] + client_padding_len); @@ -1967,7 +2116,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -1980,7 +2129,11 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, const int32_t client_axis, tosa_tensor_t client_output) + tosa_status_t tosa_run_dim(tosa_tensor_t client_input1, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaAxisAttribute attr(client_axis); @@ -1998,7 +2151,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -2011,7 +2164,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector new_shape(&client_new_shape[0], &client_new_shape[0] + client_new_shape_len); @@ -2030,7 +2185,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -2043,7 +2198,11 @@ extern "C" return tosa_status_valid; } - 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_reverse(tosa_tensor_t client_input, + const int32_t client_axis, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t axis = client_axis; @@ -2062,7 +2221,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -2080,7 +2239,9 @@ extern "C" const int32_t client_start[], const int32_t client_size_len, const int32_t client_size[], - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector start(&client_start[0], &client_start[0] + client_start_len); @@ -2100,7 +2261,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -2116,7 +2277,9 @@ extern "C" tosa_status_t tosa_run_tile(tosa_tensor_t client_input1, const int32_t client_multiples_len, const int32_t client_multiples[], - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector multiples(&client_multiples[0], &client_multiples[0] + client_multiples_len); @@ -2135,7 +2298,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -2151,7 +2314,9 @@ extern "C" 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_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector perms(&client_perms[0], &client_perms[0] + client_perms_len); @@ -2171,7 +2336,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); @@ -2184,8 +2349,11 @@ extern "C" return tosa_status_valid; } - 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_gather(tosa_tensor_t client_values, + tosa_tensor_t client_indices, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -2204,7 +2372,7 @@ extern "C" { values->GetName(), indices->GetName() }, { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(values->GetName(), client_values.data, client_values.size)); TOSA_RETURN_ON_ERROR(runner.setInput(indices->GetName(), client_indices.data, client_indices.size)); @@ -2221,7 +2389,9 @@ extern "C" 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_tensor_t client_values_out, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -2243,7 +2413,7 @@ extern "C" { values_out->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(values_in->GetName(), client_values_in.data, client_values_in.size)); TOSA_RETURN_ON_ERROR(runner.setInput(indices->GetName(), client_indices.data, client_indices.size)); @@ -2263,7 +2433,9 @@ extern "C" const int16_t client_offset[2], const int16_t client_border[2], const tosa_mode_t client_mode, - tosa_tensor_t client_output) + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const std::vector scale(&client_scale[0], &client_scale[4]); @@ -2285,7 +2457,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -2298,7 +2470,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_cast(tosa_tensor_t client_input, tosa_tensor_t client_output) + tosa_status_t tosa_run_cast(tosa_tensor_t client_input, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -2316,7 +2491,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -2341,7 +2516,9 @@ extern "C" const bool client_double_round, const bool client_input_unsigned, const bool client_output_unsigned, - const bool client_per_channel) + const bool client_per_channel, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes const int32_t input_zp = client_input_zp; @@ -2369,7 +2546,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input->GetName(), client_input.data, client_input.size)); @@ -2382,7 +2559,10 @@ extern "C" return tosa_status_valid; } - tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, tosa_tensor_t client_output) + tosa_status_t tosa_run_identity(tosa_tensor_t client_input1, + tosa_tensor_t client_output, + const func_config_t& func_config, + const func_debug_t& func_debug) { // Create operator attributes TosaNoneAttribute attr; @@ -2400,7 +2580,7 @@ extern "C" { output->GetName() }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); TOSA_RETURN_ON_ERROR(runner.setInput(input1->GetName(), client_input1.data, client_input1.size)); diff --git a/reference_model/test/model_runner_tests.cpp b/reference_model/test/model_runner_tests.cpp index bb57657..0b73494 100644 --- a/reference_model/test/model_runner_tests.cpp +++ b/reference_model/test/model_runner_tests.cpp @@ -178,6 +178,67 @@ TEST_SUITE("model_runner") compareOutput(dstData, expectedData, expectedData.size()); } + TEST_CASE("op_entry_conv2d_abs_mode") + { + // Conv parameters + const int32_t stride[2] = { 1, 1 }; + const int32_t pad[4] = { 0, 0, 0, 0 }; + const int32_t dilation[2] = { 1, 1 }; + + // Inputs/Outputs + tosa_datatype_t dt = tosa_datatype_fp32_t; + std::vector input_shape = { 1, 32, 32, 8 }; + std::vector output_shape = { 1, 32, 32, 16 }; + std::vector weight_shape = { 16, 1, 1, 8 }; + std::vector bias_shape = { 16 }; + std::vector srcData(32 * 32 * 8, -1.0f); + std::vector dstData(32 * 32 * 16, 0.f); + std::vector biasData(16, 0.f); + std::vector weightData(16 * 8, 1.0f); + + tosa_tensor_t input; + input.shape = input_shape.data(); + input.num_dims = input_shape.size(); + input.data_type = dt; + input.data = reinterpret_cast(srcData.data()); + input.size = srcData.size() * sizeof(float); + + tosa_tensor_t weight; + weight.shape = weight_shape.data(); + weight.num_dims = weight_shape.size(); + weight.data_type = dt; + weight.data = reinterpret_cast(weightData.data()); + weight.size = weightData.size() * sizeof(float); + + tosa_tensor_t bias; + bias.shape = bias_shape.data(); + bias.num_dims = bias_shape.size(); + bias.data_type = dt; + bias.data = reinterpret_cast(biasData.data()); + bias.size = biasData.size() * sizeof(float); + + tosa_tensor_t output; + output.shape = output_shape.data(); + output.num_dims = output_shape.size(); + output.data_type = dt; + output.data = reinterpret_cast(dstData.data()); + output.size = dstData.size() * sizeof(float); + + const int32_t input_zp = 0; + const int32_t weight_zp = 0; + + // Execution + func_config_t func_config; + func_config.abs_mode = true; + auto status = + tosa_run_conv2d(input, weight, bias, pad, stride, dilation, input_zp, weight_zp, output, func_config); + CHECK((status == tosa_status_valid)); + + // Compare results + std::vector expectedData(32 * 32 * 16, 8.0f); + compareOutput(dstData, expectedData, expectedData.size()); + } + TEST_CASE("op_entry_max_pool2d") { // Pool parameters diff --git a/scripts/operator_api/generate_api.py b/scripts/operator_api/generate_api.py index 499eadb..f1cb6e0 100644 --- a/scripts/operator_api/generate_api.py +++ b/scripts/operator_api/generate_api.py @@ -1,5 +1,5 @@ """Generate extended reference model API with eager operator execution entrypoints""" -# Copyright (c) 2021-2022, ARM Limited. +# Copyright (c) 2021-2023, ARM Limited. # SPDX-License-Identifier: Apache-2.0 import copy import os @@ -190,7 +190,7 @@ def getOperators(tosaXml): Return a list of TOSA operators as defined by tosa.xml. """ operators = [] - ignoreOps = ["while_loop", "cond_if", "const", "custom", "fft2d", "rfft2d", "erf"] + ignoreOps = ["while_loop", "cond_if", "const", "custom", "fft2d", "rfft2d"] opsXml = tosaXml.getElementsByTagName("operator") allSerializeArgs = getSerializeArgs() for opXml in opsXml: @@ -241,6 +241,9 @@ def getTosaArgs(opXml): argType = xmlArg.getAttribute("type") argShape = xmlArg.getAttribute("shape") argCategory = xmlArg.getAttribute("category") + # FullyConnected workaround + if (argName == "weight" or argName == "bias") and (argCategory == "attribute"): + argCategory = "input" # Update argument type if argType[-1:] == "*": argType = argType[:-1] diff --git a/scripts/operator_api/templates/operators_cc.j2 b/scripts/operator_api/templates/operators_cc.j2 index 37a0af6..a8f1c24 100644 --- a/scripts/operator_api/templates/operators_cc.j2 +++ b/scripts/operator_api/templates/operators_cc.j2 @@ -45,12 +45,28 @@ tosa::DType translate_client_datatype(tosa_datatype_t type) { switch (type) { + case tosa_datatype_bf16_t: + return tosa::DType::DType_BF16; + case tosa_datatype_bool_t: + return tosa::DType::DType_BOOL; case tosa_datatype_fp16_t: return tosa::DType::DType_FP16; case tosa_datatype_fp32_t: return tosa::DType::DType_FP32; - case tosa_datatype_bool_t: - return tosa::DType::DType_BOOL; + case tosa_datatype_int16_t: + return tosa::DType::DType_INT16; + case tosa_datatype_int32_t: + return tosa::DType::DType_INT32; + case tosa_datatype_int48_t: + return tosa::DType::DType_INT48; + case tosa_datatype_int4_t: + return tosa::DType::DType_INT4; + case tosa_datatype_int8_t: + return tosa::DType::DType_INT8; + case tosa_datatype_uint16_t: + return tosa::DType::DType_UINT16; + case tosa_datatype_uint8_t: + return tosa::DType::DType_UINT8; default: return tosa::DType::DType_UNKNOWN; } @@ -83,7 +99,8 @@ extern "C" {%- for arg in operator.arguments: -%} {% if arg.type != "tosa_tensor_t" -%}const {% endif -%}{{arg.type}} client_{{arg.name}}{{arg.shape}} {% if loop.index < operator.arguments|length %},{% endif %} - {%- endfor -%} + {%- endfor -%}, const func_config_t &func_config, + const func_debug_t &func_debug ) { // Create operator attributes @@ -157,7 +174,7 @@ extern "C" }); // Setup model - TosaReference::ModelRunnerImpl runner; + TosaReference::ModelRunnerImpl runner(func_config, func_debug); TOSA_RETURN_ON_GRAPH_STATUS_ERROR(runner.initialize(block)); {% for input in operator.inputs: -%} TOSA_RETURN_ON_ERROR(runner.setInput({{input}}->GetName(), client_{{input}}.data, client_{{input}}.size)); diff --git a/scripts/operator_api/templates/operators_h.j2 b/scripts/operator_api/templates/operators_h.j2 index 803b76a..042d7a5 100644 --- a/scripts/operator_api/templates/operators_h.j2 +++ b/scripts/operator_api/templates/operators_h.j2 @@ -1,5 +1,5 @@ -// Copyright (c) 2022, ARM Limited. +// Copyright (c) 2022-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. @@ -19,6 +19,9 @@ #ifndef OPERATORS_H_ #define OPERATORS_H_ +#include "func_config.h" +#include "func_debug.h" + #include #include @@ -64,7 +67,8 @@ extern "C" { {%- for arg in operator.arguments: -%} {% if arg.type != "tosa_tensor_t" -%}const {% endif -%}{{arg.type}} client_{{arg.name}}{{arg.shape}} {% if loop.index < operator.arguments|length %},{% endif %} - {%- endfor -%}); + {%- endfor -%}, const func_config_t &func_config = func_config_t{}, + const func_debug_t &func_debug = func_debug_t{}); {% endfor %} #ifdef __cplusplus -- cgit v1.2.1