|
|
|
@ -83,7 +83,7 @@ inline void Tensor::ShareDataWith(const Tensor& src) {
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
inline void Tensor::CopyFrom(const Tensor& src,
|
|
|
|
|
const platform::CPUPlace& dst_place) {
|
|
|
|
|
const platform::Place& dst_place) {
|
|
|
|
|
src.check_memory_size<T>();
|
|
|
|
|
Resize(src.dims());
|
|
|
|
|
|
|
|
|
@ -94,41 +94,27 @@ inline void Tensor::CopyFrom(const Tensor& src,
|
|
|
|
|
|
|
|
|
|
auto size = product(src.dims_) * sizeof(T);
|
|
|
|
|
|
|
|
|
|
if (platform::is_cpu_place(src_place)) {
|
|
|
|
|
if (platform::is_cpu_place(src_place) && platform::is_cpu_place(dst_place)) {
|
|
|
|
|
memory::Copy(boost::get<platform::CPUPlace>(dst_place), dst_ptr,
|
|
|
|
|
boost::get<platform::CPUPlace>(src_place), src_ptr, size);
|
|
|
|
|
}
|
|
|
|
|
#ifndef PADDLE_ONLY_CPU
|
|
|
|
|
else if (platform::is_gpu_place(src_place)) {
|
|
|
|
|
else if (platform::is_gpu_place(src_place) &&
|
|
|
|
|
platform::is_cpu_place(dst_place)) {
|
|
|
|
|
memory::Copy(boost::get<platform::CPUPlace>(dst_place), dst_ptr,
|
|
|
|
|
boost::get<platform::GPUPlace>(src_place), src_ptr, size, 0);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifndef PADDLE_ONLY_CPU
|
|
|
|
|
template <typename T>
|
|
|
|
|
inline void Tensor::CopyFrom(const Tensor& src,
|
|
|
|
|
const platform::GPUPlace& dst_place) {
|
|
|
|
|
src.check_memory_size<T>();
|
|
|
|
|
Resize(src.dims());
|
|
|
|
|
|
|
|
|
|
auto src_place = src.holder_->place();
|
|
|
|
|
auto src_ptr = static_cast<const void*>(src.data<T>());
|
|
|
|
|
|
|
|
|
|
auto dst_ptr = static_cast<void*>(mutable_data<T>(dst_place));
|
|
|
|
|
|
|
|
|
|
auto size = product(src.dims_) * sizeof(T);
|
|
|
|
|
|
|
|
|
|
if (platform::is_cpu_place(src_place)) {
|
|
|
|
|
} else if (platform::is_cpu_place(src_place) &&
|
|
|
|
|
platform::is_gpu_place(dst_place)) {
|
|
|
|
|
memory::Copy(boost::get<platform::GPUPlace>(dst_place), dst_ptr,
|
|
|
|
|
boost::get<platform::CPUPlace>(src_place), src_ptr, size, 0);
|
|
|
|
|
} else if (platform::is_gpu_place(src_place)) {
|
|
|
|
|
} else if (platform::is_gpu_place(src_place) &&
|
|
|
|
|
platform::is_gpu_place(dst_place)) {
|
|
|
|
|
memory::Copy(boost::get<platform::GPUPlace>(dst_place), dst_ptr,
|
|
|
|
|
boost::get<platform::GPUPlace>(src_place), src_ptr, size, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
|
inline Tensor Tensor::Slice(const int& begin_idx, const int& end_idx) const {
|
|
|
|
|