Skip to content
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9f0c40e
Simple lookup working
sleeepyjack Jul 4, 2025
7ff8399
Preliminary benchmark
sleeepyjack Jul 5, 2025
77a4c1d
Optimizations
sleeepyjack Jul 5, 2025
142ac06
v2
sleeepyjack Jul 8, 2025
5977bea
Get rid of span and scope
sleeepyjack Jul 9, 2025
18acbed
Add empty()
sleeepyjack Jul 9, 2025
64bf0f3
Add storage class
sleeepyjack Jul 9, 2025
26e23da
Improve member order to reduce struct size
sleeepyjack Jul 10, 2025
90b6fc5
64-bit roaring bitmap
sleeepyjack Aug 13, 2025
0e76a29
Merge remote-tracking branch 'upstream/dev' into roaring-bitmap
sleeepyjack Aug 13, 2025
a56e3a9
Update readme
sleeepyjack Aug 13, 2025
078ea67
Download roaring bitmap .bin files at build time
sleeepyjack Aug 14, 2025
6cd8413
Allow build script to handle extra cmake args
sleeepyjack Aug 14, 2025
42e5d01
Add unit test
sleeepyjack Aug 14, 2025
20dc816
Minor doc fix
sleeepyjack Aug 14, 2025
5d1b470
Compile benchmarks with -lineinfo
sleeepyjack Aug 14, 2025
aa56fd6
Use cub::DeviceTransform instead of thrust::transform
sleeepyjack Aug 14, 2025
144be85
Pass ParentT to CG type and pass CG objects by-value
sleeepyjack Aug 14, 2025
b6800a9
Merge branch 'dev', remote-tracking branch 'upstream' into roaring-bi…
sleeepyjack Aug 15, 2025
a1bc544
Use CMAKE_ARGS in build.sh and some more minor improvements
sleeepyjack Aug 16, 2025
830ca65
Use CMAKE_ARGS in build script and other minor improvements
sleeepyjack Aug 16, 2025
52691d1
Merge branch 'build-script-improvements' into roaring-bitmap
sleeepyjack Aug 18, 2025
01169d8
Address comments from code review
sleeepyjack Aug 18, 2025
41f2939
Merge remote-tracking branch 'upstream' into roaring-bitmap
sleeepyjack Aug 18, 2025
4e68e8a
Code simplifications
sleeepyjack Aug 18, 2025
1dfc139
Resolve merge conflict in build.sh
sleeepyjack Aug 18, 2025
245592e
Use std::fs::file_size in benchmark
sleeepyjack Aug 19, 2025
67d19ec
Move to experimental namespace
sleeepyjack Aug 19, 2025
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
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ target_include_directories(cuco INTERFACE
target_link_libraries(cuco INTERFACE CCCL::CCCL CUDA::toolkit)
target_compile_features(cuco INTERFACE cxx_std_17 cuda_std_17)

###################################################################################################
# - Optionally download RoaringFormatSpec test data -----------------------------------------------

option(CUCO_DOWNLOAD_ROARING_TESTDATA "Download RoaringFormatSpec test data" ON)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/roaring_testdata.cmake)

###################################################################################################
# - optionally build tests ------------------------------------------------------------------------

Expand Down
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,4 +259,11 @@ We plan to add many GPU-accelerated, concurrent data structures to `cuCollection
`cuco::bloom_filter` implements a Blocked Bloom Filter for approximate set membership queries.

#### Examples:
- [Host-bulk APIs (Default fingerprinting policy)](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydVmtvGjkU_StXsx8WmuEVbVUJQiSapLtoK5IF2qpaVsjj8TBWBnvqBwRF-e977ZmBgZBqtVRqwL6Pc889vvZzoJnWXAod9P9-Dngc9HthkBGxsmTFgn5AbUyCMNDSKup-d94tBLyDG5nvFF-lBhq0CZfdy99CmHwd345HcHM_fbifjubj-0nb2Xr7z5wyoVkMVsRMgUkZjHJC8U-5E8JXphwQuGx3oeEMFkG5twiaAx9lJy2syQ6ENGA1wzBcQ8IzBuyJstwAF0DlOs84EZTBlpvUpyrjeDjwvQwiI0PQnqBHjr-SuiUQs4fuPqkxeb_T2W63beJht6VadbLCWHc-j2_uJrO7FkLfu30RGTILiv2wXGHh0Q5IjsgoiRBvRrYgFZCVYrhnpEO-VdxwsQpBy8RsiWI-Tsy1UTyy5oi8CifWXzdA-ohA4kYzGM8WAXwczcaz0Mf5Np7_cf9lDt9G0-loMh_fzeB-is2a3I5dq_DXJxhNvsOf48ltCAypw1TsKVeuCoTKHa0sLjicMXYEI5EFLJ0zyhNOoVIQrOSGKYFlQc7UmhdaQ5Cxj5PxNTfE-LVXxflUnYVYiF-4oJmNGVxRS2UnyqRcL7Hvhqk2ten1sY1JldWmQ6UVpu02X23FbIMplhtGjVTnTdgTo9YBW-YSm7Y7b6Wxuwyl1j7FwCU2hZG1X-bCoOK4aGwkj5sL8YyFgVukWLdxHIOw6-Uj22kntiH0ur92u90B7D-dTucKfmeCKWJYuQ3O_nwkkxduw0Pcd9Btvx-UkcbIrjKe64QrbSAlWeLjuWCy3PD0vpFAvErQKjMPXntoG5Xd0uhx6SvzOPCr22xVmygR8M0tszvynKmDBmaXF0I7tgCcBE5eaLL0JkOXfbB3neVk60553auYDDFLiM0MFA12mjwF5Kt3kuv365q7qnJdl_GeaxW-lKm1ift91KCBqys8kR9t9ojAPO-e47fxJFgOU7lyJK6Knru5WMDsY6yFgNoHw_tcTMRZmbtQZ79_pPMaatewRtU5P1v3LpWiG26rHbEVyrYZeo82ZnDfe80yDbFOK_nSWyHvdZdB3QAdvVj2thd1sRRWYh-mcDjaqgIcYBwafF7M5Tz3Ds6wlDOJ40aFIiwzNX_KWiRldu0scRBidxoF8BASkml2zN1ZR1F3PDoptRhlKX9Zpna107efqziFN1xane1KDeGs35eGjnN3EepU2iyGIh34q80oy1q51HixbBj44YHEzB-mw16dFTyq7i7Ur6gJD4VXjf0vcH2ZJiUG8Bbzt7W7RpjwqE6Gizui3N3W9QOhvWOuZEQyvN7wQomJIahzZamxGCushSmjsKeUR9yga8HrSd2fHqbXXTxjOZbl5oUskGArIkSOrHhfXtVWq8oNhmPTlOiUafcEif3MwnrP0yn2dIqSTvEGnUkmkS7HtgM7LI64X2xU8vIXWuNYbGcaVF8qT6yTQbMJnTJgIb9Cu0Xe5H_kPa2kvvSTvKJ5fkA6UeKLBb9XJPhl17dyPTmsnw48xVAVArr48wVfq-4NiK9CdXjUBmJDae_yve3htsxN8eINWhhoSC8ueh-gRRRNh3q9_NCFVgvvLYP_GczB4lZG1pF_Bmc8qsWklGa4uCkerriA9YrH4CWs9vHmONpH7oKXf_y_fwHeCexw))
- [Host-bulk APIs (Default fingerprinting policy)](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydVmtvGjkU_StXsx8WmuEVbVUJQiSapLtoK5IF2qpaVsjj8TBWBnvqBwRF-e977ZmBgZBqtVRqwL6Pc889vvZzoJnWXAod9P9-Dngc9HthkBGxsmTFgn5AbUyCMNDSKup-d94tBLyDG5nvFF-lBhq0CZfdy99CmHwd345HcHM_fbifjubj-0nb2Xr7z5wyoVkMVsRMgUkZjHJC8U-5E8JXphwQuGx3oeEMFkG5twiaAx9lJy2syQ6ENGA1wzBcQ8IzBuyJstwAF0DlOs84EZTBlpvUpyrjeDjwvQwiI0PQnqBHjr-SuiUQs4fuPqkxeb_T2W63beJht6VadbLCWHc-j2_uJrO7FkLfu30RGTILiv2wXGHh0Q5IjsgoiRBvRrYgFZCVYrhnpEO-VdxwsQpBy8RsiWI-Tsy1UTyy5oi8CifWXzdA-ohA4kYzGM8WAXwczcaz0Mf5Np7_cf9lDt9G0-loMh_fzeB-is2a3I5dq_DXJxhNvsOf48ltCAypw1TsKVeuCoTKHa0sLjicMXYEI5EFLJ0zyhNOoVIQrOSGKYFlQc7UmhdaQ5Cxj5PxNTfE-LVXxflUnYVYiF-4oJmNGVxRS2UnyqRcL7Hvhqk2ten1sY1JldWmQ6UVpu02X23FbIMplhtGjVTnTdgTo9YBW-YSm7Y7b6Wxuwyl1j7FwCU2hZG1X-bCoOK4aGwkj5sL8YyFgVukWLdxHIOw6-Uj22kntiH0ur92u90B7D-dTucKfmeCKWJYuQ3O_nwkkxduw0Pcd9Btvx-UkcbIrjKe64QrbSAlWeLjuWCy3PD0vpFAvErQKjMPXntoG5Xd0uhx6SvzOPCr22xVmygR8M0tszvynKmDBmaXF0I7tgCcBE5eaLL0JkOXfbB3neVk60553auYDDFLiM0MFA12mjwF5Kt3kuv365q7qnJdl_GeaxW-lKm1ift91KCBqys8kR9t9ojAPO-e47fxJFgOU7lyJK6Knru5WMDsY6yFgNoHw_tcTMRZmbtQZ79_pPMaatewRtU5P1v3LpWiG26rHbEVyrYZeo82ZnDfe80yDbFOK_nSWyHvdZdB3QAdvVj2thd1sRRWYh-mcDjaqgIcYBwafF7M5Tz3Ds6wlDOJ40aFIiwzNX_KWiRldu0scRBidxoF8BASkml2zN1ZR1F3PDoptRhlKX9Zpna107efqziFN1xane1KDeGs35eGjnN3EepU2iyGIh34q80oy1q51HixbBj44YHEzB-mw16dFTyq7i7Ur6gJD4VXjf0vcH2ZJiUG8Bbzt7W7RpjwqE6Gizui3N3W9QOhvWOuZEQyvN7wQomJIahzZamxGCushSmjsKeUR9yga8HrSd2fHqbXXTxjOZbl5oUskGArIkSOrHhfXtVWq8oNhmPTlOiUafcEif3MwnrP0yn2dIqSTvEGnUkmkS7HtgM7LI64X2xU8vIXWuNYbGcaVF8qT6yTQbMJnTJgIb9Cu0Xe5H_kPa2kvvSTvKJ5fkA6UeKLBb9XJPhl17dyPTmsnw48xVAVArr48wVfq-4NiK9CdXjUBmJDae_yve3htsxN8eINWhhoSC8ueh-gRRRNh3q9_NCFVgvvLYP_GczB4lZG1pF_Bmc8qsWklGa4uCkerriA9YrH4CWs9vHmONpH7oKXf_y_fwHeCexw))

### roaring_bitmap

`cuco::roaring_bitmap` implements a Roaring bitmap following the [Roaring bitmap format specification](https://github.com/RoaringBitmap/RoaringFormatSpec).

#### Examples:
- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/roaring_bitmap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy9WAtv27YW_ivnqsAgN7aVpI9szmNz43Qz1msPtrtiaAqBkmibsCxqJBXHC_Lf7yGpZ6KsXbc7B4gt8vA7D37n8FB3jqRSMp5IZ_DxzmGRMzjqOjFJVhlZUWfghFlEnK4jeSZC_ew9v07gOVzydC_Yaq3ADTtwfHj8Cia_jkfjIVxOZ79MZ8PFeDrpa1Ej_o6FNJE0giyJqAC1pjBMSYhf-UwXfqVC2wHH_UNwtcC1k89dO51Tg7LnGWzJHhKuIJMUYZiEJYsp0NuQpgpYAiHfpjEjSUhhx9TaqMpxjDnwWw7CA0VQnuCKFJ-WdUkgqjRdf9ZKpQPP2-12fWLM7nOx8mIrLL1348uryfyqh6aXy94nMQYWBP09YwIdD_ZAUrQsJAHaG5MdcAFkJSjOKa4t3wmmWLLqguRLtSOCGpyISSVYkKlG8Ao70f-6AIaPJBi44RzG82sH3gzn43nX4HwYL36avl_Ah-FsNpwsxldzmM5wsyajsd4qfHoLw8lv8PN4MuoCxdChKnqbCu0Fmsp0WGlkYzintGHGkluzZEpDtmQhFASCFb-hIkG3IKViyyzV0MjI4MRsyxRRZuyRc0aVd51cJ89YEsZZROEszELuCU4EIvoBU1uS9sNsffFIJlMsZmrvKUGYkv11ml48RIqIJ1XkhfgvosuLJydZoton1T6lvlXQEFBrkUnlRfQGHfFvaKi46K_bRGK-QkLE7ZNZwjB2ksR1iLqcZr7cS0W3jeVL5AMlzTHGWwY1b5JVY8hqMnq855bIP5gEWyOAH2Txxqe3BKlAMex2OhCMLmFEt7iJGAxFcSul3vo8pZq7heTUKMjNmPNNlhpgGP4yllWxGCc2s3NNsMN84QTTZMfhxXEPgcCCGSIh6Sm8flkbBjflQpk8Q2JuierAUvCttsbgf5xZk94Y6bdGZI7M_eTqPJeY6Cukfxb0sZZ4DdniqVrTwQxPuWQYtX1JaywQ4QaY9V-7WziLfqK8ygTyXc-FXAiMOI7JLEaawoRsabzvapcxkMoILXkc851OIbPhA6OiBx-ts7rI8UyJLJH9gCVm0rVR6nyNQ14Q88B7dXRyQqLvPG1ERBTxWpV1Hpvy79nxyIhi03OmvX5Z2WHp8Q_a8fql16quU5L4BzykKCzqPM7Pgnzrt2SDOZLq4ge90eX7y6k_mn6YvJsOR_5sOpyNJz_6i6v5YjRcDM-nE31IBFhhqSoTxdRGzP40xqzDsoHlKEH-wM90v8DfmMUB57Flo4t2DwY245F2mKrf5Nnia1b5KVFrNP4OcYFkqGtFE6qz2d_QvYRz-PjJ7UDvAmxxGgwa1e2sUAkGADT3jRJ9gGCHgBVTK0cLmPQl2ujfFEu6UJvNsNa-OPbVRacAAvA8uMTShR7-nlFMMmNPceBUdLhDXt4XnKgypYD4xwg4uxqO_nvV30bP9FBPjxVqjAt5QNqcMqafFtLaBbdFDDYY7cNT_DqDo0P90b8Pzs1DLS5g4PppJtd-QHCHN50S-76hBIENaIV2hh2b_X1wsPkzzBfI5M_intRwv_0y3DZMWxifIFhbPF0DGtAVS9xO16qgSeR2CvB7oLFukr6ejK9f_gUytlYEQ8X_BxOxBFVcfKTalr7P0dK493laajFLy1uzvVkc293G5--K56_Y8c_pGjZ1HR3-DV0PRA5vj3O0SrZV5FVD5EmLmU1a9sBQphP3WEP8ibmHt9_mC-AA2N_MDLOlX5oZdxVHsAsPfSIlFcrVHbRWg-dJRBPlLwkKlzW-iz1c_hu2aJA-lsrihfEprMivbXUP7u4L_fpLP-hvTIopqjKZop9tbuZtrBl1Hx5V3VyIy8EAqU7E3urCVHf_o6X6mNscQdHlwkuzIqRCwNkZuvCWoJi5e2k5HNDDD_XoMbMOIxHntue-mKCYofvSjR-psvdRyf6g5VFq0PQIcsSAVY27_W0mH_nYqcIzxA4w1FXHdMtb7LWx9jTPwDJ6BUuq64Pp3VOWJDRqIU2wV3huB9lySYVbWlNTPqPYexuvcGN5rl3PmTjjHkWuoDhFBV4WlR8Sqc7CNRHPL9zCFkF2fsqNjJl3rbq-rmO4Q0jRhuIcOoy5pG7Nkrz05jeK0vG8ty8jYOnbvHdUHUpz_ItNPK1tsu2M6keASzB5JfbGcaTTAY8b_XIB6cWS2h51SkrkTVWjyWrxlIDdL81Sid_21p3fFuqb3SwJuu27qIyw1cBwTEda87am6g3eT3r5_aTmEVnh2vwGYq3X8g-v3laFfLLedCsrium6l8U9SUdPK7KaxZMB1OtMT4sL_ErmvIyDHudL95HSuh25YVgLap2ArnNM7e_uLf_yHG-owQmT6brt2RKNavrlZ2wZ4QXYNPBF3657dn80npXVrN54g6aUHzGBdreuOi3dlFkY6vcvzc-5benbe6IS_ABLWvu1rSjMBfo3XwX4V9HswdREa7-yOQVFbMVGy23FzjUM8lptqxeGicTpmpiR3IQHRbu2oYXE93AIAzjCyWf6IKyUlcdD-82tdb_yqxmywLARKwfDMmDePjZueddO1QLkn2vnC65-nYcLHx1KuXfWnyRiS6Sq03X0u1CsiaJ6t-skN2F4dPwqO8JpaxZOOj2EOw8PDo5OoEdEuD6XW__kEHo9bJkV_lO6EYh6MdkG5m1wzIIaZhiGMQ7e2Be4OKCZtnHuu8U81uPGPFYr5_6T-fsfn-2NIg==))
7 changes: 6 additions & 1 deletion benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ function(ConfigureBench BENCH_NAME)
target_include_directories(${BENCH_NAME} PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}")
target_compile_options(${BENCH_NAME} PRIVATE --compiler-options=-Wall --compiler-options=-Wextra
--compiler-options=-Werror -Wno-deprecated-gpu-targets --expt-extended-lambda)
--compiler-options=-Werror -Wno-deprecated-gpu-targets --expt-extended-lambda -lineinfo)
# Add GCC-specific warning suppression only for GCC
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${BENCH_NAME} PRIVATE -Xcompiler -Wno-subobject-linkage)
Expand Down Expand Up @@ -104,3 +104,8 @@ ConfigureBench(HYPERLOGLOG_BENCH
ConfigureBench(BLOOM_FILTER_BENCH
bloom_filter/add_bench.cu
bloom_filter/contains_bench.cu)

###################################################################################################
# - roaring_bitmap benchmarks ---------------------------------------------------------------------
ConfigureBench(ROARING_BITMAP_BENCH
roaring_bitmap/contains_bench.cu)
97 changes: 97 additions & 0 deletions benchmarks/roaring_bitmap/contains_bench.cu
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* Copyright (c) 2025, NVIDIA CORPORATION.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include <benchmark_defaults.hpp>
#include <benchmark_utils.hpp>

#include <cuco/roaring_bitmap.cuh>
#include <cuco/utility/key_generator.cuh>

#include <nvbench/nvbench.cuh>

#include <cuda/std/cstddef>
#include <cuda/std/cstdint>
#include <thrust/device_vector.h>
#include <thrust/universal_vector.h>

#include <fstream>
#include <string>

using namespace cuco::benchmark; // defaults
using namespace cuco::utility; // key_generator, distribution

template <typename T>
void roaring_bitmap_contains(nvbench::state& state, nvbench::type_list<T>)
{
auto const num_items = state.get_int64("NumInputs");
auto const bitmap_file = state.get_string_or_default("BitmapFile", {});

std::ifstream file(bitmap_file, std::ios::binary);
if (!file.is_open()) { state.skip("Bitmap file not found"); }

// Get file size
file.seekg(0, std::ios::end);
std::streamsize file_size = file.tellg();
file.seekg(0, std::ios::beg);

thrust::universal_host_pinned_vector<cuda::std::byte> buffer(file_size);

file.read(reinterpret_cast<char*>(thrust::raw_pointer_cast(buffer.data())), file_size);
file.close();

cuco::roaring_bitmap<T> roaring_bitmap(thrust::raw_pointer_cast(buffer.data()));

thrust::device_vector<T> items(num_items);

key_generator gen{};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just caffeinating the engine ;)

Suggested change
key_generator gen{};
key_generator gen{0xc0ffee};

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ultimately, I would like to use the same default seed for all cuco benchmarks and add an option to adjust it via nvbench. We currently use std::time(nullptr) as the default seed which is another problem in itself. So yeah, this will be a separate PR to fix this for the entire library.

gen.generate(distribution::unique{}, items.begin(), items.end());

thrust::device_vector<bool> contained(items.size(), false);

state.add_element_count(items.size());
state.add_global_memory_reads<T>(items.size(), "InputSize");

auto& summ = state.add_summary("BitmapSizeMB");
summ.set_string("hint", "BitmapSize");
summ.set_string("short_name", "BitmapSizeMB");
summ.set_string("description", "Bitmap size in MB");
summ.set_float64("value", static_cast<double>(file_size) / (1024 * 1024));

state.exec([&](nvbench::launch& launch) {
roaring_bitmap.contains_async(
items.begin(), items.end(), contained.begin(), {launch.get_stream()});
});
}

NVBENCH_BENCH_TYPES(roaring_bitmap_contains,
NVBENCH_TYPE_AXES(nvbench::type_list<nvbench::uint32_t>))
.set_name("roaring_bitmap_contains")
.add_int64_power_of_two_axis("NumInputs", {32})
// Default benchmark is only available if the Roaring bitmap testdata has been downloaded
#ifdef CUCO_ROARING_DATA_DIR
.add_string_axis("BitmapFile", {std::string(CUCO_ROARING_DATA_DIR) + "/bitmapwithruns.bin"})
#endif
.set_max_noise(cuco::benchmark::defaults::MAX_NOISE);

NVBENCH_BENCH_TYPES(roaring_bitmap_contains,
NVBENCH_TYPE_AXES(nvbench::type_list<nvbench::uint64_t>))
.set_name("roaring_bitmap_contains")
.add_int64_power_of_two_axis("NumInputs", {31})
// Default benchmark is only available if the Roaring bitmap testdata has been downloaded
#ifdef CUCO_ROARING_DATA_DIR
.add_string_axis("BitmapFile", {std::string(CUCO_ROARING_DATA_DIR) + "/portable_bitmap64.bin"})
#endif
.set_max_noise(cuco::benchmark::defaults::MAX_NOISE);
41 changes: 41 additions & 0 deletions cmake/roaring_testdata.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# =============================================================================
# Copyright (c) 2025, NVIDIA CORPORATION.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
# =============================================================================

# Only act if enabled
if(NOT CUCO_DOWNLOAD_ROARING_TESTDATA)
return()
endif()

set(CUCO_ROARING_DATA_DIR "${CMAKE_BINARY_DIR}/data/roaring_bitmap")

file(MAKE_DIRECTORY "${CUCO_ROARING_DATA_DIR}")

set(ROARING_FORMATSPEC_BASE "https://raw.githubusercontent.com/RoaringBitmap/RoaringFormatSpec/5177ad9")

rapids_cmake_download_with_retry("${ROARING_FORMATSPEC_BASE}/testdata/bitmapwithoutruns.bin"
"${CUCO_ROARING_DATA_DIR}/bitmapwithoutruns.bin"
"d719ae2e0150a362ef7cf51c361527585891f01460b1a92bcfb6a7257282a442")

rapids_cmake_download_with_retry("${ROARING_FORMATSPEC_BASE}/testdata/bitmapwithruns.bin"
"${CUCO_ROARING_DATA_DIR}/bitmapwithruns.bin"
"1f1909bfdd354fa2f0694fe88b8076833ca5383ad9fc3f68f2709c84a2ab70e3")

rapids_cmake_download_with_retry("${ROARING_FORMATSPEC_BASE}/testdata64/portable_bitmap64.bin"
"${CUCO_ROARING_DATA_DIR}/portable_bitmap64.bin"
"b5a553a759167f5f9ccb3fa21552d943b4c73235635b753376f4faf62067d178")

message(STATUS "Roaring Bitmap test data downloaded to: ${CUCO_ROARING_DATA_DIR}")

# Define macro only when data is available
add_compile_definitions(CUCO_ROARING_DATA_DIR="${CUCO_ROARING_DATA_DIR}")
1 change: 1 addition & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,4 @@ ConfigureExample(STATIC_MULTIMAP_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/
ConfigureExample(HYPERLOGLOG_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/hyperloglog/host_bulk_example.cu")
ConfigureExample(HYPERLOGLOG_DEVICE_REF_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/hyperloglog/device_ref_example.cu")
ConfigureExample(BLOOM_FILTER_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/bloom_filter/host_bulk_example.cu")
ConfigureExample(ROARING_BITMAP_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/roaring_bitmap/host_bulk_example.cu")
Loading
Loading