MCPcopy Create free account
hub / github.com/PaddlePaddle/Paddle / TensorFromArray

Function TensorFromArray

paddle/phi/core/tensor_utils.cc:649–698  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

647
648template <typename T>
649void TensorFromArray(const T* src,
650 const size_t& array_size,
651 const phi::DeviceContext& ctx,
652 DenseTensor* dst) {
653 auto dst_place = ctx.GetPlace();
654 auto src_ptr = static_cast<const void*>(src);
655 phi::CPUPlace src_place;
656 dst->Resize({static_cast<int64_t>(array_size)});
657 ctx.template Alloc<T>(dst);
658 auto dst_ptr = static_cast<void*>(dst->data<T>());
659 auto size = array_size * sizeof(T);
660
661 if (dst_place.GetType() == AllocationType::CPU) {
662 memory_utils::Copy(dst_place, dst_ptr, src_place, src_ptr, size);
663 }
664#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
665 else if (dst_place.GetType() == AllocationType::GPU) { // NOLINT
666 const void* stable_src_ptr =
667 backends::gpu::RestoreHostMemIfCapturingCUDAGraph(
668 const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(src_ptr)),
669 size);
670 memory_utils::Copy(dst_place,
671 dst_ptr,
672 src_place,
673 stable_src_ptr,
674 size,
675 reinterpret_cast<const phi::GPUContext&>(ctx).stream());
676 }
677#endif
678#ifdef PADDLE_WITH_CUSTOM_DEVICE
679 else if (dst_place.GetType() == AllocationType::CUSTOM) { // NOLINT
680 memory_utils::Copy(
681 dst_place,
682 dst_ptr,
683 src_place,
684 src_ptr,
685 size,
686 reinterpret_cast<const phi::CustomContext&>(ctx).stream());
687 }
688#endif
689#ifdef PADDLE_WITH_XPU
690 else if (dst_place.GetType() == AllocationType::XPU) { // NOLINT
691 memory_utils::Copy(dst_place, dst_ptr, src_place, src_ptr, size);
692 }
693#endif
694 else { // NOLINT
695 PADDLE_THROW(common::errors::Unimplemented(
696 "TensorFromArray on %s is not supported.", dst_place));
697 }
698}
699
700template void TensorFromArray<bool>(const bool* src,
701 const size_t& array_size,

Callers 1

CopyVectorToTensorFunction · 0.50

Calls 6

CopyFunction · 0.70
GetPlaceMethod · 0.45
ResizeMethod · 0.45
GetTypeMethod · 0.45
streamMethod · 0.45

Tested by

no test coverage detected