test_tensor_uva.py 2.9 KB
Newer Older
1
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
2
#
3 4 5
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
6
#
7
#     http://www.apache.org/licenses/LICENSE-2.0
8
#
9 10 11 12 13 14 15 16 17
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import paddle
import unittest
import numpy as np
18 19
from paddle.fluid import core
from paddle.fluid.framework import _test_eager_guard, _in_legacy_dygraph
20 21 22


class TestTensorCopyFrom(unittest.TestCase):
23

24
    def func_main(self):
25 26 27 28 29 30 31
        if paddle.fluid.core.is_compiled_with_cuda():
            place = paddle.CPUPlace()
            np_value = np.random.random(size=[10, 30]).astype('float32')
            tensor = paddle.to_tensor(np_value, place=place)
            tensor._uva()
            self.assertTrue(tensor.place.is_gpu_place())

32 33 34 35 36
    def test_main(self):
        with _test_eager_guard():
            self.func_main()
        self.func_main()

37

S
Siming Dai 已提交
38
class TestUVATensorFromNumpy(unittest.TestCase):
39

40
    def func_uva_tensor_creation(self):
S
Siming Dai 已提交
41 42 43 44 45 46 47
        if paddle.fluid.core.is_compiled_with_cuda():
            dtype_list = [
                "int32", "int64", "float32", "float64", "float16", "int8",
                "int16", "bool"
            ]
            for dtype in dtype_list:
                data = np.random.randint(10, size=[4, 5]).astype(dtype)
48 49
                if _in_legacy_dygraph():
                    tensor = paddle.fluid.core.to_uva_tensor(data, 0)
50
                    tensor2 = paddle.fluid.core.to_uva_tensor(data)
51 52
                else:
                    tensor = core.eager.to_uva_tensor(data, 0)
53 54
                    tensor2 = core.eager.to_uva_tensor(data)

S
Siming Dai 已提交
55
                self.assertTrue(tensor.place.is_gpu_place())
56
                self.assertTrue(tensor2.place.is_gpu_place())
57 58
                np.testing.assert_allclose(tensor.numpy(), data, rtol=1e-05)
                np.testing.assert_allclose(tensor2.numpy(), data, rtol=1e-05)
S
Siming Dai 已提交
59

S
Siming Dai 已提交
60 61 62 63 64 65 66 67 68 69 70
    def test_uva_tensor_corectness(self):
        if paddle.fluid.core.is_compiled_with_cuda():
            a = np.arange(0, 100, dtype="int32")
            a = a.reshape([10, 10])
            slice_a = a[:, 5]
            tensor1 = paddle.to_tensor(slice_a)
            tensor2 = core.eager.to_uva_tensor(slice_a)
            np.testing.assert_allclose(tensor1.numpy(),
                                       tensor2.numpy(),
                                       rtol=1e-05)

71 72 73 74 75
    def test_uva_tensor_creation(self):
        with _test_eager_guard():
            self.func_uva_tensor_creation()
        self.func_uva_tensor_creation()

S
Siming Dai 已提交
76

77 78
if __name__ == "__main__":
    unittest.main()