Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ add_library(
src/mr/detail/limiting_resource_adaptor_impl.cpp
src/mr/detail/logging_resource_adaptor_impl.cpp
src/mr/detail/pool_memory_resource_impl.cpp
src/mr/detail/indexed_pool_memory_resource_impl.cpp
src/mr/detail/prefetch_resource_adaptor_impl.cpp
src/mr/detail/sam_headroom_memory_resource_impl.cpp
src/mr/detail/statistics_resource_adaptor_impl.cpp
Expand All @@ -114,6 +115,7 @@ add_library(
src/mr/limiting_resource_adaptor.cpp
src/mr/logging_resource_adaptor.cpp
src/mr/managed_memory_resource.cpp
src/mr/indexed_pool_memory_resource.cpp
src/mr/pool_memory_resource.cpp
src/mr/prefetch_resource_adaptor.cpp
src/mr/pinned_host_memory_resource.cpp
Expand Down
3 changes: 3 additions & 0 deletions cpp/benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ endfunction(ConfigureBench)
# random allocations benchmark
ConfigureBench(RANDOM_ALLOCATIONS_BENCH random_allocations/random_allocations.cpp)

# fragmentation-sensitive pool benchmark
ConfigureBench(POOL_FRAGMENTATION_BENCH pool_fragmentation/pool_fragmentation_bench.cpp)

# replay benchmark
ConfigureBench(REPLAY_BENCH replay/replay.cpp)

Expand Down
35 changes: 29 additions & 6 deletions cpp/benchmarks/device_uvector/device_uvector_bench.cu
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <rmm/device_vector.hpp>
#include <rmm/mr/cuda_async_memory_resource.hpp>
#include <rmm/mr/cuda_memory_resource.hpp>
#include <rmm/mr/indexed_pool_memory_resource.hpp>
#include <rmm/mr/per_device_resource.hpp>
#include <rmm/mr/pool_memory_resource.hpp>

Expand All @@ -24,10 +25,11 @@
#include <cstdio>
#include <type_traits>

void BM_UvectorSizeConstruction(benchmark::State& state)
template <typename PoolResource>
void uvector_size_construction(benchmark::State& state)
{
rmm::mr::set_current_device_resource(rmm::mr::pool_memory_resource{
rmm::mr::cuda_memory_resource{}, rmm::percent_of_free_device_memory(50)});
rmm::mr::set_current_device_resource(
PoolResource{rmm::mr::cuda_memory_resource{}, rmm::percent_of_free_device_memory(50)});

for (auto _ : state) { // NOLINT(clang-analyzer-deadcode.DeadStores)
rmm::device_uvector<std::int32_t> vec(static_cast<std::size_t>(state.range(0)),
Expand All @@ -40,15 +42,26 @@ void BM_UvectorSizeConstruction(benchmark::State& state)
rmm::mr::reset_current_device_resource();
}

void BM_UvectorSizeConstruction(benchmark::State& state)
{ uvector_size_construction<rmm::mr::pool_memory_resource>(state); }

void BM_UvectorSizeConstructionIndexed(benchmark::State& state)
{ uvector_size_construction<rmm::mr::indexed_pool_memory_resource>(state); }

BENCHMARK(BM_UvectorSizeConstruction)
->RangeMultiplier(10) // NOLINT
->Range(10'000, 1'000'000'000) // NOLINT
->Unit(benchmark::kMicrosecond);
BENCHMARK(BM_UvectorSizeConstructionIndexed)
->RangeMultiplier(10) // NOLINT
->Range(10'000, 1'000'000'000) // NOLINT
->Unit(benchmark::kMicrosecond);

void BM_ThrustVectorSizeConstruction(benchmark::State& state)
template <typename PoolResource>
void thrust_vector_size_construction(benchmark::State& state)
{
rmm::mr::set_current_device_resource(rmm::mr::pool_memory_resource{
rmm::mr::cuda_memory_resource{}, rmm::percent_of_free_device_memory(50)});
rmm::mr::set_current_device_resource(
PoolResource{rmm::mr::cuda_memory_resource{}, rmm::percent_of_free_device_memory(50)});

for (auto _ : state) { // NOLINT(clang-analyzer-deadcode.DeadStores)
rmm::device_vector<std::int32_t> vec(static_cast<std::size_t>(state.range(0)));
Expand All @@ -60,10 +73,20 @@ void BM_ThrustVectorSizeConstruction(benchmark::State& state)
rmm::mr::reset_current_device_resource();
}

void BM_ThrustVectorSizeConstruction(benchmark::State& state)
{ thrust_vector_size_construction<rmm::mr::pool_memory_resource>(state); }

void BM_ThrustVectorSizeConstructionIndexed(benchmark::State& state)
{ thrust_vector_size_construction<rmm::mr::indexed_pool_memory_resource>(state); }

BENCHMARK(BM_ThrustVectorSizeConstruction)
->RangeMultiplier(10) // NOLINT
->Range(10'000, 1'000'000'000) // NOLINT
->Unit(benchmark::kMicrosecond);
BENCHMARK(BM_ThrustVectorSizeConstructionIndexed)
->RangeMultiplier(10) // NOLINT
->Range(10'000, 1'000'000'000) // NOLINT
->Unit(benchmark::kMicrosecond);

// simple kernel used to test concurrent execution.
__global__ void kernel(int const* input, int* output, std::size_t num)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <rmm/mr/binning_memory_resource.hpp>
#include <rmm/mr/cuda_async_memory_resource.hpp>
#include <rmm/mr/cuda_memory_resource.hpp>
#include <rmm/mr/indexed_pool_memory_resource.hpp>
#include <rmm/mr/per_device_resource.hpp>
#include <rmm/mr/pool_memory_resource.hpp>
#include <rmm/resource_ref.hpp>
Expand Down Expand Up @@ -90,6 +91,12 @@ inline any_device_resource make_pool()
rmm::percent_of_free_device_memory(50)};
}

inline any_device_resource make_indexed_pool()
{
return rmm::mr::indexed_pool_memory_resource{rmm::mr::cuda_memory_resource{},
rmm::percent_of_free_device_memory(50)};
}

inline any_device_resource make_arena()
{
return rmm::mr::arena_memory_resource{rmm::mr::get_current_device_resource_ref()};
Expand Down Expand Up @@ -118,6 +125,7 @@ MRFactoryFunc get_mr_factory(std::string const& resource_name)
if (resource_name == "cuda") { return &make_cuda; }
if (resource_name == "cuda_async") { return &make_cuda_async; }
if (resource_name == "pool") { return &make_pool; }
if (resource_name == "indexed_pool") { return &make_indexed_pool; }
if (resource_name == "arena") { return &make_arena; }
if (resource_name == "binning") { return &make_binning; }

Expand All @@ -144,6 +152,12 @@ void declare_benchmark(std::string const& name)
return;
}

if (name == "indexed_pool") {
BENCHMARK_CAPTURE(BM_MultiStreamAllocations, indexed_pool_mr, &make_indexed_pool) //
->Apply(benchmark_range);
return;
}

if (name == "arena") {
BENCHMARK_CAPTURE(BM_MultiStreamAllocations, arena, &make_arena) //
->Apply(benchmark_range);
Expand Down Expand Up @@ -227,6 +241,7 @@ int main(int argc, char** argv)
resource_names.emplace_back("cuda");
resource_names.emplace_back("cuda_async");
resource_names.emplace_back("pool");
resource_names.emplace_back("indexed_pool");
resource_names.emplace_back("arena");
resource_names.emplace_back("binning");
}
Expand Down
Loading
Loading