|
|
|
@ -198,8 +198,8 @@ TEST(Tensor, CopyFrom) {
|
|
|
|
|
int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
|
|
|
|
|
memcpy(src_ptr, arr, 9 * sizeof(int));
|
|
|
|
|
|
|
|
|
|
auto cpu_ctx = paddle::platform::CPUDeviceContext();
|
|
|
|
|
dst_tensor.CopyFrom<int>(src_tensor, cpu_ctx);
|
|
|
|
|
auto* cpu_ctx = new paddle::platform::CPUDeviceContext();
|
|
|
|
|
dst_tensor.CopyFrom<int>(src_tensor, *cpu_ctx);
|
|
|
|
|
|
|
|
|
|
const int* dst_ptr = dst_tensor.data<int>();
|
|
|
|
|
ASSERT_NE(src_ptr, dst_ptr);
|
|
|
|
@ -208,7 +208,7 @@ TEST(Tensor, CopyFrom) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Tensor slice_tensor = src_tensor.Slice<int>(1, 2);
|
|
|
|
|
dst_tensor.CopyFrom<int>(slice_tensor, cpu_ctx);
|
|
|
|
|
dst_tensor.CopyFrom<int>(slice_tensor, *cpu_ctx);
|
|
|
|
|
const int* slice_ptr = slice_tensor.data<int>();
|
|
|
|
|
dst_ptr = dst_tensor.data<int>();
|
|
|
|
|
ASSERT_NE(dst_ptr, slice_ptr);
|
|
|
|
@ -216,4 +216,47 @@ TEST(Tensor, CopyFrom) {
|
|
|
|
|
EXPECT_EQ(dst_ptr[i], slice_ptr[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#ifndef PADDLE_ONLY_CPU
|
|
|
|
|
{
|
|
|
|
|
Tensor src_tensor;
|
|
|
|
|
Tensor gpu_tensor;
|
|
|
|
|
Tensor dst_tensor;
|
|
|
|
|
|
|
|
|
|
int* src_ptr = src_tensor.mutable_data<int>(make_ddim({3, 3}), CPUPlace());
|
|
|
|
|
|
|
|
|
|
int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
|
|
|
|
|
memcpy(src_ptr, arr, 9 * sizeof(int));
|
|
|
|
|
|
|
|
|
|
// CPU Tensor to GPU Tensor
|
|
|
|
|
auto gpu_ctx = new paddle::platform::CUDADeviceContext(0);
|
|
|
|
|
gpu_tensor.CopyFrom<int>(src_tensor, *gpu_ctx);
|
|
|
|
|
|
|
|
|
|
// GPU Tensor to CPU Tensor
|
|
|
|
|
auto cpu_ctx = new paddle::platform::CPUDeviceContext();
|
|
|
|
|
dst_tensor.CopyFrom<int>(gpu_tensor, *cpu_ctx);
|
|
|
|
|
|
|
|
|
|
// Compare Tensors
|
|
|
|
|
const int* dst_ptr = dst_tensor.data<int>();
|
|
|
|
|
ASSERT_NE(src_ptr, dst_ptr);
|
|
|
|
|
for (size_t i = 0; i < 9; ++i) {
|
|
|
|
|
EXPECT_EQ(src_ptr[i], dst_ptr[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Tensor slice_tensor = src_tensor.Slice<int>(1, 2);
|
|
|
|
|
|
|
|
|
|
// CPU Slice Tensor to GPU Tensor
|
|
|
|
|
gpu_tensor.CopyFrom<int>(slice_tensor, *gpu_ctx);
|
|
|
|
|
|
|
|
|
|
// GPU Tensor to CPU Tensor
|
|
|
|
|
dst_tensor.CopyFrom<int>(gpu_tensor, *cpu_ctx);
|
|
|
|
|
|
|
|
|
|
// Compare Slice Tensors
|
|
|
|
|
const int* slice_ptr = slice_tensor.data<int>();
|
|
|
|
|
dst_ptr = dst_tensor.data<int>();
|
|
|
|
|
ASSERT_NE(dst_ptr, slice_ptr);
|
|
|
|
|
for (size_t i = 0; i < 3; ++i) {
|
|
|
|
|
EXPECT_EQ(dst_ptr[i], slice_ptr[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|