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_) );