Interface class for the icpMean_Weighted
kernel.
More...
#include <algorithms.hpp>
Public Types | |
enum | Memory : uint8_t { Memory::H_IN_F, Memory::H_IN_M, Memory::H_IN_W, Memory::H_IN_SUM_W, Memory::H_OUT, Memory::D_IN_F, Memory::D_IN_M, Memory::D_IN_W, Memory::D_IN_SUM_W, Memory::D_GM, Memory::D_OUT } |
Enumerates the memory objects handled by the class. More... | |
Public Member Functions | |
ICPMean (clutils::CLEnv &_env, clutils::CLEnvInfo< 1 > _info) | |
Configures an OpenCL environment as specified by _info . More... | |
cl::Memory & | get (ICPMean::Memory mem) |
Returns a reference to an internal memory object. More... | |
void | init (unsigned int _n, Staging _staging=Staging::IO) |
Configures kernel execution parameters. More... | |
void | write (ICPMean::Memory mem=ICPMean::Memory::D_IN_F, 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 (ICPMean::Memory mem=ICPMean::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... | |
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 * | hPtrInF |
cl_float * | hPtrInM |
cl_float * | hPtrInW |
cl_double * | hPtrInSW |
cl_float * | hPtrOut |
Interface class for the icpMean_Weighted
kernel.
The icpMean_Weighted
kernel computes the weighted mean on the xyz dimensions of the fixed and moving sets of 8-D (4-D geometric and 4-D photometric information) points. For more details, look at the kernel's documentation.
icpMean_Weighted
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 an ICPMean<ICPMeanConfig::WEIGHTED>
instance:
Name | Type | Placement | I/O | Use | Properties | Size |
---|---|---|---|---|---|---|
H_IN_F | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(n*sizeof\ (cl\_float8)\) |
H_IN_M | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(n*sizeof\ (cl\_float8)\) |
H_IN_W | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \(n*sizeof\ (cl\_float) \) |
H_IN_SUM_W | Buffer | Host | I | Staging | CL_MEM_READ_WRITE | \( sizeof\ (cl\_double)\) |
H_OUT | Buffer | Host | O | Staging | CL_MEM_READ_WRITE | \(2*sizeof\ (cl\_float4)\) |
D_IN_F | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(n*sizeof\ (cl\_float8)\) |
D_IN_M | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(n*sizeof\ (cl\_float8)\) |
D_IN_W | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \(n*sizeof\ (cl\_float) \) |
D_IN_SUM_W | Buffer | Device | I | Processing | CL_MEM_READ_ONLY | \( sizeof\ (cl\_double)\) |
D_OUT | 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::ICPMean< ICPMeanConfig::WEIGHTED >::ICPMean | ( | 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::ICPMean< ICPMeanConfig::WEIGHTED >::get | ( | ICPMean< ICPMeanConfig::WEIGHTED >::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::ICPMean< ICPMeanConfig::WEIGHTED >::init | ( | unsigned int | _n, |
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] | _n | number of points in the input sets. |
[in] | _staging | flag to indicate whether or not to instantiate the staging buffers. |
void * cl_algo::ICP::ICPMean< ICPMeanConfig::WEIGHTED >::read | ( | ICPMean< ICPMeanConfig::WEIGHTED >::Memory | mem = ICPMean< ICPMeanConfig::WEIGHTED >::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.
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::ICPMean< ICPMeanConfig::WEIGHTED >::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::ICPMean< ICPMeanConfig::WEIGHTED >::write | ( | ICPMean< ICPMeanConfig::WEIGHTED >::Memory | mem = ICPMean< ICPMeanConfig::WEIGHTED >::Memory::D_IN_F , |
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::ICPMean< ICPMeanConfig::WEIGHTED >::hPtrInF |
Mapping of the input staging buffer for the fixed set.
cl_float* cl_algo::ICP::ICPMean< ICPMeanConfig::WEIGHTED >::hPtrInM |
Mapping of the input staging buffer for the moving set.
cl_double* cl_algo::ICP::ICPMean< ICPMeanConfig::WEIGHTED >::hPtrInSW |
Mapping of the input staging buffer for the sum of weights.
cl_float* cl_algo::ICP::ICPMean< ICPMeanConfig::WEIGHTED >::hPtrInW |
Mapping of the input staging buffer for the weights.
cl_float* cl_algo::ICP::ICPMean< ICPMeanConfig::WEIGHTED >::hPtrOut |
Mapping of the output staging buffer for the means.