42 inline void sort(uint8x8_t &a, uint8x8_t &
b)
44 const uint8x8_t min = vmin_u8(a, b);
45 const uint8x8_t max = vmax_u8(a, b);
63 constexpr
unsigned int num_elems_read_per_iteration = 16;
64 constexpr
unsigned int num_elems_written_per_iteration = 8;
65 constexpr
unsigned int num_rows_read_per_iteration = 3;
76 INEKernel::configure(win);
85 const unsigned char *input_bot_ptr = _input->ptr_to_element(
Coordinates(-1, -1));
86 const unsigned char *input_mid_ptr = _input->ptr_to_element(
Coordinates(-1, 0));
87 const unsigned char *input_top_ptr = _input->ptr_to_element(
Coordinates(-1, +1));
94 const uint8x16_t top_data = vld1q_u8(input_top_ptr + input.
offset());
95 const uint8x16_t mid_data = vld1q_u8(input_mid_ptr + input.
offset());
96 const uint8x16_t bot_data = vld1q_u8(input_bot_ptr + input.
offset());
98 uint8x8_t p0 = vget_low_u8(top_data);
99 uint8x8_t p1 = vext_u8(vget_low_u8(top_data), vget_high_u8(top_data), 1);
100 uint8x8_t p2 = vext_u8(vget_low_u8(top_data), vget_high_u8(top_data), 2);
101 uint8x8_t p3 = vget_low_u8(mid_data);
102 uint8x8_t p4 = vext_u8(vget_low_u8(mid_data), vget_high_u8(mid_data), 1);
103 uint8x8_t p5 = vext_u8(vget_low_u8(mid_data), vget_high_u8(mid_data), 2);
104 uint8x8_t p6 = vget_low_u8(bot_data);
105 uint8x8_t p7 = vext_u8(vget_low_u8(bot_data), vget_high_u8(bot_data), 1);
106 uint8x8_t p8 = vext_u8(vget_low_u8(bot_data), vget_high_u8(bot_data), 2);
134 vst1_u8(output.
ptr(), p4);
unsigned int top
top of the border
Window calculate_max_window(const ValidRegion &valid_region, const Steps &steps, bool skip_border, BorderSize border_size)
const Window & window() const
The maximum window the kernel can be executed on.
Container for 2D border size.
Interface for Neon tensor.
Copyright (c) 2017-2021 Arm Limited.
virtual ValidRegion valid_region() const =0
Valid region of the tensor.
Implementation of a rectangular access pattern.
bool update_window_and_padding(Window &win, Ts &&... patterns)
Update window and padding size for each of the access patterns.
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
Class to describe a number of elements in each dimension.
Implementation of a row access pattern.
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor's metadata.
constexpr uint8_t * ptr() const
Return a pointer to the current pixel.
unsigned int left
left of the border
#define ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(k)
ScaleKernelInfo info(interpolation_policy, default_border_mode, PixelValue(), sampling_policy, false)
Information about executing thread and CPU.
unsigned int num_elems_processed_per_iteration
void execute_window_loop(const Window &w, L &&lambda_function, Ts &&... iterators)
Iterate through the passed window, automatically adjusting the iterators and calling the lambda_funct...
constexpr size_t offset() const
Return the offset in bytes from the first element to the current position of the iterator.
Iterator updated by execute_window_loop for each window element.
Describe a multidimensional execution window.
#define ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(f, s)