Files
paddlepaddle--paddle/test/legacy_test/test_paddle_device.py
T
2026-07-13 12:40:42 +08:00

128 lines
3.9 KiB
Python

# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved.
#
# 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
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# 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 unittest
import paddle
from paddle import device as Device
class TestDevice(unittest.TestCase):
def test_str_only(self):
d = Device("cpu")
self.assertEqual(str(d), "cpu")
self.assertEqual(d.type, "cpu")
self.assertIsNone(d.index)
self.assertEqual(repr(d), "device(type='cpu')")
self.assertEqual(repr(Device('cuda:0')), "device(type='cuda', index=0)")
d = Device("cuda")
self.assertEqual(str(d), "cuda")
self.assertEqual(d.type, "cuda")
self.assertEqual(d.index, None)
self.assertEqual(repr(d), "device(type='cuda')")
d = Device("gpu")
self.assertEqual(str(d), "gpu")
self.assertEqual(d.type, "gpu")
self.assertEqual(d.index, None)
d = Device("xpu")
self.assertEqual(str(d), "xpu")
self.assertEqual(d.type, "xpu")
self.assertEqual(d.index, None)
def test_str_with_index(self):
d = Device("cuda", 1)
self.assertEqual(str(d), "cuda:1")
self.assertEqual(d.type, "cuda")
self.assertEqual(d.index, 1)
d = Device("gpu", 2)
self.assertEqual(str(d), "gpu:2")
self.assertEqual(d.type, "gpu")
self.assertEqual(d.index, 2)
d = Device("cpu", 0)
self.assertEqual(str(d), "cpu")
self.assertEqual(d.type, "cpu")
self.assertIsNone(d.index)
def test_str_colon(self):
d = Device("cuda:3")
self.assertEqual(str(d), "cuda:3")
self.assertEqual(d.type, "cuda")
self.assertEqual(d.index, 3)
d = Device("gpu:5")
self.assertEqual(str(d), "gpu:5")
self.assertEqual(d.type, "gpu")
self.assertEqual(d.index, 5)
def test_int_legacy(self):
d = Device(4)
self.assertEqual(str(d), "cuda:4")
self.assertEqual(d.type, "cuda")
self.assertEqual(d.index, 4)
def test_device_copy(self):
original = Device("cuda:2")
d = Device(original)
self.assertEqual(str(d), "cuda:2")
self.assertEqual(d.type, "cuda")
self.assertEqual(d.index, 2)
def test_with_device(self):
if paddle.device.cuda.device_count() >= 1:
with Device("cpu"):
a = paddle.empty([2])
assert str(a.place) == "Place(cpu)"
def test_invalid_type(self):
with self.assertRaises(ValueError):
Device(None, 1)
with self.assertRaises(ValueError):
Device("abc")
with self.assertRaises(TypeError):
Device(3.14)
with self.assertRaises(ValueError):
Device("abc:0")
def test_getattr_forward_to_place(self):
# Test that unknown attributes are forwarded to paddle.Place
d_cpu = Device("cpu")
self.assertTrue(d_cpu.is_cpu_place())
self.assertFalse(d_cpu.is_gpu_place())
self.assertFalse(d_cpu.is_xpu_place())
# Test CUDA device methods
if paddle.device.is_available() and paddle.is_compiled_with_cuda():
d_cuda = Device("cuda:0")
self.assertFalse(d_cuda.is_cpu_place())
self.assertTrue(d_cuda.is_gpu_place())
self.assertEqual(d_cuda.gpu_device_id(), 0)
d_gpu = Device("gpu:0")
self.assertTrue(d_gpu.is_gpu_place())
self.assertEqual(d_gpu.gpu_device_id(), 0)
if __name__ == "__main__":
unittest.main()