Skip to content

Commit 70d0a96

Browse files
authored
Merge pull request #20046 from rapidsai/branch-25.10
Forward-merge branch-25.10 into branch-25.12
2 parents 4cb1ffb + 842d89e commit 70d0a96

18 files changed

+171
-71
lines changed

python/pylibcudf/pylibcudf/interop.pxd

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
from pylibcudf.table cimport Table
44
from rmm.pylibrmm.stream cimport Stream
5+
from rmm.pylibrmm.memory_resource cimport DeviceMemoryResource
56

6-
cpdef Table from_dlpack(object managed_tensor, Stream stream=*)
7+
cpdef Table from_dlpack(
8+
object managed_tensor, Stream stream=*, DeviceMemoryResource mr=*
9+
)
710

8-
cpdef object to_dlpack(Table input, Stream stream=*)
11+
cpdef object to_dlpack(Table input, Stream stream=*, DeviceMemoryResource mr=*)

python/pylibcudf/pylibcudf/interop.pyi

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ from typing import Any, overload
66

77
import pyarrow as pa
88

9+
from rmm.pylibrmm.memory_resource import DeviceMemoryResource
910
from rmm.pylibrmm.stream import Stream
1011

1112
from pylibcudf.column import Column
@@ -51,6 +52,12 @@ def to_arrow(
5152
obj: Scalar, metadata: ColumnMetadata | str | None = None
5253
) -> pa.Scalar[Any]: ...
5354
def from_dlpack(
54-
managed_tensor: Any, stream: Stream | None = None
55+
managed_tensor: Any,
56+
stream: Stream | None = None,
57+
mr: DeviceMemoryResource | None = None,
5558
) -> Table: ...
56-
def to_dlpack(input: Table, stream: Stream | None = None) -> Any: ...
59+
def to_dlpack(
60+
input: Table,
61+
stream: Stream | None = None,
62+
mr: DeviceMemoryResource | None = None,
63+
) -> Any: ...

python/pylibcudf/pylibcudf/interop.pyx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ from pylibcudf.libcudf.interop cimport (
1919
from pylibcudf.libcudf.table.table cimport table
2020

2121
from rmm.pylibrmm.stream cimport Stream
22+
from rmm.pylibrmm.memory_resource cimport DeviceMemoryResource
2223

2324
from .column cimport Column
2425
from .scalar cimport Scalar
2526
from .table cimport Table
2627
from .types cimport DataType
27-
from .utils cimport _get_stream
28+
from .utils cimport _get_stream, _get_memory_resource
2829
from ._interop_helpers import ColumnMetadata
2930

3031
try:
@@ -136,7 +137,9 @@ if pa is not None:
136137
return plc_object.to_arrow(metadata=metadata)
137138

138139

139-
cpdef Table from_dlpack(object managed_tensor, Stream stream=None):
140+
cpdef Table from_dlpack(
141+
object managed_tensor, Stream stream=None, DeviceMemoryResource mr=None
142+
):
140143
"""
141144
Convert a DLPack DLTensor into a cudf table.
142145
@@ -148,6 +151,8 @@ cpdef Table from_dlpack(object managed_tensor, Stream stream=None):
148151
A 1D or 2D column-major (Fortran order) tensor.
149152
stream : Stream | None
150153
CUDA stream on which to perform the operation.
154+
mr : DeviceMemoryResource | None
155+
Device memory resource used to allocate the returned table's device memory.
151156
152157
Returns
153158
-------
@@ -164,21 +169,22 @@ cpdef Table from_dlpack(object managed_tensor, Stream stream=None):
164169
raise ValueError("PyCapsule object contained a NULL pointer")
165170
PyCapsule_SetName(managed_tensor, "used_dltensor")
166171
stream = _get_stream(stream)
172+
mr = _get_memory_resource(mr)
167173

168174
# Note: A copy is always performed when converting the dlpack
169175
# data to a libcudf table. We also delete the dlpack_tensor pointer
170176
# as the pointer is not deleted by libcudf's from_dlpack function.
171177
# TODO: https://github.com/rapidsai/cudf/issues/10874
172178
# TODO: https://github.com/rapidsai/cudf/issues/10849
173179
with nogil:
174-
c_result = cpp_from_dlpack(dlpack_tensor, stream.view())
180+
c_result = cpp_from_dlpack(dlpack_tensor, stream.view(), mr.get_mr())
175181

176-
cdef Table result = Table.from_libcudf(move(c_result), stream)
182+
cdef Table result = Table.from_libcudf(move(c_result), stream, mr)
177183
dlpack_tensor.deleter(dlpack_tensor)
178184
return result
179185

180186

181-
cpdef object to_dlpack(Table input, Stream stream=None):
187+
cpdef object to_dlpack(Table input, Stream stream=None, DeviceMemoryResource mr=None):
182188
"""
183189
Convert a cudf table into a DLPack DLTensor.
184190
@@ -190,6 +196,9 @@ cpdef object to_dlpack(Table input, Stream stream=None):
190196
A 1D or 2D column-major (Fortran order) tensor.
191197
stream : Stream | None
192198
CUDA stream on which to perform the operation.
199+
mr : DeviceMemoryResource | None
200+
Device memory resource used to allocate the returned DLPack tensor's device
201+
memory.
193202
194203
Returns
195204
-------
@@ -204,9 +213,10 @@ cpdef object to_dlpack(Table input, Stream stream=None):
204213
)
205214
cdef DLManagedTensor *dlpack_tensor
206215
stream = _get_stream(stream)
216+
mr = _get_memory_resource(mr)
207217

208218
with nogil:
209-
dlpack_tensor = cpp_to_dlpack(input.view(), stream.view())
219+
dlpack_tensor = cpp_to_dlpack(input.view(), stream.view(), mr.get_mr())
210220

211221
return PyCapsule_New(
212222
dlpack_tensor,

python/pylibcudf/pylibcudf/join.pyx

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ cpdef tuple inner_join(
8989

9090
with nogil:
9191
c_result = cpp_join.inner_join(
92-
left_keys.view(), right_keys.view(), nulls_equal, stream.view()
92+
left_keys.view(), right_keys.view(), nulls_equal, stream.view(), mr.get_mr()
9393
)
9494
return (
9595
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -130,7 +130,7 @@ cpdef tuple left_join(
130130

131131
with nogil:
132132
c_result = cpp_join.left_join(
133-
left_keys.view(), right_keys.view(), nulls_equal, stream.view()
133+
left_keys.view(), right_keys.view(), nulls_equal, stream.view(), mr.get_mr()
134134
)
135135
return (
136136
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -171,7 +171,7 @@ cpdef tuple full_join(
171171

172172
with nogil:
173173
c_result = cpp_join.full_join(
174-
left_keys.view(), right_keys.view(), nulls_equal, stream.view()
174+
left_keys.view(), right_keys.view(), nulls_equal, stream.view(), mr.get_mr()
175175
)
176176
return (
177177
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -214,7 +214,8 @@ cpdef Column left_semi_join(
214214
left_keys.view(),
215215
right_keys.view(),
216216
nulls_equal,
217-
stream.view()
217+
stream.view(),
218+
mr.get_mr()
218219
)
219220
return _column_from_gather_map(move(c_result), stream, mr)
220221

@@ -254,7 +255,8 @@ cpdef Column left_anti_join(
254255
left_keys.view(),
255256
right_keys.view(),
256257
nulls_equal,
257-
stream.view()
258+
stream.view(),
259+
mr.get_mr()
258260
)
259261
return _column_from_gather_map(move(c_result), stream, mr)
260262

@@ -288,7 +290,9 @@ cpdef Table cross_join(
288290
mr = _get_memory_resource(mr)
289291

290292
with nogil:
291-
result = cpp_join.cross_join(left.view(), right.view(), stream.view())
293+
result = cpp_join.cross_join(
294+
left.view(), right.view(), stream.view(), mr.get_mr()
295+
)
292296
return Table.from_libcudf(move(result), stream, mr)
293297

294298

@@ -330,7 +334,8 @@ cpdef tuple conditional_inner_join(
330334
right.view(),
331335
dereference(binary_predicate.c_obj.get()),
332336
output_size,
333-
stream.view()
337+
stream.view(),
338+
mr.get_mr()
334339
)
335340
return (
336341
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -376,7 +381,8 @@ cpdef tuple conditional_left_join(
376381
right.view(),
377382
dereference(binary_predicate.c_obj.get()),
378383
output_size,
379-
stream.view()
384+
stream.view(),
385+
mr.get_mr()
380386
)
381387
return (
382388
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -420,7 +426,8 @@ cpdef tuple conditional_full_join(
420426
left.view(),
421427
right.view(),
422428
dereference(binary_predicate.c_obj.get()),
423-
stream.view()
429+
stream.view(),
430+
mr.get_mr()
424431
)
425432
return (
426433
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -465,7 +472,8 @@ cpdef Column conditional_left_semi_join(
465472
right.view(),
466473
dereference(binary_predicate.c_obj.get()),
467474
output_size,
468-
stream.view()
475+
stream.view(),
476+
mr.get_mr()
469477
)
470478
return _column_from_gather_map(move(c_result), stream, mr)
471479

@@ -507,7 +515,8 @@ cpdef Column conditional_left_anti_join(
507515
right.view(),
508516
dereference(binary_predicate.c_obj.get()),
509517
output_size,
510-
stream.view()
518+
stream.view(),
519+
mr.get_mr()
511520
)
512521
return _column_from_gather_map(move(c_result), stream, mr)
513522

@@ -562,7 +571,8 @@ cpdef tuple mixed_inner_join(
562571
dereference(binary_predicate.c_obj.get()),
563572
nulls_equal,
564573
empty_optional,
565-
stream.view()
574+
stream.view(),
575+
mr.get_mr()
566576
)
567577
return (
568578
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -620,7 +630,8 @@ cpdef tuple mixed_left_join(
620630
dereference(binary_predicate.c_obj.get()),
621631
nulls_equal,
622632
empty_optional,
623-
stream.view()
633+
stream.view(),
634+
mr.get_mr()
624635
)
625636
return (
626637
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -678,7 +689,8 @@ cpdef tuple mixed_full_join(
678689
dereference(binary_predicate.c_obj.get()),
679690
nulls_equal,
680691
empty_optional,
681-
stream.view()
692+
stream.view(),
693+
mr.get_mr()
682694
)
683695
return (
684696
_column_from_gather_map(move(c_result.first), stream, mr),
@@ -733,7 +745,8 @@ cpdef Column mixed_left_semi_join(
733745
right_conditional.view(),
734746
dereference(binary_predicate.c_obj.get()),
735747
nulls_equal,
736-
stream.view()
748+
stream.view(),
749+
mr.get_mr()
737750
)
738751
return _column_from_gather_map(move(c_result), stream, mr)
739752

@@ -785,6 +798,7 @@ cpdef Column mixed_left_anti_join(
785798
right_conditional.view(),
786799
dereference(binary_predicate.c_obj.get()),
787800
nulls_equal,
788-
stream.view()
801+
stream.view(),
802+
mr.get_mr()
789803
)
790804
return _column_from_gather_map(move(c_result), stream, mr)

python/pylibcudf/pylibcudf/labeling.pyx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ cpdef Column label_bins(
6363
left_inclusive,
6464
right_edges.view(),
6565
right_inclusive,
66-
stream.view()
66+
stream.view(),
67+
mr.get_mr()
6768
)
6869

6970
return Column.from_libcudf(move(c_result), stream, mr)

python/pylibcudf/pylibcudf/libcudf/interop.pxd

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ from pylibcudf.libcudf.table.table cimport table
1212
from pylibcudf.libcudf.table.table_view cimport table_view
1313

1414
from rmm.librmm.cuda_stream_view cimport cuda_stream_view
15+
from rmm.librmm.memory_resource cimport device_memory_resource
1516

1617

1718
cdef extern from "dlpack/dlpack.h" nogil:
@@ -38,12 +39,14 @@ cdef extern from "cudf/interop.hpp" namespace "cudf" \
3839
nogil:
3940
cdef unique_ptr[table] from_dlpack(
4041
const DLManagedTensor* managed_tensor,
41-
cuda_stream_view stream
42+
cuda_stream_view stream,
43+
device_memory_resource* mr
4244
) except +libcudf_exception_handler
4345

4446
DLManagedTensor* to_dlpack(
4547
const table_view& input,
46-
cuda_stream_view stream
48+
cuda_stream_view stream,
49+
device_memory_resource* mr
4750
) except +libcudf_exception_handler
4851

4952
cdef cppclass column_metadata:

0 commit comments

Comments
 (0)