diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 9f9763160c..bda25fc88e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1380,6 +1380,12 @@ if(NOT BUILD_CPU_ONLY) OUTPUT_FILE_FORMAT "${CMAKE_CURRENT_BINARY_DIR}/src/neighbors/ivf_pq/detail/ivf_pq_transform_inst_data_@data_abbrev@_index_@index_abbrev@.cu" ) + generate_inst_matrix( + gmm_inst_files + MATRIX_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/cluster/gmm_matrix.json" + INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/cluster/gmm_inst.cu.in" + OUTPUT_FILE_FORMAT "${CMAKE_CURRENT_BINARY_DIR}/src/cluster/gmm_inst_data_@data_abbrev@.cu" + ) generate_inst_matrix( nn_descent_inst_files MATRIX_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/src/neighbors/nn_descent_matrix.json" @@ -1415,8 +1421,7 @@ if(NOT BUILD_CPU_ONLY) cuvs_objs OBJECT src/cluster/detail/minClusterDistanceCompute.cu src/cluster/agglomerative.cu - src/cluster/gmm_double.cu - src/cluster/gmm_float.cu + ${gmm_inst_files} src/cluster/kmeans_cluster_cost.cu src/cluster/kmeans_fit_double.cu src/cluster/kmeans_fit_float.cu diff --git a/cpp/src/cluster/gmm_impl.cuh b/cpp/src/cluster/detail/gmm_impl.cuh similarity index 100% rename from cpp/src/cluster/gmm_impl.cuh rename to cpp/src/cluster/detail/gmm_impl.cuh diff --git a/cpp/src/cluster/gmm_kernels.cuh b/cpp/src/cluster/detail/gmm_kernels.cuh similarity index 100% rename from cpp/src/cluster/gmm_kernels.cuh rename to cpp/src/cluster/detail/gmm_kernels.cuh diff --git a/cpp/src/cluster/gmm.cuh b/cpp/src/cluster/gmm.cuh index 5d3e8c797f..960804b14b 100644 --- a/cpp/src/cluster/gmm.cuh +++ b/cpp/src/cluster/gmm.cuh @@ -5,7 +5,7 @@ #pragma once -#include "gmm_impl.cuh" +#include "detail/gmm_impl.cuh" #include diff --git a/cpp/src/cluster/gmm_double.cu b/cpp/src/cluster/gmm_double.cu deleted file mode 100644 index 53d76695cb..0000000000 --- a/cpp/src/cluster/gmm_double.cu +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "gmm.cuh" - -#include - -namespace cuvs::cluster::gmm { - -void fit(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view covariances, - raft::device_vector_view precisions_chol, - raft::device_vector_view precisions, - raft::device_vector_view labels, - raft::host_scalar_view lower_bound, - raft::host_scalar_view n_iter, - raft::host_scalar_view converged, - bool warm_start) -{ - fit(handle, - params, - X, - weights, - means, - covariances, - precisions_chol, - precisions, - labels, - lower_bound, - n_iter, - converged, - warm_start); -} - -void predict(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_vector_view labels) -{ - predict(handle, params, X, weights, means, precisions_chol, labels); -} - -void predict_proba(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_matrix_view resp) -{ - predict_proba(handle, params, X, weights, means, precisions_chol, resp); -} - -void score_samples(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_vector_view log_prob_norm) -{ - score_samples(handle, params, X, weights, means, precisions_chol, log_prob_norm); -} - -} // namespace cuvs::cluster::gmm diff --git a/cpp/src/cluster/gmm_float.cu b/cpp/src/cluster/gmm_float.cu deleted file mode 100644 index b55a7e4071..0000000000 --- a/cpp/src/cluster/gmm_float.cu +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "gmm.cuh" - -#include - -namespace cuvs::cluster::gmm { - -void fit(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view covariances, - raft::device_vector_view precisions_chol, - raft::device_vector_view precisions, - raft::device_vector_view labels, - raft::host_scalar_view lower_bound, - raft::host_scalar_view n_iter, - raft::host_scalar_view converged, - bool warm_start) -{ - fit(handle, - params, - X, - weights, - means, - covariances, - precisions_chol, - precisions, - labels, - lower_bound, - n_iter, - converged, - warm_start); -} - -void predict(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_vector_view labels) -{ - predict(handle, params, X, weights, means, precisions_chol, labels); -} - -void predict_proba(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_matrix_view resp) -{ - predict_proba(handle, params, X, weights, means, precisions_chol, resp); -} - -void score_samples(raft::resources const& handle, - const params& params, - raft::device_matrix_view X, - raft::device_vector_view weights, - raft::device_matrix_view means, - raft::device_vector_view precisions_chol, - raft::device_vector_view log_prob_norm) -{ - score_samples(handle, params, X, weights, means, precisions_chol, log_prob_norm); -} - -} // namespace cuvs::cluster::gmm diff --git a/cpp/src/cluster/gmm_inst.cu.in b/cpp/src/cluster/gmm_inst.cu.in new file mode 100644 index 0000000000..06318c9495 --- /dev/null +++ b/cpp/src/cluster/gmm_inst.cu.in @@ -0,0 +1,80 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include + +namespace { + +using data_t = @data_type@; + +} // namespace + +namespace cuvs::cluster::gmm { + +void fit(raft::resources const& handle, + const params& params, + raft::device_matrix_view X, + raft::device_vector_view weights, + raft::device_matrix_view means, + raft::device_vector_view covariances, + raft::device_vector_view precisions_chol, + raft::device_vector_view precisions, + raft::device_vector_view labels, + raft::host_scalar_view lower_bound, + raft::host_scalar_view n_iter, + raft::host_scalar_view converged, + bool warm_start) +{ + fit(handle, + params, + X, + weights, + means, + covariances, + precisions_chol, + precisions, + labels, + lower_bound, + n_iter, + converged, + warm_start); +} + +void predict(raft::resources const& handle, + const params& params, + raft::device_matrix_view X, + raft::device_vector_view weights, + raft::device_matrix_view means, + raft::device_vector_view precisions_chol, + raft::device_vector_view labels) +{ + predict(handle, params, X, weights, means, precisions_chol, labels); +} + +void predict_proba(raft::resources const& handle, + const params& params, + raft::device_matrix_view X, + raft::device_vector_view weights, + raft::device_matrix_view means, + raft::device_vector_view precisions_chol, + raft::device_matrix_view resp) +{ + predict_proba(handle, params, X, weights, means, precisions_chol, resp); +} + +void score_samples(raft::resources const& handle, + const params& params, + raft::device_matrix_view X, + raft::device_vector_view weights, + raft::device_matrix_view means, + raft::device_vector_view precisions_chol, + raft::device_vector_view log_prob_norm) +{ + score_samples(handle, params, X, weights, means, precisions_chol, log_prob_norm); +} + +} // namespace cuvs::cluster::gmm diff --git a/cpp/src/cluster/gmm_matrix.json b/cpp/src/cluster/gmm_matrix.json new file mode 100644 index 0000000000..c8d9776032 --- /dev/null +++ b/cpp/src/cluster/gmm_matrix.json @@ -0,0 +1,12 @@ +{ + "_data": [ + { + "data_type": "float", + "data_abbrev": "f" + }, + { + "data_type": "double", + "data_abbrev": "d" + } + ] +}