From b502cb88b8057c8072eb29c29f23a94e4fa13c9a Mon Sep 17 00:00:00 2001 From: achirkin Date: Fri, 28 Aug 2026 17:36:02 +0200 Subject: [PATCH 1/3] Use raft::launch_kernel in cagra search JIT kernels --- cpp/cmake/thirdparty/get_raft.cmake | 4 +- .../search_multi_cta_kernel_launcher_jit.cuh | 144 +++++++------ .../search_multi_kernel_launcher_jit.cuh | 55 +++-- .../search_single_cta_kernel_launcher_jit.cuh | 196 +++++++++--------- 4 files changed, 196 insertions(+), 203 deletions(-) diff --git a/cpp/cmake/thirdparty/get_raft.cmake b/cpp/cmake/thirdparty/get_raft.cmake index 8db55260ad..b588c92407 100644 --- a/cpp/cmake/thirdparty/get_raft.cmake +++ b/cpp/cmake/thirdparty/get_raft.cmake @@ -6,8 +6,8 @@ # Use RAPIDS_VERSION_MAJOR_MINOR from rapids_config.cmake set(RAFT_VERSION "${RAPIDS_VERSION_MAJOR_MINOR}") -set(RAFT_FORK "rapidsai") -set(RAFT_PINNED_TAG "${rapids-cmake-checkout-tag}") +set(RAFT_FORK "achirkin") +set(RAFT_PINNED_TAG "enh-launch-kernel-extended") set(LIBRAFT_LOGGING_LEVEL "INFO" CACHE STRING "Choose the RAFT logging level compiled into cuVS." ) diff --git a/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh b/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh index fe3c777377..5877d82029 100644 --- a/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh +++ b/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -102,55 +103,51 @@ void select_and_run(const dataset_descriptor_host& dat // function The descriptor's state is managed by a shared_ptr internally, so no need to explicitly // keep it alive - // Cast size_t/int64_t parameters to match kernel signature exactly - // The dispatch mechanism uses void* pointers, so parameter sizes must match exactly - // graph.extent(1) returns int64_t but kernel expects uint32_t - // traversed_hash_bitlen is int64_t but kernel expects uint32_t - // ps.itopk_size, ps.min_iterations, ps.max_iterations are size_t (8 bytes) but kernel expects - // uint32_t (4 bytes) ps.num_random_samplings is uint32_t but kernel expects unsigned - cast for - // consistency + // These arguments are wider than the kernel parameters they feed; the casts record the + // intentional narrowing. graph.extent() and traversed_hash_bitlen are int64_t, and + // ps.itopk_size / ps.min_iterations / ps.max_iterations are size_t. const uint32_t graph_degree_u32 = static_cast(graph.extent(1)); const uint32_t traversed_hash_bitlen_u32 = static_cast(traversed_hash_bitlen); const uint32_t itopk_size_u32 = static_cast(ps.itopk_size); const uint32_t min_iterations_u32 = static_cast(ps.min_iterations); const uint32_t max_iterations_u32 = static_cast(ps.max_iterations); - const unsigned num_random_samplings_u = static_cast(ps.num_random_samplings); - auto kernel_launcher = [&]() -> void { - launcher->dispatch< - multi_cta_search::search_multi_cta_kernel_func_t>( - stream, - grid_dims, - block_dims, - smem_size, - topk_indices_ptr, - topk_distances_ptr, - dev_desc, - queries_ptr, - graph.data_handle(), - max_elements, - graph_degree_u32, - source_indices_ptr, - num_random_samplings_u, - ps.rand_xor_mask, - dev_seed_ptr, - num_seeds, - visited_hash_bitlen, - traversed_hashmap_ptr, - traversed_hash_bitlen_u32, - itopk_size_u32, - min_iterations_u32, - max_iterations_u32, - num_executed_iterations, - static_cast(graph.extent(0)), - query_id_offset, - filter_payload); - }; - cuvs::neighbors::detail::safely_launch_kernel_with_smem_size< - multi_cta_search::search_multi_cta_kernel_func_t>( - smem_size, kernel_launcher, launcher->get_kernel()); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); + using kernel_t = + multi_cta_search::search_multi_cta_kernel_func_t; + auto kernel = raft::kernel_ref{launcher->get_kernel()}; + + cuvs::neighbors::detail::safely_launch_kernel_with_smem_size( + smem_size, + [&] { + raft::launch_kernel({stream, smem_size}, + grid_dims, + block_dims, + kernel, + topk_indices_ptr, + topk_distances_ptr, + dev_desc, + queries_ptr, + graph.data_handle(), + max_elements, + graph_degree_u32, + source_indices_ptr, + ps.num_random_samplings, + ps.rand_xor_mask, + dev_seed_ptr, + num_seeds, + visited_hash_bitlen, + traversed_hashmap_ptr, + traversed_hash_bitlen_u32, + itopk_size_u32, + min_iterations_u32, + max_iterations_u32, + num_executed_iterations, + static_cast(graph.extent(0)), + query_id_offset, + filter_payload, + 10001 /* PROBE multi_cta select_and_run */); + }, + kernel.handle); } // Multi-partition launcher. Drives `search_multi_cta_mp` with a 3D grid @@ -216,41 +213,42 @@ void select_and_run_mp(const dataset_descriptor_host& dim3 block_dims(block_size, 1, 1); dim3 grid_dims(num_cta_per_query, num_queries, num_partitions); - const uint32_t max_graph_degree_u32 = static_cast(max_graph_degree); + // traversed_hash_bitlen is int64_t and the ps iteration counts are size_t; the casts record the + // intentional narrowing to the kernel's uint32_t parameters. const uint32_t traversed_hash_bitlen_u32 = static_cast(traversed_hash_bitlen); const uint32_t itopk_size_u32 = static_cast(ps.itopk_size); const uint32_t min_iterations_u32 = static_cast(ps.min_iterations); const uint32_t max_iterations_u32 = static_cast(ps.max_iterations); - const unsigned num_random_samplings_u = static_cast(ps.num_random_samplings); - - auto kernel_launcher = [&]() -> void { - launcher->dispatch< - multi_cta_search::search_multi_cta_mp_kernel_func_t>( - stream, - grid_dims, - block_dims, - smem_size, - partition_descs, - intermediate_indices_ptr, - intermediate_distances_ptr, - queries_ptr, - max_elements, - max_graph_degree_u32, - num_random_samplings_u, - ps.rand_xor_mask, - visited_hash_bitlen, - traversed_hashmap_ptr, - traversed_hash_bitlen_u32, - itopk_size_u32, - min_iterations_u32, - max_iterations_u32, - query_id_offset); - }; - cuvs::neighbors::detail::safely_launch_kernel_with_smem_size< - multi_cta_search::search_multi_cta_mp_kernel_func_t>( - smem_size, kernel_launcher, launcher->get_kernel()); - RAFT_CUDA_TRY(cudaPeekAtLastError()); + using kernel_t = + multi_cta_search::search_multi_cta_mp_kernel_func_t; + auto kernel = raft::kernel_ref{launcher->get_kernel()}; + + cuvs::neighbors::detail::safely_launch_kernel_with_smem_size( + smem_size, + [&] { + raft::launch_kernel({stream, smem_size}, + grid_dims, + block_dims, + kernel, + partition_descs, + intermediate_indices_ptr, + intermediate_distances_ptr, + queries_ptr, + max_elements, + max_graph_degree, + ps.num_random_samplings, + ps.rand_xor_mask, + visited_hash_bitlen, + traversed_hashmap_ptr, + traversed_hash_bitlen_u32, + itopk_size_u32, + min_iterations_u32, + max_iterations_u32, + query_id_offset, + 10002 /* PROBE multi_cta select_and_run_mp */); + }, + kernel.handle); } } // namespace cuvs::neighbors::cagra::detail::multi_cta_search diff --git a/cpp/src/neighbors/detail/cagra/search_multi_kernel_launcher_jit.cuh b/cpp/src/neighbors/detail/cagra/search_multi_kernel_launcher_jit.cuh index 2be7cd4e83..1ea29180b3 100644 --- a/cpp/src/neighbors/detail/cagra/search_multi_kernel_launcher_jit.cuh +++ b/cpp/src/neighbors/detail/cagra/search_multi_kernel_launcher_jit.cuh @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -58,15 +59,14 @@ void random_pickup_jit(const dataset_descriptor_host& // Get the device descriptor pointer const auto* dev_desc = dataset_desc.dev_ptr(cuda_stream); - // Cast size_t parameters to match kernel signature exactly - // The dispatch mechanism uses void* pointers, so parameter sizes must match exactly + // `ldr` is wider than the kernel parameter; the cast records the intentional narrowing. const uint32_t ldr_u32 = static_cast(ldr); - launcher->dispatch>( - cuda_stream, + raft::launch_kernel( + {cuda_stream, dataset_desc.smem_ws_size_in_bytes}, grid_size, dim3(block_size, 1, 1), - dataset_desc.smem_ws_size_in_bytes, + raft::kernel_ref>{launcher->get_kernel()}, dev_desc, queries_ptr, num_pickup, @@ -80,8 +80,6 @@ void random_pickup_jit(const dataset_descriptor_host& visited_hashmap_ptr, hash_bitlen, graph_size); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); } // JIT version of compute_distance_to_child_nodes @@ -121,12 +119,13 @@ void compute_distance_to_child_nodes_jit( // Get the device descriptor pointer const auto* dev_desc = dataset_desc.dev_ptr(cuda_stream); - launcher->dispatch< - compute_distance_to_child_nodes_kernel_func_t>( - cuda_stream, + raft::launch_kernel( + {cuda_stream, dataset_desc.smem_ws_size_in_bytes}, grid_size, dim3(block_size, 1, 1), - dataset_desc.smem_ws_size_in_bytes, + raft::kernel_ref< + compute_distance_to_child_nodes_kernel_func_t>{ + launcher->get_kernel()}, parent_node_list, parent_candidates_ptr, parent_distance_ptr, @@ -143,8 +142,6 @@ void compute_distance_to_child_nodes_jit( result_distances_ptr, ldd, filter_payload); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); } // JIT version of apply_filter @@ -166,24 +163,20 @@ void apply_filter_jit(const SourceIndexT* source_indices_ptr, const std::uint32_t block_size = 256; const std::uint32_t grid_size = raft::ceildiv(num_queries * result_buffer_size, block_size); - // Alias avoids nested `dispatch< alias_template<...>>` which NVCC can misparse as - // comparison/shift. - using apply_filter_kernel_func_t = apply_filter_kernel_func_t; - // `template` required: in template code, `->dispatch<...>` is otherwise parsed as `dispatch <` … - launcher->template dispatch(cuda_stream, - dim3(grid_size, 1, 1), - dim3(block_size, 1, 1), - 0, - source_indices_ptr, - result_indices_ptr, - result_distances_ptr, - lds, - result_buffer_size, - num_queries, - effective_query_id_offset, - filter_payload); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); + raft::launch_kernel( + cuda_stream, + dim3(grid_size, 1, 1), + dim3(block_size, 1, 1), + raft::kernel_ref>{ + launcher->get_kernel()}, + source_indices_ptr, + result_indices_ptr, + result_distances_ptr, + lds, + result_buffer_size, + num_queries, + effective_query_id_offset, + filter_payload); } } // namespace cuvs::neighbors::cagra::detail::multi_kernel_search diff --git a/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh b/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh index 18dd5345e4..5330381850 100644 --- a/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh +++ b/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh @@ -21,6 +21,7 @@ #include "shared_launcher_jit.hpp" // For shared JIT helper functions #include +#include #include #include @@ -664,8 +665,9 @@ struct alignas(kCacheLineBytes) persistent_runner_jit_t : public persistent_runn // Get the device descriptor pointer - kernel will use the concrete type from template const auto* dev_desc = dataset_desc.get().dev_ptr(stream); - // Cast size_t/int64_t parameters to match kernel signature exactly - // The dispatch mechanism uses void* pointers, so parameter sizes must match exactly + // These arguments are wider than the kernel parameters they feed; the casts record the + // intentional narrowing. graph.extent() and hash_bitlen are int64_t, and the iteration and + // hash sizes are size_t. const uint32_t graph_degree_u32 = static_cast(graph.extent(1)); const uint32_t hash_bitlen_u32 = static_cast(hash_bitlen); const uint32_t small_hash_bitlen_u32 = static_cast(small_hash_bitlen); @@ -674,40 +676,40 @@ struct alignas(kCacheLineBytes) persistent_runner_jit_t : public persistent_runn const uint32_t search_width_u32 = static_cast(search_width); const uint32_t min_iterations_u32 = static_cast(min_iterations); const uint32_t max_iterations_u32 = static_cast(max_iterations); - const unsigned num_random_samplings_u = static_cast(num_random_samplings); const IndexT* seed_ptr_arg = nullptr; uint32_t* num_executed_iterations_arg = nullptr; - // Launch the persistent kernel via rtcx::algorithm_launcher - // The persistent kernel now takes the descriptor pointer directly - launcher->dispatch_cooperative< - single_cta_search::search_single_cta_p_kernel_func_t>( - stream, + // The persistent kernel synchronizes across the whole grid, hence the cooperative launch; its + // grid size comes from the occupancy query in calc_coop_grid_size. + raft::launch_kernel( + {stream, static_cast(smem_size), false, {raft::cooperative()}}, gs, bs, - static_cast(smem_size), + raft::kernel_ref>{ + launcher->get_kernel()}, worker_handles_ptr, job_descriptors_ptr, completion_counters_ptr, graph.data_handle(), - graph_degree_u32, // Cast int64_t to uint32_t + graph_degree_u32, source_indices_ptr, - num_random_samplings_u, // Cast uint32_t to unsigned for consistency - rand_xor_mask, // uint64_t matches kernel (8 bytes) + num_random_samplings, + rand_xor_mask, seed_ptr_arg, num_seeds, hashmap_ptr, max_candidates, max_itopk, - itopk_size_u32, // Cast size_t to uint32_t - search_width_u32, // Cast size_t to uint32_t - min_iterations_u32, // Cast size_t to uint32_t - max_iterations_u32, // Cast size_t to uint32_t + itopk_size_u32, + search_width_u32, + min_iterations_u32, + max_iterations_u32, num_executed_iterations_arg, - hash_bitlen_u32, // Cast int64_t to uint32_t - small_hash_bitlen_u32, // Cast size_t to uint32_t - small_hash_reset_interval_u32, // Cast size_t to uint32_t - query_id_offset, // Offset to add to query_id when calling filter + hash_bitlen_u32, + small_hash_bitlen_u32, + small_hash_reset_interval_u32, + query_id_offset, dev_desc, filter_payload); @@ -872,8 +874,9 @@ void select_and_run( // Get the device descriptor pointer - dev_ptr() initializes it if needed const auto* dev_desc = dataset_desc.dev_ptr(stream); - // Cast size_t/int64_t parameters to match kernel signature exactly - // The dispatch mechanism uses void* pointers, so parameter sizes must match exactly + // These arguments are wider than the kernel parameters they feed; the casts record the + // intentional narrowing. graph.extent() and hash_bitlen are int64_t, and the ps sizes and + // small_hash_* values are size_t. const uint32_t graph_degree_u32 = static_cast(graph.extent(1)); const uint32_t hash_bitlen_u32 = static_cast(hash_bitlen); const uint32_t small_hash_bitlen_u32 = static_cast(small_hash_bitlen); @@ -882,7 +885,6 @@ void select_and_run( const uint32_t search_width_u32 = static_cast(ps.search_width); const uint32_t min_iterations_u32 = static_cast(ps.min_iterations); const uint32_t max_iterations_u32 = static_cast(ps.max_iterations); - const unsigned num_random_samplings_u = static_cast(ps.num_random_samplings); dim3 grid(1, num_queries, 1); dim3 block(block_size, 1, 1); @@ -892,46 +894,45 @@ void select_and_run( num_queries, smem_size); - // Dispatch kernel via launcher - auto kernel_launcher = [&]() -> void { - launcher->dispatch>( - stream, - grid, - block, - static_cast(smem_size), - topk_indices_ptr, - topk_distances_ptr, - topk, - queries_ptr, - graph.data_handle(), - graph_degree_u32, // Cast int64_t to uint32_t - source_indices_ptr, - num_random_samplings_u, // Cast uint32_t to unsigned for consistency - ps.rand_xor_mask, // uint64_t matches kernel (8 bytes) - dev_seed_ptr, - num_seeds, - hashmap_ptr, - max_candidates, - max_itopk, - itopk_size_u32, // Cast size_t to uint32_t - search_width_u32, // Cast size_t to uint32_t - min_iterations_u32, // Cast size_t to uint32_t - max_iterations_u32, // Cast size_t to uint32_t - num_executed_iterations, - hash_bitlen_u32, // Cast int64_t to uint32_t - small_hash_bitlen_u32, // Cast size_t to uint32_t - small_hash_reset_interval_u32, // Cast size_t to uint32_t - query_id_offset, // Offset to add to query_id when calling filter - dev_desc, - static_cast(graph.extent(0)), - filter_payload); - }; - - cuvs::neighbors::detail::safely_launch_kernel_with_smem_size< - search_single_cta_kernel_func_t>( - smem_size, kernel_launcher, launcher->get_kernel()); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); + using kernel_t = search_single_cta_kernel_func_t; + auto kernel = raft::kernel_ref{launcher->get_kernel()}; + + cuvs::neighbors::detail::safely_launch_kernel_with_smem_size( + smem_size, + [&] { + raft::launch_kernel({stream, static_cast(smem_size)}, + grid, + block, + kernel, + topk_indices_ptr, + topk_distances_ptr, + topk, + queries_ptr, + graph.data_handle(), + graph_degree_u32, + source_indices_ptr, + ps.num_random_samplings, + ps.rand_xor_mask, + dev_seed_ptr, + num_seeds, + hashmap_ptr, + max_candidates, + max_itopk, + itopk_size_u32, + search_width_u32, + min_iterations_u32, + max_iterations_u32, + num_executed_iterations, + hash_bitlen_u32, + small_hash_bitlen_u32, + small_hash_reset_interval_u32, + query_id_offset, + dev_desc, + static_cast(graph.extent(0)), + filter_payload, + 10003 /* PROBE single_cta select_and_run */); + }, + kernel.handle); } } @@ -982,6 +983,8 @@ void select_and_run_multi_partition( ref_dataset_desc, topk_by_bitonic_sort, bitonic_sort_and_merge_multi_warps); if (!launcher) { RAFT_FAIL("Failed to get JIT launcher for CAGRA mp search kernel"); } + // hash_bitlen is int64_t and the remaining values are size_t; the casts record the intentional + // narrowing to the kernel's uint32_t parameters. const uint32_t hash_bitlen_u32 = static_cast(hash_bitlen); const uint32_t small_hash_bitlen_u32 = static_cast(small_hash_bitlen); const uint32_t small_hash_reset_interval_u32 = static_cast(small_hash_reset_interval); @@ -989,7 +992,6 @@ void select_and_run_multi_partition( const uint32_t search_width_u32 = static_cast(ps.search_width); const uint32_t min_iterations_u32 = static_cast(ps.min_iterations); const uint32_t max_iterations_u32 = static_cast(ps.max_iterations); - const unsigned num_random_samplings_u = static_cast(ps.num_random_samplings); dim3 grid(1, num_queries, num_partitions); dim3 block(block_size, 1, 1); @@ -1000,39 +1002,39 @@ void select_and_run_multi_partition( num_partitions, smem_size); - auto kernel_launcher = [&]() -> void { - launcher->dispatch>( - stream, - grid, - block, - static_cast(smem_size), - partition_descs, - queries_ptr, - intermediate_neighbors_ptr, - intermediate_distances_ptr, - topk, - num_random_samplings_u, - ps.rand_xor_mask, - 0u, // num_seeds - hashmap_ptr, - max_candidates, - max_itopk, - itopk_size_u32, - search_width_u32, - min_iterations_u32, - max_iterations_u32, - static_cast(nullptr), // num_executed_iterations - hash_bitlen_u32, - small_hash_bitlen_u32, - small_hash_reset_interval_u32, - query_id_offset); - }; - - cuvs::neighbors::detail::safely_launch_kernel_with_smem_size< - search_single_cta_mp_kernel_func_t>( - smem_size, kernel_launcher, launcher->get_kernel()); - - RAFT_CUDA_TRY(cudaPeekAtLastError()); + using kernel_t = search_single_cta_mp_kernel_func_t; + auto kernel = raft::kernel_ref{launcher->get_kernel()}; + + cuvs::neighbors::detail::safely_launch_kernel_with_smem_size( + smem_size, + [&] { + raft::launch_kernel({stream, static_cast(smem_size)}, + grid, + block, + kernel, + partition_descs, + queries_ptr, + intermediate_neighbors_ptr, + intermediate_distances_ptr, + topk, + ps.num_random_samplings, + ps.rand_xor_mask, + 0u, // num_seeds + hashmap_ptr, + max_candidates, + max_itopk, + itopk_size_u32, + search_width_u32, + min_iterations_u32, + max_iterations_u32, + static_cast(nullptr), // num_executed_iterations + hash_bitlen_u32, + small_hash_bitlen_u32, + small_hash_reset_interval_u32, + query_id_offset, + 10004 /* PROBE single_cta select_and_run_multi_partition */); + }, + kernel.handle); } // get_runner for JIT persistent runners (similar to non-JIT version) From a236d836f744d1dd170d7133684c586a7393fd9a Mon Sep 17 00:00:00 2001 From: achirkin Date: Fri, 28 Aug 2026 17:51:10 +0200 Subject: [PATCH 2/3] Remove leftover debug probes from CAGRA JIT launch sites --- .../detail/cagra/search_multi_cta_kernel_launcher_jit.cuh | 6 ++---- .../detail/cagra/search_single_cta_kernel_launcher_jit.cuh | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh b/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh index 5877d82029..481e9f42bc 100644 --- a/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh +++ b/cpp/src/neighbors/detail/cagra/search_multi_cta_kernel_launcher_jit.cuh @@ -144,8 +144,7 @@ void select_and_run(const dataset_descriptor_host& dat num_executed_iterations, static_cast(graph.extent(0)), query_id_offset, - filter_payload, - 10001 /* PROBE multi_cta select_and_run */); + filter_payload); }, kernel.handle); } @@ -245,8 +244,7 @@ void select_and_run_mp(const dataset_descriptor_host& itopk_size_u32, min_iterations_u32, max_iterations_u32, - query_id_offset, - 10002 /* PROBE multi_cta select_and_run_mp */); + query_id_offset); }, kernel.handle); } diff --git a/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh b/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh index 5330381850..9d0d647118 100644 --- a/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh +++ b/cpp/src/neighbors/detail/cagra/search_single_cta_kernel_launcher_jit.cuh @@ -929,8 +929,7 @@ void select_and_run( query_id_offset, dev_desc, static_cast(graph.extent(0)), - filter_payload, - 10003 /* PROBE single_cta select_and_run */); + filter_payload); }, kernel.handle); } @@ -1031,8 +1030,7 @@ void select_and_run_multi_partition( hash_bitlen_u32, small_hash_bitlen_u32, small_hash_reset_interval_u32, - query_id_offset, - 10004 /* PROBE single_cta select_and_run_multi_partition */); + query_id_offset); }, kernel.handle); } From 34efcc49e73697502b943701381004a92e86f27e Mon Sep 17 00:00:00 2001 From: "Artem M. Chirkin" <9253178+achirkin@users.noreply.github.com> Date: Thu, 3 Sep 2026 11:18:20 +0200 Subject: [PATCH 3/3] Revert pinned raft --- cpp/cmake/thirdparty/get_raft.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/cmake/thirdparty/get_raft.cmake b/cpp/cmake/thirdparty/get_raft.cmake index b588c92407..8db55260ad 100644 --- a/cpp/cmake/thirdparty/get_raft.cmake +++ b/cpp/cmake/thirdparty/get_raft.cmake @@ -6,8 +6,8 @@ # Use RAPIDS_VERSION_MAJOR_MINOR from rapids_config.cmake set(RAFT_VERSION "${RAPIDS_VERSION_MAJOR_MINOR}") -set(RAFT_FORK "achirkin") -set(RAFT_PINNED_TAG "enh-launch-kernel-extended") +set(RAFT_FORK "rapidsai") +set(RAFT_PINNED_TAG "${rapids-cmake-checkout-tag}") set(LIBRAFT_LOGGING_LEVEL "INFO" CACHE STRING "Choose the RAFT logging level compiled into cuVS." )