Skip to content

Commit 3d200cc

Browse files
tdavidclDavidFang03
authored andcommitted
[Backends] Provide a variant of DeviceBuffer::resize that skip data copy (Shamrock-code#1503)
closing issue Shamrock-code#1502
1 parent 423d1ff commit 3d200cc

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

src/shambackends/include/shambackends/DeviceBuffer.hpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -960,8 +960,10 @@ namespace sham {
960960
* @brief Resizes the buffer to a given size.
961961
*
962962
* @param new_size The new size of the buffer.
963+
* @param keep_data If `true`, the content of the buffer is preserved up to the minimum of
964+
* the old and new sizes. If `false`, the content may be discarded if a reallocation occurs.
963965
*/
964-
inline void resize(size_t new_size) {
966+
inline void resize(size_t new_size, bool keep_data = true) {
965967

966968
auto dev_sched = hold.get_dev_scheduler_ptr();
967969

@@ -978,7 +980,9 @@ namespace sham {
978980
new_storage_size, get_dev_scheduler_ptr(), get_alignment(dev_sched)));
979981

980982
// copy data
981-
new_buf.copy_from(*this, get_size());
983+
if (keep_data) {
984+
new_buf.copy_from(*this, get_size());
985+
}
982986

983987
// override old buffer
984988
std::swap(new_buf, *this);
@@ -994,7 +998,9 @@ namespace sham {
994998
new_storage_size, get_dev_scheduler_ptr(), get_alignment(dev_sched)));
995999

9961000
// copy data
997-
new_buf.copy_from(*this, new_size);
1001+
if (keep_data) {
1002+
new_buf.copy_from(*this, new_size);
1003+
}
9981004

9991005
// override old buffer
10001006
std::swap(new_buf, *this);
@@ -1005,10 +1011,13 @@ namespace sham {
10051011
}
10061012
}
10071013

1014+
/// same as resize but data will not be copied if reallocation is needed
1015+
inline void resize_discard_data(size_t new_size) { resize(new_size, false); }
1016+
10081017
/**
1009-
* @brief Alias for resize(0).
1018+
* @brief Alias for resize_discard_data(0).
10101019
*/
1011-
inline void free_alloc() { resize(0); }
1020+
inline void free_alloc() { resize_discard_data(0); }
10121021

10131022
/**
10141023
* @brief Expand the buffer by `add_sz` elements.

0 commit comments

Comments
 (0)