Interface class for the boxFilterSAT{_Tr} kernel.
More...
#include <algorithms.hpp>
|
| | BoxFilterSAT (clutils::CLEnv &_env, clutils::CLEnvInfo< 1 > _info) |
| | Configures an OpenCL environment as specified by _info. More...
|
| |
| cl::Memory & | get (BoxFilterSAT::Memory mem) |
| | Returns a reference to an internal memory object. More...
|
| |
| void | init (unsigned int _width, unsigned int _height, int _radius, float _scaling=1e-4f, Staging _staging=Staging::IO) |
| | Configures kernel execution parameters. More...
|
| |
| void | write (BoxFilterSAT::Memory mem=BoxFilterSAT::Memory::D_IN, void *ptr=nullptr, bool block=CL_FALSE, const std::vector< cl::Event > *events=nullptr, cl::Event *event=nullptr) |
| | Performs a data transfer to a device buffer. More...
|
| |
| void * | read (BoxFilterSAT::Memory mem=BoxFilterSAT::Memory::H_OUT, bool block=CL_TRUE, const std::vector< cl::Event > *events=nullptr, cl::Event *event=nullptr) |
| | Performs a data transfer to a staging buffer. More...
|
| |
| void | run (const std::vector< cl::Event > *events=nullptr, cl::Event *event=nullptr) |
| | Executes the necessary kernels. More...
|
| |
| int | getRadius () |
| | Gets the filter window radius. More...
|
| |
| void | setRadius (int _radius) |
| | Sets the filter window radius. More...
|
| |
| float | getScaling () |
| | Gets the scaling factor. More...
|
| |
| void | setScaling (float _scaling) |
| | Sets the scaling factor. More...
|
| |
| template<typename period > |
| double | run (clutils::GPUTimer< period > &timer, const std::vector< cl::Event > *events=nullptr) |
| | Executes the necessary kernels. More...
|
| |
Interface class for the boxFilterSAT{_Tr} kernel.
boxFilterSAT{_Tr} performs a mean filtering operation. For more details, look at the kernel's documentation.
- Note
- The
boxFilterSAT{_Tr} kernel is available in kernels/boxFilter_kernels.cl.
-
The class creates its own buffers. If you would like to provide your own buffers, call
get to get references to the placeholders within the class and assign them to your buffers. You will have to do this strictly before the call to init. You can also call get (after the call to init) to get a reference to a buffer within the class and assign it to another kernel class instance further down in your task pipeline.
The following input/output OpenCL memory objects are created by a BoxFilterSAT instance:
| Name | Type | Placement | I/O | Use | Properties | Size |
| H_IN | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(width*height*sizeof\ (cl\_float)\) |
| H_OUT | Buffer | Host | O | Staging | CL_MEM_READ_WRITE | \(width*height*sizeof\ (cl\_float)\) |
| D_IN | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(width*height*sizeof\ (cl\_float)\) |
| D_OUT | Buffer | Device | O | Processing | CL_MEM_WRITE_ONLY | \(width*height*sizeof\ (cl\_float)\) |
Enumerates the memory objects handled by the class.
- Note
H_* names refer to staging buffers on the host.
-
D_* names refer to buffers on the device.
| Enumerator |
|---|
| H_IN |
Input staging buffer.
|
| H_OUT |
Output staging buffer.
|
| D_IN |
Input buffer.
|
| D_OUT |
Output buffer.
|
| cl_algo::GF::BoxFilterSAT::BoxFilterSAT |
( |
clutils::CLEnv & |
_env, |
|
|
clutils::CLEnvInfo< 1 > |
_info |
|
) |
| |
Configures an OpenCL environment as specified by _info.
- Parameters
-
| [in] | _env | opencl environment. |
| [in] | _info | opencl configuration. Specifies the context, queue, etc, to be used. |
Returns a reference to an internal memory object.
This interface exists to allow CL memory sharing between different kernels.
- Parameters
-
| [in] | mem | enumeration value specifying the requested memory object. |
- Returns
- A reference to the requested memory object.
| int cl_algo::GF::BoxFilterSAT::getRadius |
( |
| ) |
|
Gets the filter window radius.
- Returns
- The radius of the square filter window.
| float cl_algo::GF::BoxFilterSAT::getScaling |
( |
| ) |
|
Gets the scaling factor.
- Returns
- The scaling factor.
| void cl_algo::GF::BoxFilterSAT::init |
( |
unsigned int |
_width, |
|
|
unsigned int |
_height, |
|
|
int |
_radius, |
|
|
float |
_scaling = 1e-4f, |
|
|
Staging |
_staging = Staging::IO |
|
) |
| |
Configures kernel execution parameters.
Sets up memory objects as necessary, and defines the kernel workspaces.
- Note
- If you have assigned a memory object to one member variable of the class before the call to
init, then that memory will be maintained. Otherwise, a new memory object will be created.
-
Working with
float elements and having large summations can be problematic. It is advised that a scaling is applied on the elements for better accuracy. A default value of \( 0.0001\ (1e-4) \) is normally applied. This scaling is only internal to the algorithm. No further processing is necessary on the output buffer.
- Parameters
-
| [in] | _width | width of the input array to be processed. |
| [in] | _height | height of the input array to be processed. |
| [in] | _radius | radius of the square filter window, i.e. \(\ radius=filter\_width/2-1\). |
| [in] | _scaling | factor by which to scale the array elements before processing. |
| [in] | _staging | flag to indicate whether or not to instantiate the staging buffers. |
Performs a data transfer to a staging buffer.
The transfer happens from a device buffer to the associated (specified) staging buffer on the host.
- Parameters
-
| [in] | mem | enumeration value specifying an output staging buffer. |
| [in] | block | a flag to indicate whether to perform a blocking or a non-blocking operation. |
| [in] | events | a wait-list of events. |
| [out] | event | event associated with the read operation to the staging buffer. |
| void cl_algo::GF::BoxFilterSAT::run |
( |
const std::vector< cl::Event > * |
events = nullptr, |
|
|
cl::Event * |
event = nullptr |
|
) |
| |
Executes the necessary kernels.
The function call is non-blocking.
- Parameters
-
| [in] | events | a wait-list of events. |
| [out] | event | event associated with the kernel execution. |
template<typename period >
| double cl_algo::GF::BoxFilterSAT::run |
( |
clutils::GPUTimer< period > & |
timer, |
|
|
const std::vector< cl::Event > * |
events = nullptr |
|
) |
| |
|
inline |
Executes the necessary kernels.
This run instance is used for profiling.
- Parameters
-
| [in] | timer | GPUTimer that does the profiling of the kernel executions. |
| [in] | events | a wait-list of events. |
- Returns
- Τhe total execution time measured by the timer.
| void cl_algo::GF::BoxFilterSAT::setRadius |
( |
int |
_radius | ) |
|
Sets the filter window radius.
Updates the kernel argument for the filter window radius.
- Parameters
-
| [in] | _radius | the radius of the square filter window. |
| void cl_algo::GF::BoxFilterSAT::setScaling |
( |
float |
_scaling | ) |
|
Sets the scaling factor.
Updates the kernel argument for the scaling factor.
- Parameters
-
| [in] | _scaling | scaling factor. |
Performs a data transfer to a device buffer.
The transfer happens from a staging buffer on the host to the associated (specified) device buffer.
- Parameters
-
| [in] | mem | enumeration value specifying an input device buffer. |
| [in] | ptr | a pointer to an array holding input data. If not NULL, the data from ptr will be copied to the associated staging buffer. |
| [in] | block | a flag to indicate whether to perform a blocking or a non-blocking operation. |
| [in] | events | a wait-list of events. |
| [out] | event | event associated with the write operation to the device buffer. |
| cl_float* cl_algo::GF::BoxFilterSAT::hPtrIn |
Mapping of the input staging buffer.
| cl_float* cl_algo::GF::BoxFilterSAT::hPtrOut |
Mapping of the output staging buffer.
The documentation for this class was generated from the following files: