40 #ifndef PCL_GPU_PEOPLE_CUDA_ASYNC_COPY_H_ 41 #define PCL_GPU_PEOPLE_CUDA_ASYNC_COPY_H_ 43 #include <pcl/gpu/containers/device_array.h> 44 #include <pcl/gpu/utils/safe_call.hpp> 56 cudaSafeCall( cudaHostRegister(ptr_, size, 0) );
57 cudaSafeCall( cudaStreamCreate(&stream_) );
62 cudaSafeCall( cudaHostRegister(ptr_, data.size(), 0) );
63 cudaSafeCall( cudaStreamCreate(&stream_) );
68 cudaSafeCall( cudaHostUnregister(ptr_) );
69 cudaSafeCall( cudaStreamDestroy(stream_) );
74 cudaSafeCall( cudaMemcpyAsync(ptr_, arr.
ptr(), arr.
sizeBytes(), cudaMemcpyDeviceToHost, stream_) );
79 cudaSafeCall( cudaMemcpy2DAsync(ptr_, arr.
cols(), arr.
ptr(), arr.
step(), arr.
colsBytes(), arr.
rows(), cudaMemcpyDeviceToHost, stream_) );
84 cudaSafeCall( cudaMemcpyAsync(arr.
ptr(), ptr_, arr.
size(), cudaMemcpyHostToDevice, stream_) );
89 cudaSafeCall( cudaMemcpy2DAsync(arr.
ptr(), arr.
step(), ptr_, arr.
cols(), arr.
colsBytes(), arr.
rows(), cudaMemcpyHostToDevice, stream_) );
94 cudaSafeCall( cudaStreamSynchronize(stream_) );
int cols() const
Returns number of elements in each row.
int colsBytes() const
Returns number of bytes in each row.
T * ptr(int y=0)
Returns pointer to given row in internal buffer.
AsyncCopy(std::vector< T > &data)
AsyncCopy(T *ptr, size_t size)
void download(const DeviceArray2D< T > &arr)
void download(const DeviceArray< T > &arr)
void upload(const DeviceArray2D< T > &arr) const
void upload(const DeviceArray< T > &arr) const
int rows() const
Returns number of rows.
size_t size() const
Returns size in elements.
T * ptr()
Returns pointer for internal buffer in GPU memory.
size_t step() const
Returns stride between two consecutive rows in bytes for internal buffer.