Skip to content

Commit

Permalink
ANN_BENCH: enable move semantics for configured_raft_resources (#2311)
Browse files Browse the repository at this point in the history
Re-enable move constructor for the `configured_raft_resources`. It was implicitly deleted before, which was exposed and made explicit in #2269 .
Allowing move semantics here means avoiding an extra unwanted overhead during algorithm preparation in the benchmarks tool.

Authors:
  - Artem M. Chirkin (https://github.com/achirkin)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: #2311
  • Loading branch information
achirkin authored May 15, 2024
1 parent f3806f1 commit ee2a0ba
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions cpp/bench/ann/src/raft/raft_ann_bench_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@ class configured_raft_resources {
* It's used by the copy constructor.
*/
explicit configured_raft_resources(const std::shared_ptr<shared_raft_resources>& shared_res)
: shared_res_{shared_res}, res_{rmm::cuda_stream_view(get_stream_from_global_pool())}
: shared_res_{shared_res},
res_{std::make_unique<raft::device_resources>(
rmm::cuda_stream_view(get_stream_from_global_pool()))}
{
}

Expand All @@ -131,9 +133,9 @@ class configured_raft_resources {
{
}

configured_raft_resources(configured_raft_resources&&) = delete;
configured_raft_resources& operator=(configured_raft_resources&&) = delete;
~configured_raft_resources() = default;
configured_raft_resources(configured_raft_resources&&);
configured_raft_resources& operator=(configured_raft_resources&&);
~configured_raft_resources() = default;
configured_raft_resources(const configured_raft_resources& res)
: configured_raft_resources{res.shared_res_}
{
Expand All @@ -144,11 +146,11 @@ class configured_raft_resources {
return *this;
}

operator raft::resources&() noexcept { return res_; }
operator const raft::resources&() const noexcept { return res_; }
operator raft::resources&() noexcept { return *res_; }
operator const raft::resources&() const noexcept { return *res_; }

/** Get the main stream */
[[nodiscard]] auto get_sync_stream() const noexcept { return resource::get_cuda_stream(res_); }
[[nodiscard]] auto get_sync_stream() const noexcept { return resource::get_cuda_stream(*res_); }

private:
/** The resources shared among multiple raft handles / threads. */
Expand All @@ -157,7 +159,11 @@ class configured_raft_resources {
* Until we make the use of copies of raft::resources thread-safe, each benchmark wrapper must
* have its own copy of it.
*/
raft::device_resources res_;
std::unique_ptr<raft::device_resources> res_ = std::make_unique<raft::device_resources>();
};

inline configured_raft_resources::configured_raft_resources(configured_raft_resources&&) = default;
inline configured_raft_resources& configured_raft_resources::operator=(
configured_raft_resources&&) = default;

} // namespace raft::bench::ann

0 comments on commit ee2a0ba

Please sign in to comment.