Compute Library
 21.02
NESobel7x7 Class Reference

Basic function to execute sobel 7x7 filter. More...

#include <NESobel7x7.h>

Collaboration diagram for NESobel7x7:
[legend]

Public Member Functions

 NESobel7x7 (std::shared_ptr< IMemoryManager > memory_manager=nullptr)
 Default constructor. More...
 
 NESobel7x7 (const NESobel7x7 &)=delete
 Prevent instances of this class from being copied (As this class contains pointers) More...
 
NESobel7x7operator= (const NESobel7x7 &)=delete
 Prevent instances of this class from being copied (As this class contains pointers) More...
 
 NESobel7x7 (NESobel7x7 &&)=delete
 Prevent instances of this class from being moved (As this class contains non movable objects) More...
 
NESobel7x7operator= (NESobel7x7 &&)=delete
 Prevent instances of this class from being moved (As this class contains non movable objects) More...
 
 ~NESobel7x7 ()
 Default destructor. More...
 
void configure (ITensor *input, ITensor *output_x, ITensor *output_y, BorderMode border_mode, uint8_t constant_border_value=0)
 Initialise the function's source, destinations and border mode. More...
 
void run () override
 Run the kernels contained in the function. More...
 
- Public Member Functions inherited from IFunction
virtual ~IFunction ()=default
 Destructor. More...
 
virtual void prepare ()
 Prepare the function for executing. More...
 

Detailed Description

Basic function to execute sobel 7x7 filter.

This function calls the following Neon kernels:

  1. NEFillBorderKernel (executed if border_mode == CONSTANT or border_mode == REPLICATE)
  2. NESobel7x7HorKernel
  3. NESobel7x7VertKernel
Deprecated:
This function is deprecated and is intended to be removed in 21.05 release

Definition at line 52 of file NESobel7x7.h.

Constructor & Destructor Documentation

◆ NESobel7x7() [1/3]

NESobel7x7 ( std::shared_ptr< IMemoryManager memory_manager = nullptr)

Default constructor.

Definition at line 39 of file NESobel7x7.cpp.

40  : _memory_group(std::move(memory_manager)), _sobel_hor(), _sobel_vert(), _tmp_x(), _tmp_y(), _border_handler()
41 {
42 }

◆ NESobel7x7() [2/3]

NESobel7x7 ( const NESobel7x7 )
delete

Prevent instances of this class from being copied (As this class contains pointers)

◆ NESobel7x7() [3/3]

NESobel7x7 ( NESobel7x7 &&  )
delete

Prevent instances of this class from being moved (As this class contains non movable objects)

◆ ~NESobel7x7()

~NESobel7x7 ( )
default

Default destructor.

Member Function Documentation

◆ configure()

void configure ( ITensor input,
ITensor output_x,
ITensor output_y,
BorderMode  border_mode,
uint8_t  constant_border_value = 0 
)

Initialise the function's source, destinations and border mode.

Note
At least one of output_x or output_y must be not NULL.
Parameters
[in,out]inputSource tensor. Data type supported: U8. (Written to only for border_mode != UNDEFINED)
[out]output_x(optional) Destination for the Sobel 7x7 convolution along the X axis. Data type supported: S32.
[out]output_y(optional) Destination for the Sobel 7x7 convolution along the Y axis. Data type supported: S32.
[in]border_modeBorder mode to use for the convolution.
[in]constant_border_value(Optional) Constant value to use for borders if border_mode is set to CONSTANT.

Definition at line 44 of file NESobel7x7.cpp.

References TensorAllocator::allocate(), Tensor::allocator(), ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN, ITensor::info(), TensorAllocator::init(), MemoryGroup::manage(), arm_compute::S32, ITensorInfo::tensor_shape(), arm_compute::U8, and arm_compute::UNDEFINED.

45 {
47 
48  const bool run_sobel_x = output_x != nullptr;
49  const bool run_sobel_y = output_y != nullptr;
50 
51  TensorInfo tensor_info(input->info()->tensor_shape(), Format::S32);
52  _sobel_hor = std::make_unique<NESobel7x7HorKernel>();
53  _sobel_vert = std::make_unique<NESobel7x7VertKernel>();
54  _border_handler = std::make_unique<NEFillBorderKernel>();
55 
56  if(run_sobel_x && run_sobel_y)
57  {
58  _tmp_x.allocator()->init(tensor_info);
59  _tmp_y.allocator()->init(tensor_info);
60  _memory_group.manage(&_tmp_x);
61  _memory_group.manage(&_tmp_y);
62  _sobel_hor->configure(input, &_tmp_x, &_tmp_y, border_mode == BorderMode::UNDEFINED);
63  _sobel_vert->configure(&_tmp_x, &_tmp_y, output_x, output_y, border_mode == BorderMode::UNDEFINED);
64  _tmp_x.allocator()->allocate();
65  _tmp_y.allocator()->allocate();
66  }
67  else if(run_sobel_x)
68  {
69  _tmp_x.allocator()->init(tensor_info);
70  _memory_group.manage(&_tmp_x);
71  _sobel_hor->configure(input, &_tmp_x, nullptr, border_mode == BorderMode::UNDEFINED);
72  _sobel_vert->configure(&_tmp_x, nullptr, output_x, nullptr, border_mode == BorderMode::UNDEFINED);
73  _tmp_x.allocator()->allocate();
74  }
75  else if(run_sobel_y)
76  {
77  _tmp_y.allocator()->init(tensor_info);
78  _memory_group.manage(&_tmp_y);
79  _sobel_hor->configure(input, nullptr, &_tmp_y, border_mode == BorderMode::UNDEFINED);
80  _sobel_vert->configure(nullptr, &_tmp_y, nullptr, output_y, border_mode == BorderMode::UNDEFINED);
81  _tmp_y.allocator()->allocate();
82  }
83 
84  _border_handler->configure(input, _sobel_hor->border_size(), border_mode, PixelValue(constant_border_value));
85 }
void init(const TensorAllocator &allocator, const Coordinates &coords, TensorInfo &sub_info)
Shares the same backing memory with another tensor allocator, while the tensor info might be differen...
1 channel, 1 U8 per channel
TensorAllocator * allocator()
Return a pointer to the tensor&#39;s allocator.
Definition: Tensor.cpp:48
1 channel, 1 S32 per channel
void manage(IMemoryManageable *obj) override
Sets a object to be managed by the given memory group.
Definition: MemoryGroup.h:79
void allocate() override
Allocate size specified by TensorInfo of CPU memory.
#define ARM_COMPUTE_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(t, c,...)
Definition: Validate.h:790
Borders are left undefined.

◆ operator=() [1/2]

NESobel7x7& operator= ( const NESobel7x7 )
delete

Prevent instances of this class from being copied (As this class contains pointers)

◆ operator=() [2/2]

NESobel7x7& operator= ( NESobel7x7 &&  )
delete

Prevent instances of this class from being moved (As this class contains non movable objects)

◆ run()

void run ( )
overridevirtual

Run the kernels contained in the function.

For Neon kernels:

  • Multi-threading is used for the kernels which are parallelisable.
  • By default std::thread::hardware_concurrency() threads are used.
Note
CPPScheduler::set_num_threads() can be used to manually set the number of threads

For OpenCL kernels:

  • All the kernels are enqueued on the queue associated with CLScheduler.
  • The queue is then flushed.
Note
The function will not block until the kernels are executed. It is the user's responsibility to wait.
Will call prepare() on first run if hasn't been done

Implements IFunction.

Definition at line 87 of file NESobel7x7.cpp.

References Window::DimY, Window::DimZ, Scheduler::get(), and IScheduler::schedule().

88 {
89  NEScheduler::get().schedule(_border_handler.get(), Window::DimZ);
90 
91  MemoryGroupResourceScope scope_mg(_memory_group);
92 
93  NEScheduler::get().schedule(_sobel_hor.get(), Window::DimY);
94  NEScheduler::get().schedule(_sobel_vert.get(), Window::DimY);
95 }
static constexpr size_t DimY
Alias for dimension 1 also known as Y dimension.
Definition: Window.h:45
virtual void schedule(ICPPKernel *kernel, const Hints &hints)=0
Runs the kernel in the same thread as the caller synchronously.
static constexpr size_t DimZ
Alias for dimension 2 also known as Z dimension.
Definition: Window.h:47
static IScheduler & get()
Access the scheduler singleton.
Definition: Scheduler.cpp:94

The documentation for this class was generated from the following files: