43 void qasymm8_sve_scale_nearest(
const ITensor *
src,
45 const ITensor *offsets,
46 float sampling_offset,
50 const size_t in_stride_c =
src->info()->dimension(0) +
src->info()->padding().left +
src->info()->padding().right;
51 const size_t in_stride_w =
src->info()->dimension(1) +
src->info()->padding().top +
src->info()->padding().bottom;
52 const size_t in_stride_wc = in_stride_w * in_stride_c;
53 const size_t in_dim_h =
src->info()->dimension(2);
57 const auto window_start_x =
static_cast<int32_t
>(window.x().start());
58 const auto window_end_x =
static_cast<int32_t
>(window.x().end());
62 Iterator out(
dst, win);
64 const uint8_t *in_ptr_start =
src->buffer() +
src->info()->offset_first_element_in_bytes();
65 const unsigned int in_stride_bytes_hwc =
src->info()->strides_in_bytes()[3];
69 [&](
const Coordinates &
id)
72 *
reinterpret_cast<const int32_t *
>(offsets->ptr_to_element(Coordinates(
id.y(),
id.z()))) * in_stride_c;
73 const auto in_hi =
static_cast<int>(
75 : std::floor((id.z() + sampling_offset) * hr));
76 const int offset_row = in_hi * in_stride_wc;
77 const auto in_ptr =
reinterpret_cast<const uint8_t *
>(in_ptr_start + in_stride_bytes_hwc *
id[3]);
78 const auto out_ptr =
reinterpret_cast<uint8_t *
>(out.ptr());
81 int x = window_start_x;
82 svbool_t pg = svwhilelt_b8(x, window_end_x);
86 svst1_u8(pg, out_ptr + x, svld1_u8(pg, in_ptr +
offset + offset_row + x));
89 pg = svwhilelt_b8(x, window_end_x);
90 }
while (svptest_any(svptrue_b8(), pg));
105 float sampling_offset,
112 qasymm8_sve_scale_nearest(
src,
dst, offsets, sampling_offset, align_corners, window);