26
26
#include < cugraph/detail/shuffle_wrappers.hpp>
27
27
#include < cugraph/detail/utility_wrappers.hpp>
28
28
#include < cugraph/graph_functions.hpp>
29
+ #include < cugraph/shuffle_functions.hpp>
29
30
30
31
#include < optional>
31
32
@@ -131,7 +132,9 @@ struct similarity_functor : public cugraph::c_api::abstract_functor {
131
132
graph_view,
132
133
use_weight_ ? std::make_optional (edge_weights->view ()) : std::nullopt,
133
134
std::make_tuple (raft::device_span<vertex_t const >{v1.data (), v1.size ()},
134
- raft::device_span<vertex_t const >{v2.data (), v2.size ()}));
135
+ raft::device_span<vertex_t const >{v2.data (), v2.size ()}),
136
+ do_expensive_check_
137
+ );
135
138
136
139
result_ = new cugraph::c_api::cugraph_similarity_result_t {
137
140
new cugraph::c_api::cugraph_type_erased_device_array_t (similarity_coefficients,
@@ -201,30 +204,58 @@ struct all_pairs_similarity_functor : public cugraph::c_api::abstract_functor {
201
204
202
205
auto number_map = reinterpret_cast <rmm::device_uvector<vertex_t >*>(graph_->number_map_ );
203
206
207
+ std::optional<rmm::device_uvector<vertex_t >> vertices{std::nullopt};
208
+
209
+ if (vertices_ != nullptr ) {
210
+ vertices =
211
+ rmm::device_uvector<vertex_t >{vertices_->size_ , handle_.get_stream ()};
212
+
213
+ raft::copy (vertices->data (),
214
+ vertices_->as_type <vertex_t >(),
215
+ vertices_->size_ ,
216
+ handle_.get_stream ());
217
+
218
+ //
219
+ // Need to renumber vertices
220
+ //
221
+ cugraph::renumber_ext_vertices<vertex_t , multi_gpu>(
222
+ handle_,
223
+ vertices->data (),
224
+ vertices->size (),
225
+ number_map->data (),
226
+ graph_view.local_vertex_partition_range_first (),
227
+ graph_view.local_vertex_partition_range_last (),
228
+ do_expensive_check_);
229
+
230
+ if constexpr (multi_gpu) { vertices = cugraph::shuffle_ext_vertices (handle_, std::move (*vertices)); }
231
+ }
232
+
204
233
auto [v1, v2, similarity_coefficients] =
205
234
call_similarity_ (handle_,
206
235
graph_view,
207
236
use_weight_ ? std::make_optional (edge_weights->view ()) : std::nullopt,
208
- vertices_ ? std::make_optional (raft::device_span<vertex_t const >{
209
- vertices_->as_type <vertex_t const >(), vertices_->size_ })
210
- : std::nullopt,
211
- topk_ != SIZE_MAX ? std::make_optional (topk_) : std::nullopt);
212
-
237
+ vertices_ != nullptr ? std::make_optional (raft::device_span<vertex_t const >{
238
+ vertices->data (), vertices->size ()})
239
+ : std::nullopt,
240
+ topk_ != SIZE_MAX ? std::make_optional (topk_) : std::nullopt,
241
+ do_expensive_check_
242
+ );
243
+
213
244
cugraph::unrenumber_int_vertices<vertex_t , multi_gpu>(
214
245
handle_,
215
246
v1.data (),
216
247
v1.size (),
217
248
number_map->data (),
218
249
graph_view.vertex_partition_range_lasts (),
219
- false );
250
+ do_expensive_check_ );
220
251
221
252
cugraph::unrenumber_int_vertices<vertex_t , multi_gpu>(
222
253
handle_,
223
254
v2.data (),
224
255
v2.size (),
225
256
number_map->data (),
226
257
graph_view.vertex_partition_range_lasts (),
227
- false );
258
+ do_expensive_check_ );
228
259
229
260
result_ = new cugraph::c_api::cugraph_similarity_result_t {
230
261
new cugraph::c_api::cugraph_type_erased_device_array_t (similarity_coefficients,
@@ -242,9 +273,10 @@ struct jaccard_functor {
242
273
raft::handle_t const & handle,
243
274
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
244
275
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
245
- std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs)
276
+ std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs,
277
+ bool do_expensive_check)
246
278
{
247
- return cugraph::jaccard_coefficients (handle, graph_view, edge_weight_view, vertex_pairs);
279
+ return cugraph::jaccard_coefficients (handle, graph_view, edge_weight_view, vertex_pairs, do_expensive_check );
248
280
}
249
281
250
282
template <typename vertex_t , typename edge_t , typename weight_t , bool multi_gpu>
@@ -255,10 +287,11 @@ struct jaccard_functor {
255
287
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
256
288
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
257
289
std::optional<raft::device_span<vertex_t const >> vertices,
258
- std::optional<size_t > topk)
290
+ std::optional<size_t > topk,
291
+ bool do_expensive_check)
259
292
{
260
293
return cugraph::jaccard_all_pairs_coefficients (
261
- handle, graph_view, edge_weight_view, vertices, topk);
294
+ handle, graph_view, edge_weight_view, vertices, topk, do_expensive_check );
262
295
}
263
296
};
264
297
@@ -268,9 +301,10 @@ struct sorensen_functor {
268
301
raft::handle_t const & handle,
269
302
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
270
303
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
271
- std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs)
304
+ std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs,
305
+ bool do_expensive_check)
272
306
{
273
- return cugraph::sorensen_coefficients (handle, graph_view, edge_weight_view, vertex_pairs);
307
+ return cugraph::sorensen_coefficients (handle, graph_view, edge_weight_view, vertex_pairs, do_expensive_check );
274
308
}
275
309
276
310
template <typename vertex_t , typename edge_t , typename weight_t , bool multi_gpu>
@@ -281,10 +315,11 @@ struct sorensen_functor {
281
315
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
282
316
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
283
317
std::optional<raft::device_span<vertex_t const >> vertices,
284
- std::optional<size_t > topk)
318
+ std::optional<size_t > topk,
319
+ bool do_expensive_check)
285
320
{
286
321
return cugraph::sorensen_all_pairs_coefficients (
287
- handle, graph_view, edge_weight_view, vertices, topk);
322
+ handle, graph_view, edge_weight_view, vertices, topk, do_expensive_check );
288
323
}
289
324
};
290
325
@@ -294,10 +329,11 @@ struct cosine_functor {
294
329
raft::handle_t const & handle,
295
330
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
296
331
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
297
- std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs)
332
+ std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs,
333
+ bool do_expensive_check)
298
334
{
299
335
return cugraph::cosine_similarity_coefficients (
300
- handle, graph_view, edge_weight_view, vertex_pairs);
336
+ handle, graph_view, edge_weight_view, vertex_pairs, do_expensive_check );
301
337
}
302
338
303
339
template <typename vertex_t , typename edge_t , typename weight_t , bool multi_gpu>
@@ -308,10 +344,11 @@ struct cosine_functor {
308
344
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
309
345
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
310
346
std::optional<raft::device_span<vertex_t const >> vertices,
311
- std::optional<size_t > topk)
347
+ std::optional<size_t > topk,
348
+ bool do_expensive_check)
312
349
{
313
350
return cugraph::cosine_similarity_all_pairs_coefficients (
314
- handle, graph_view, edge_weight_view, vertices, topk);
351
+ handle, graph_view, edge_weight_view, vertices, topk, do_expensive_check );
315
352
}
316
353
};
317
354
@@ -321,9 +358,10 @@ struct overlap_functor {
321
358
raft::handle_t const & handle,
322
359
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
323
360
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
324
- std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs)
361
+ std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs,
362
+ bool do_expensive_check)
325
363
{
326
- return cugraph::overlap_coefficients (handle, graph_view, edge_weight_view, vertex_pairs);
364
+ return cugraph::overlap_coefficients (handle, graph_view, edge_weight_view, vertex_pairs, do_expensive_check );
327
365
}
328
366
329
367
template <typename vertex_t , typename edge_t , typename weight_t , bool multi_gpu>
@@ -334,10 +372,11 @@ struct overlap_functor {
334
372
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
335
373
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
336
374
std::optional<raft::device_span<vertex_t const >> vertices,
337
- std::optional<size_t > topk)
375
+ std::optional<size_t > topk,
376
+ bool do_expensive_check)
338
377
{
339
378
return cugraph::overlap_all_pairs_coefficients (
340
- handle, graph_view, edge_weight_view, vertices, topk);
379
+ handle, graph_view, edge_weight_view, vertices, topk, do_expensive_check );
341
380
}
342
381
};
343
382
@@ -347,10 +386,11 @@ struct cosine_similarity_functor {
347
386
raft::handle_t const & handle,
348
387
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
349
388
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
350
- std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs)
389
+ std::tuple<raft::device_span<vertex_t const >, raft::device_span<vertex_t const >> vertex_pairs,
390
+ bool do_expensive_check)
351
391
{
352
392
return cugraph::cosine_similarity_coefficients (
353
- handle, graph_view, edge_weight_view, vertex_pairs);
393
+ handle, graph_view, edge_weight_view, vertex_pairs, do_expensive_check );
354
394
}
355
395
356
396
template <typename vertex_t , typename edge_t , typename weight_t , bool multi_gpu>
@@ -361,10 +401,11 @@ struct cosine_similarity_functor {
361
401
cugraph::graph_view_t <vertex_t , edge_t , false , multi_gpu> const & graph_view,
362
402
std::optional<cugraph::edge_property_view_t <edge_t , weight_t const *>> edge_weight_view,
363
403
std::optional<raft::device_span<vertex_t const >> vertices,
364
- std::optional<size_t > topk)
404
+ std::optional<size_t > topk,
405
+ bool do_expensive_check)
365
406
{
366
407
return cugraph::cosine_similarity_all_pairs_coefficients (
367
- handle, graph_view, edge_weight_view, vertices, topk);
408
+ handle, graph_view, edge_weight_view, vertices, topk, do_expensive_check );
368
409
}
369
410
};
370
411
@@ -568,7 +609,7 @@ extern "C" cugraph_error_code_t cugraph_all_pairs_cosine_similarity_coefficients
568
609
*error);
569
610
}
570
611
all_pairs_similarity_functor functor (
571
- handle, graph, vertices, overlap_functor {}, use_weight, topk, do_expensive_check);
612
+ handle, graph, vertices, cosine_functor {}, use_weight, topk, do_expensive_check);
572
613
573
614
return cugraph::c_api::run_algorithm (graph, functor, result, error);
574
615
}
0 commit comments