Interface class for the icpTransform_Matrix
kernel.
More...
#include <algorithms.hpp>
Public Types | |
enum | Memory : uint8_t { Memory::H_IN_S, Memory::H_IN_MEAN, Memory::H_OUT_T_K, Memory::D_IN_S, Memory::D_IN_MEAN, Memory::D_OUT_T_K } |
Enumerates the memory objects handled by the class. More... | |
Public Member Functions | |
ICPPowerMethod (clutils::CLEnv &_env, clutils::CLEnvInfo< 1 > _info) | |
Configures an OpenCL environment as specified by _info . More... | |
cl::Memory & | get (ICPPowerMethod::Memory mem) |
Returns a reference to an internal memory object. More... | |
void | init (Staging _staging=Staging::IO) |
Configures kernel execution parameters. More... | |
void | write (ICPPowerMethod::Memory mem=ICPPowerMethod::Memory::D_IN_S, 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 (ICPPowerMethod::Memory mem=ICPPowerMethod::Memory::H_OUT_T_K, 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... | |
template<typename period > | |
double | run (clutils::GPUTimer< period > &timer, const std::vector< cl::Event > *events=nullptr) |
Executes the necessary kernels. More... | |
Public Attributes | |
cl_float * | hPtrInS |
cl_float * | hPtrInMean |
cl_float * | hPtrOutTk |
Interface class for the icpTransform_Matrix
kernel.
The icpTransform_Matrix
kernel performs a homogeneous transformation on a set of points using a transformation matrix. For more details, look at the kernel's documentation.
icpTransform_Matrix
kernel is available in kernels/icp_kernels.cl
. 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 ICPTransform<ICPTransformConfig::MATRIX>
instance:
Name | Type | Placement | I/O | Use | Properties | Size |
---|---|---|---|---|---|---|
H_IN_S | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(11*sizeof\ (cl\_float)\) |
H_IN_MEAN | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(2*sizeof\ (cl\_float4)\) |
H_OUT_T_K | Buffer | Host | O | Staging | CL_MEM_READ_WRITE | \(2*sizeof\ (cl\_float4)\) |
D_IN_S | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(11*sizeof\ (cl\_float)\) |
D_IN_MEAN | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(2*sizeof\ (cl\_float4)\) |
D_OUT_T_K | Buffer | Device | O | Processing | CL_MEM_WRITE_ONLY | \(2*sizeof\ (cl\_float4)\) |
|
strong |
Enumerates the memory objects handled by the class.
H_*
names refer to staging buffers on the host. D_*
names refer to buffers on the device. cl_algo::ICP::ICPPowerMethod::ICPPowerMethod | ( | clutils::CLEnv & | _env, |
clutils::CLEnvInfo< 1 > | _info | ||
) |
Configures an OpenCL environment as specified by _info
.
[in] | _env | opencl environment. |
[in] | _info | opencl configuration. It specifies the context, queue, etc, to be used. |
cl::Memory & cl_algo::ICP::ICPPowerMethod::get | ( | ICPPowerMethod::Memory | mem | ) |
Returns a reference to an internal memory object.
This interface exists to allow CL memory sharing between different kernels.
[in] | mem | enumeration value specifying the requested memory object. |
void cl_algo::ICP::ICPPowerMethod::init | ( | Staging | _staging = Staging::IO | ) |
Configures kernel execution parameters.
Sets up memory objects as necessary, and defines the kernel workspaces.
init
, then that memory will be maintained. Otherwise, a new memory object will be created.[in] | _staging | flag to indicate whether or not to instantiate the staging buffers. |
void * cl_algo::ICP::ICPPowerMethod::read | ( | ICPPowerMethod::Memory | mem = ICPPowerMethod::Memory::H_OUT_T_K , |
bool | block = CL_TRUE , |
||
const std::vector< cl::Event > * | events = nullptr , |
||
cl::Event * | event = nullptr |
||
) |
Performs a data transfer to a staging buffer.
The transfer happens from a device buffer to the associated (specified) staging buffer on the host.
[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::ICP::ICPPowerMethod::run | ( | const std::vector< cl::Event > * | events = nullptr , |
cl::Event * | event = nullptr |
||
) |
Executes the necessary kernels.
The function call is non-blocking.
[in] | events | a wait-list of events. |
[out] | event | event associated with the kernel execution. |
|
inline |
Executes the necessary kernels.
This run
instance is used for profiling.
[in] | timer | GPUTimer that does the profiling of the kernel executions. |
[in] | events | a wait-list of events. |
void cl_algo::ICP::ICPPowerMethod::write | ( | ICPPowerMethod::Memory | mem = ICPPowerMethod::Memory::D_IN_S , |
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.
The transfer happens from a staging buffer on the host to the associated (specified) device buffer.
[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::ICP::ICPPowerMethod::hPtrInMean |
Mapping of the input staging buffer for the fixed and moving set means.
cl_float* cl_algo::ICP::ICPPowerMethod::hPtrInS |
Mapping of the input staging buffer for the sums of products.
cl_float* cl_algo::ICP::ICPPowerMethod::hPtrOutTk |
Mapping of the output staging buffer for the incremental parameters.