Skip to content

Commit 8d57e9b

Browse files
authored
Don't allow in-place make_tensor to change ownership (#753)
* Don't allow in-place make_tensor to change ownership * Update docs to match new make functions * Update make_tensor.h * Update make_tensor.h
1 parent e63a159 commit 8d57e9b

File tree

2 files changed

+17
-31
lines changed

2 files changed

+17
-31
lines changed

docs_input/api/creation/tensors/make.rst

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,22 @@ Return by Value
1818
.. doxygenfunction:: make_tensor( TensorType &tensor, ShapeType &&shape, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
1919
.. doxygenfunction:: make_tensor( TensorType &tensor, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
2020
.. doxygenfunction:: make_tensor( T *data, const index_t (&shape)[RANK], bool owning = false)
21-
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *data, const index_t (&shape)[TensorType::Rank()], bool owning = false)
21+
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *data, const index_t (&shape)[TensorType::Rank()])
2222
.. doxygenfunction:: make_tensor( T *data, ShapeType &&shape, bool owning = false)
23-
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *data, typename TensorType::shape_container &&shape, bool owning = false)
24-
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *ptr, bool owning = false)
23+
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *data, typename TensorType::shape_container &&shape)
24+
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *ptr)
2525
.. doxygenfunction:: make_tensor( Storage &&s, ShapeType &&shape)
2626
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::storage_type &&s, typename TensorType::shape_container &&shape)
2727
.. doxygenfunction:: make_tensor( T* const data, D &&desc, bool owning = false)
28-
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type* const data, typename TensorType::desc_type &&desc, bool owning = false)
28+
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type* const data, typename TensorType::desc_type &&desc)
2929
.. doxygenfunction:: make_tensor( D &&desc, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
3030
.. doxygenfunction:: make_tensor( TensorType &&tensor, typename TensorType::desc_type &&desc, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
3131
.. doxygenfunction:: make_tensor( T *const data, const index_t (&shape)[RANK], const index_t (&strides)[RANK], bool owning = false)
32-
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *const data, const index_t (&shape)[TensorType::Rank()], const index_t (&strides)[TensorType::Rank()], bool owning = false)
32+
.. doxygenfunction:: make_tensor( TensorType &tensor, typename TensorType::value_type *const data, const index_t (&shape)[TensorType::Rank()], const index_t (&strides)[TensorType::Rank()])
3333

3434
Return by Pointer
3535
~~~~~~~~~~~~~~~~~
3636
.. doxygenfunction:: make_tensor_p( const index_t (&shape)[RANK], matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
3737
.. doxygenfunction:: make_tensor_p( ShapeType &&shape, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
3838
.. doxygenfunction:: make_tensor_p( TensorType &tensor, typename TensorType::shape_container &&shape, matxMemorySpace_t space = MATX_MANAGED_MEMORY, cudaStream_t stream = 0)
39-
.. doxygenfunction:: make_tensor_p( T *const data, ShapeType &&shape, bool owning = false)
39+
.. doxygenfunction:: make_tensor_p( T *const data, ShapeType &&shape, bool owning = false)

include/matx/core/make_tensor.h

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -315,19 +315,16 @@ auto make_tensor( T *data,
315315
* Pointer to device data
316316
* @param shape
317317
* Shape of tensor
318-
* @param owning
319-
* If this class owns memory of data
320318
* @returns New tensor
321319
**/
322320
template <typename TensorType,
323321
std::enable_if_t<is_tensor_view_v<TensorType>, bool> = true>
324322
auto make_tensor( TensorType &tensor,
325323
typename TensorType::value_type *data,
326-
const index_t (&shape)[TensorType::Rank()],
327-
bool owning = false) {
324+
const index_t (&shape)[TensorType::Rank()]) {
328325
MATX_NVTX_START("", matx::MATX_NVTX_LOG_API)
329326

330-
auto tmp = make_tensor<typename TensorType::value_type, TensorType::Rank()>(data, shape, owning);
327+
auto tmp = make_tensor<typename TensorType::value_type, TensorType::Rank()>(data, shape, false);
331328
tensor.Shallow(tmp);
332329
}
333330

@@ -366,19 +363,16 @@ auto make_tensor( T *data,
366363
* Pointer to device data
367364
* @param shape
368365
* Shape of tensor
369-
* @param owning
370-
* If this class owns memory of data
371366
* @returns New tensor
372367
**/
373368
template <typename TensorType,
374369
std::enable_if_t<is_tensor_view_v<TensorType>, bool> = true>
375370
auto make_tensor( TensorType &tensor,
376371
typename TensorType::value_type *data,
377-
typename TensorType::shape_container &&shape,
378-
bool owning = false) {
372+
typename TensorType::shape_container &&shape) {
379373
MATX_NVTX_START("", matx::MATX_NVTX_LOG_API)
380374

381-
auto tmp = make_tensor<typename TensorType::value_type, typename TensorType::shape_container>(data, std::forward<typename TensorType::shape_container>(shape), owning);
375+
auto tmp = make_tensor<typename TensorType::value_type, typename TensorType::shape_container>(data, std::forward<typename TensorType::shape_container>(shape), false);
382376
tensor.Shallow(tmp);
383377
}
384378

@@ -407,16 +401,13 @@ auto make_tensor( T *ptr,
407401
* Tensor object to store newly-created tensor into
408402
* @param ptr
409403
* Pointer to data
410-
* @param owning
411-
* If this class owns memory of data
412404
* @returns New tensor
413405
**/
414406
template <typename TensorType,
415407
std::enable_if_t<is_tensor_view_v<TensorType>, bool> = true>
416408
auto make_tensor( TensorType &tensor,
417-
typename TensorType::value_type *ptr,
418-
bool owning = false) {
419-
auto tmp = make_tensor<typename TensorType::value_type>(ptr, owning);
409+
typename TensorType::value_type *ptr) {
410+
auto tmp = make_tensor<typename TensorType::value_type>(ptr, false);
420411
tensor.Shallow(tmp);
421412
}
422413

@@ -527,19 +518,17 @@ auto make_tensor( T* const data,
527518
* Pointer to device data
528519
* @param desc
529520
* Tensor descriptor (tensor_desc_t)
530-
* @param owning
531-
* If this class owns memory of data
532521
* @returns New tensor
533522
**/
534523
template <typename TensorType,
535524
std::enable_if_t<is_tensor_view_v<TensorType>, bool> = true>
536525
auto make_tensor( TensorType &tensor,
537526
typename TensorType::value_type* const data,
538-
typename TensorType::desc_type &&desc,
539-
bool owning = false) {
527+
typename TensorType::desc_type &&desc) {
540528
MATX_NVTX_START("", matx::MATX_NVTX_LOG_API)
541529

542-
auto tmp = make_tensor<typename TensorType::value_type, typename TensorType::desc_type>(data, std::forward<typename TensorType::desc_type>(desc), owning);
530+
// This tensor should be non-owning regardless of the original ownership since it will go out of scope at the end of the function
531+
auto tmp = make_tensor<typename TensorType::value_type, typename TensorType::desc_type>(data, std::forward<typename TensorType::desc_type>(desc), false);
543532
tensor.Shallow(tmp);
544533
}
545534

@@ -626,20 +615,17 @@ auto make_tensor( T *const data,
626615
* Shape of tensor
627616
* @param strides
628617
* Strides of tensor
629-
* @param owning
630-
* If this class owns memory of data
631618
* @returns New tensor
632619
**/
633620
template <typename TensorType,
634621
std::enable_if_t<is_tensor_view_v<TensorType>, bool> = true>
635622
auto make_tensor( TensorType &tensor,
636623
typename TensorType::value_type *const data,
637624
const index_t (&shape)[TensorType::Rank()],
638-
const index_t (&strides)[TensorType::Rank()],
639-
bool owning = false) {
625+
const index_t (&strides)[TensorType::Rank()]) {
640626
MATX_NVTX_START("", matx::MATX_NVTX_LOG_API)
641627

642-
auto tmp = make_tensor<typename TensorType::value_type, TensorType::Rank()>(data, shape, strides, owning);
628+
auto tmp = make_tensor<typename TensorType::value_type, TensorType::Rank()>(data, shape, strides, false);
643629
tensor.Shallow(tmp);
644630
}
645631

0 commit comments

Comments
 (0)