From daf96697dd41b531b564e51a17fd10f848005722 Mon Sep 17 00:00:00 2001 From: Robert Maynard Date: Wed, 9 Sep 2026 11:21:29 -0400 Subject: [PATCH] Reduce NEIGHBORS_ALL_NEIGHBORS_TEST combinatorial test space Moves NEIGHBORS_ALL_NEIGHBORS_TEST runtime from 34 minutes to 4 minutes by making the combinatorial space a little sparse. Primarily this is done by doing: 1. Data locality/movement testing doesn't need to happen across all n_row * dim * graph_degree inputs 2. Make n_row * dim * graph_degree sparser for batched tests. This is done by testing min, max and ~diagonal for this test space. --- cpp/tests/neighbors/all_neighbors.cuh | 146 ++++++++++++++---- .../neighbors/all_neighbors/test_float.cu | 28 +++- 2 files changed, 144 insertions(+), 30 deletions(-) diff --git a/cpp/tests/neighbors/all_neighbors.cuh b/cpp/tests/neighbors/all_neighbors.cuh index 0b43023eff..cfccc4728c 100644 --- a/cpp/tests/neighbors/all_neighbors.cuh +++ b/cpp/tests/neighbors/all_neighbors.cuh @@ -279,12 +279,66 @@ const std::vector inputsSingle = {5000, 7151}, // n_rows {64, 137}, // dim {16, 23}, // graph_degree - {false, true}, // data on host + {false}, // data on host + {false}, // mutual_reach + {false} // output on host + ); + +const std::vector inputsSingleDataTransfer = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(IVF_PQ, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::InnerProduct, 0.8)}, + {std::make_tuple(1lu, 2lu)}, // min_recall, n_clusters, overlap_factor + {5000}, // n_rows + {137}, // dim + {23}, // graph_degree + {true}, // data on host {false}, // mutual_reach {false, true} // output on host ); -const std::vector inputsBatch = +const std::vector inputsBatchLow = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::InnerProduct, 0.9), + std::make_tuple(IVF_PQ, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::InnerProduct, 0.9)}, + {std::make_tuple(4lu, 2lu)}, // min_recall, n_clusters, overlap_factor + {5000}, // n_rows + {64, 137}, // dim + {16, 23}, // graph_degree + {true}, // data on host + {false}, // mutual_reach + {true} // output on host + ); + +const std::vector inputsBatchMed = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::InnerProduct, 0.9), + std::make_tuple(IVF_PQ, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::InnerProduct, 0.9)}, + {std::make_tuple(7lu, 2lu)}, // min_recall, n_clusters, overlap_factor + {7151}, // n_rows + {137}, // dim + {23}, // graph_degree + {true}, // data on host + {false}, // mutual_reach + {false} // output on host + ); + +const std::vector inputsBatchHigh = raft::util::itertools::product( {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), @@ -295,17 +349,13 @@ const std::vector inputsBatch = std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9), std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::InnerProduct, 0.9)}, - { - std::make_tuple(4lu, 2lu), - std::make_tuple(7lu, 2lu), - std::make_tuple(10lu, 2lu), - }, // min_recall, n_clusters, overlap_factor - {5000, 7151}, // n_rows - {64, 137}, // dim - {16, 23}, // graph_degree - {true}, // data on host - {false}, // mutual_reach - {false, true} // output on host + {std::make_tuple(10lu, 2lu)}, // min_recall, n_clusters, overlap_factor + {5000}, // n_rows + {64}, // dim + {16}, // graph_degree + {true}, // data on host + {false}, // mutual_reach + {false} // output on host ); const std::vector mutualReachSingle = @@ -320,12 +370,60 @@ const std::vector mutualReachSingle = {5000, 7151}, // n_rows {64, 137}, // dim {16, 23}, // graph_degree - {false, true}, // data on host + {false}, // data on host + {true}, // mutual_reach + {false} // output on host + ); +const std::vector mutualReachSingleDataTransfer = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9)}, + {std::make_tuple(1lu, 2lu)}, // n_clusters, overlap_factor + {5000}, // n_rows + {137}, // dim + {23}, // graph_degree + {true}, // data on host {true}, // mutual_reach {false, true} // output on host ); -const std::vector mutualReachBatch = +const std::vector mutualReachBatchLow = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9)}, + {std::make_tuple(4lu, 2lu)}, // n_clusters, overlap_factor + {5000}, // n_rows + {64, 137}, // dim + {16, 23}, // graph_degree + {true}, // data on host + {true}, // mutual_reach + {true} // output on host + ); +const std::vector mutualReachBatchMed = + raft::util::itertools::product( + {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::CosineExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), + std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9)}, + {std::make_tuple(7lu, 2lu)}, // n_clusters, overlap_factor + {5000}, // n_rows + {137}, // dim + {16}, // graph_degree + {true}, // data on host + {true}, // mutual_reach + {false} // output on host + ); +const std::vector mutualReachBatchHigh = raft::util::itertools::product( {std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2Expanded, 0.9), std::make_tuple(BRUTE_FORCE, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), @@ -333,17 +431,13 @@ const std::vector mutualReachBatch = std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2Expanded, 0.9), std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::L2SqrtExpanded, 0.9), std::make_tuple(NN_DESCENT, cuvs::distance::DistanceType::CosineExpanded, 0.9)}, - { - std::make_tuple(4lu, 2lu), - std::make_tuple(7lu, 2lu), - std::make_tuple(10lu, 2lu), - }, // n_clusters, overlap_factor - {5000, 7151}, // n_rows - {64, 137}, // dim - {16, 23}, // graph_degree - {true}, // data on host - {true}, // mutual_reach - {false, true} // output on host + {std::make_tuple(10lu, 2lu)}, // n_clusters, overlap_factor + {7151}, // n_rows + {64}, // dim + {23}, // graph_degree + {true}, // data on host + {true}, // mutual_reach + {false} // output on host ); } // namespace cuvs::neighbors::all_neighbors diff --git a/cpp/tests/neighbors/all_neighbors/test_float.cu b/cpp/tests/neighbors/all_neighbors/test_float.cu index 56af6cbcb5..87d2a52761 100644 --- a/cpp/tests/neighbors/all_neighbors/test_float.cu +++ b/cpp/tests/neighbors/all_neighbors/test_float.cu @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 */ @@ -15,14 +15,34 @@ TEST_P(AllNeighborsTestF, AllNeighbors) { this->run(); } INSTANTIATE_TEST_CASE_P(AllNeighborsSingleTest, AllNeighborsTestF, ::testing::ValuesIn(inputsSingle)); +INSTANTIATE_TEST_CASE_P(AllNeighborsSingleTestDataTransfer, + AllNeighborsTestF, + ::testing::ValuesIn(inputsSingleDataTransfer)); -INSTANTIATE_TEST_CASE_P(AllNeighborsBatchTest, AllNeighborsTestF, ::testing::ValuesIn(inputsBatch)); +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchTestLow, + AllNeighborsTestF, + ::testing::ValuesIn(inputsBatchLow)); +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchTestMed, + AllNeighborsTestF, + ::testing::ValuesIn(inputsBatchMed)); +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchTestHigh, + AllNeighborsTestF, + ::testing::ValuesIn(inputsBatchHigh)); INSTANTIATE_TEST_CASE_P(AllNeighborsSingleMutualTest, AllNeighborsTestF, ::testing::ValuesIn(mutualReachSingle)); +INSTANTIATE_TEST_CASE_P(AllNeighborsSingleMutualTestDataTransfer, + AllNeighborsTestF, + ::testing::ValuesIn(mutualReachSingleDataTransfer)); -INSTANTIATE_TEST_CASE_P(AllNeighborsBatchMutualTest, +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchMutualTestLow, + AllNeighborsTestF, + ::testing::ValuesIn(mutualReachBatchLow)); +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchMutualTestMed, + AllNeighborsTestF, + ::testing::ValuesIn(mutualReachBatchMed)); +INSTANTIATE_TEST_CASE_P(AllNeighborsBatchMutualTestHigh, AllNeighborsTestF, - ::testing::ValuesIn(mutualReachBatch)); + ::testing::ValuesIn(mutualReachBatchHigh)); } // namespace cuvs::neighbors::all_neighbors