Skip to content

Commit

Permalink
try to address PR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
FabianSchuetze committed Jun 12, 2021
1 parent 1629980 commit 63a58ee
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 29 deletions.
14 changes: 8 additions & 6 deletions gpu/containers/include/pcl/gpu/containers/device_array.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,31 +102,33 @@ namespace pcl
void upload(const T *host_ptr, std::size_t size);

/** \brief Uploads data from CPU memory to internal buffer.
* Returns false if device_offset < device_begin_offset
* Returns false if device_begin_offset + num_elements > size of array
* Please noote that in contrast to the other upload function, this function
* never allocates memory.
* \param host_ptr pointer to buffer to upload
* \param device_begin_offset begin upload
* \param device_end_offset end upload
* \param num_elements number of elements from device_bein_offset
* */
bool
upload(T* host_ptr,
std::size_t device_begin_offset,
std::size_t device_end_offset);
std::size_t num_elements);

/** \brief Downloads data from internal buffer to CPU memory
* \param host_ptr pointer to buffer to download
* */
void download(T *host_ptr) const;

/** \brief Downloads data from internal buffer to CPU memory.
* Returns false if device_offset < device_begin_offset
* Returns false if device_begin_offset + num_elements > size of array
* \param host_ptr pointer to buffer to download
* \param device_begin_offset begin download location
* \param device_end_offset end download location
* \param num_elements number of elements from device_begin_offset
* */
bool
download(T* host_ptr,
std::size_t device_begin_offset,
std::size_t device_end_offset) const;
std::size_t num_elements) const;

/** \brief Uploads data to internal buffer in GPU memory. It calls create() inside to ensure that intenal buffer size is enough.
* \param data host vector to upload from
Expand Down
12 changes: 7 additions & 5 deletions gpu/containers/include/pcl/gpu/containers/device_memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,16 +96,18 @@ namespace pcl
* */
void upload(const void *host_ptr_arg, std::size_t sizeBytes_arg);

/** \brief Uploads data from CPU memory to device array
/** \brief Uploads data from CPU memory to device array. Please note
* that this overload never allocates memory in contrast to the
* other upload function.
* Returns true if upload successfull
* \param host_ptr_arg pointer to buffer to upload
* \param device_begin_byte_offset first byte position to upload to
* \param device_end_byte_offset last byte position to upload to
* \param num_bytes number of bytes to upload
* */
bool
upload(void* host_ptr,
std::size_t device_begin_byte_offset,
std::size_t device_end_byte_offset);
std::size_t num_bytes);

/** \brief Downloads data from internal buffer to CPU memory
* \param host_ptr_arg pointer to buffer to download
Expand All @@ -116,12 +118,12 @@ namespace pcl
* Returns true if download successfull
* \param host_ptr_arg pointer to buffer to download
* \param device_begin_byte_offset first byte position to download
* \param device_end_byte_offset last byte position to download
* \param num_bytes number of bytes to download
* */
bool
download(void* host_ptr,
std::size_t device_begin_byte_offset,
std::size_t device_end_byte_offset) const;
std::size_t num_bytes) const;

/** \brief Performs swap of data pointed with another device memory.
* \param other_arg device memory to swap with
Expand Down
12 changes: 6 additions & 6 deletions gpu/containers/include/pcl/gpu/containers/impl/device_array.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,23 +67,23 @@ template <class T>
inline bool
DeviceArray<T>::upload(T* host_ptr,
std::size_t device_begin_offset,
std::size_t device_end_offset)
std::size_t num_elements)
{
std::size_t begin_byte_offset = device_begin_offset * sizeof(T);
std::size_t end_byte_offset = device_end_offset * sizeof(T);
return DeviceMemory::upload(host_ptr, begin_byte_offset, end_byte_offset);
std::size_t num_bytes = num_elements * sizeof(T);
return DeviceMemory::upload(host_ptr, begin_byte_offset, num_bytes);
}
template<class T> inline void DeviceArray<T>::download(T *host_ptr) const
{ DeviceMemory::download( host_ptr ); }
template <class T>
inline bool
DeviceArray<T>::download(T* host_ptr,
std::size_t device_begin_offset,
std::size_t device_end_offset) const
std::size_t num_elements) const
{
std::size_t begin_byte_offset = device_begin_offset * sizeof(T);
std::size_t end_byte_offset = device_end_offset * sizeof(T);
return DeviceMemory::download(host_ptr, begin_byte_offset, end_byte_offset);
std::size_t num_bytes = num_elements * sizeof(T);
return DeviceMemory::download(host_ptr, begin_byte_offset, num_bytes);
}
template<class T> void DeviceArray<T>::swap(DeviceArray& other_arg) { DeviceMemory::swap(other_arg); }

Expand Down
26 changes: 14 additions & 12 deletions gpu/containers/src/device_memory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,14 +177,15 @@ void pcl::gpu::DeviceMemory::upload(const void *host_ptr_arg, std::size_t sizeBy
bool
pcl::gpu::DeviceMemory::upload(void* host_ptr_arg,
std::size_t device_begin_byte_offset,
std::size_t device_end_byte_offset)
std::size_t num_bytes)
{
if (device_end_byte_offset < device_begin_byte_offset) {
return false;
}
const void* const begin = static_cast<char*>(data_) + device_begin_byte_offset;
std::size_t bytes = device_end_byte_offset - device_begin_byte_offset;
cudaSafeCall(cudaMemcpy(host_ptr_arg, begin, bytes, cudaMemcpyHostToDevice));
const char* const upload_end = static_cast<const char*>(begin) + num_bytes;
const char* const array_end = static_cast<char*>(data_) + sizeBytes_;
if (upload_end > array_end) {
return false;
}
cudaSafeCall(cudaMemcpy(host_ptr_arg, begin, num_bytes, cudaMemcpyHostToDevice));
cudaSafeCall(cudaDeviceSynchronize());
return true;
}
Expand All @@ -198,14 +199,15 @@ void pcl::gpu::DeviceMemory::download(void *host_ptr_arg) const
bool
pcl::gpu::DeviceMemory::download(void* host_ptr_arg,
std::size_t device_begin_byte_offset,
std::size_t device_end_byte_offset) const
std::size_t num_bytes) const
{
if (device_end_byte_offset < device_begin_byte_offset) {
return false;
}
const void* const begin = static_cast<char*>(data_) + device_begin_byte_offset;
std::size_t bytes = device_end_byte_offset - device_begin_byte_offset;
cudaSafeCall(cudaMemcpy(host_ptr_arg, begin, bytes, cudaMemcpyDeviceToHost));
const char* const download_end = static_cast<const char*>(begin) + num_bytes;
const char* const array_end = static_cast<char*>(data_) + sizeBytes_;
if (download_end > array_end) {
return false;
}
cudaSafeCall(cudaMemcpy(host_ptr_arg, begin, num_bytes, cudaMemcpyDeviceToHost));
cudaSafeCall(cudaDeviceSynchronize());
return true;
}
Expand Down

0 comments on commit 63a58ee

Please sign in to comment.