xref: /petsc/src/binding/petsc4py/test/test_device.py (revision 5574ef43b0ac3357bb9db30b381e3fae1c24bab1)
1199ce8e4SStefano Zampinifrom petsc4py import PETSc
2199ce8e4SStefano Zampiniimport unittest
3199ce8e4SStefano Zampini
4199ce8e4SStefano Zampini# --------------------------------------------------------------------
5199ce8e4SStefano Zampini
6199ce8e4SStefano Zampini
7199ce8e4SStefano Zampiniclass TestDevice(unittest.TestCase):
8199ce8e4SStefano Zampini    def testCurrent(self):
9199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().getCurrent()
10*7af56e5cSStefano Zampini        if not dctx:
11*7af56e5cSStefano Zampini            return
12199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 2)
13199ce8e4SStefano Zampini        device = dctx.getDevice()
14199ce8e4SStefano Zampini        del device
15199ce8e4SStefano Zampini        del dctx
16199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().getCurrent()
17199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 2)
18199ce8e4SStefano Zampini        device = dctx.getDevice()
19199ce8e4SStefano Zampini        del device
20199ce8e4SStefano Zampini        del dctx
21199ce8e4SStefano Zampini
22199ce8e4SStefano Zampini    def testDevice(self):
23199ce8e4SStefano Zampini        device = PETSc.Device.create()
24199ce8e4SStefano Zampini        device.configure()
25199ce8e4SStefano Zampini        _ = device.getDeviceType()
26199ce8e4SStefano Zampini        _ = device.getDeviceId()
27199ce8e4SStefano Zampini        del device
28199ce8e4SStefano Zampini
29199ce8e4SStefano Zampini    def testDeviceContext(self):
30199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().create()
31*7af56e5cSStefano Zampini        if not dctx:
32*7af56e5cSStefano Zampini            return
33199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 1)
34199ce8e4SStefano Zampini        dctx.setUp()
35199ce8e4SStefano Zampini        self.assertTrue(dctx.idle())
36199ce8e4SStefano Zampini        dctx.destroy()
37199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
38199ce8e4SStefano Zampini
39199ce8e4SStefano Zampini    def testStream(self):
40199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().getCurrent()
41*7af56e5cSStefano Zampini        if not dctx:
42*7af56e5cSStefano Zampini            return
43199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 2)
44199ce8e4SStefano Zampini        stype = dctx.getStreamType()
45199ce8e4SStefano Zampini        dctx.setStreamType(stype)
46199ce8e4SStefano Zampini        dctx.destroy()
47199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
48199ce8e4SStefano Zampini
49199ce8e4SStefano Zampini    def testSetFromOptions(self):
50199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().create()
51*7af56e5cSStefano Zampini        if not dctx:
52*7af56e5cSStefano Zampini            return
53199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 1)
54199ce8e4SStefano Zampini        dctx.setFromOptions()
55199ce8e4SStefano Zampini        dctx.setUp()
56199ce8e4SStefano Zampini        dctx.destroy()
57199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
58199ce8e4SStefano Zampini
59199ce8e4SStefano Zampini    def testDuplicate(self):
60199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().getCurrent()
61*7af56e5cSStefano Zampini        if not dctx:
62*7af56e5cSStefano Zampini            return
63199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 2)
64199ce8e4SStefano Zampini        dctx2 = dctx.duplicate()
65199ce8e4SStefano Zampini        self.assertEqual(dctx2.getRefCount(), 1)
66199ce8e4SStefano Zampini        dctx.destroy()
67199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
68199ce8e4SStefano Zampini        dctx2.destroy()
69199ce8e4SStefano Zampini        self.assertEqual(dctx2.getRefCount(), 0)
70199ce8e4SStefano Zampini
71199ce8e4SStefano Zampini    def testWaitFor(self):
72199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().create()
73*7af56e5cSStefano Zampini        if not dctx:
74*7af56e5cSStefano Zampini            return
75199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 1)
76199ce8e4SStefano Zampini        dctx.setUp()
77199ce8e4SStefano Zampini        dctx2 = PETSc.DeviceContext().create()
78199ce8e4SStefano Zampini        self.assertEqual(dctx2.getRefCount(), 1)
79199ce8e4SStefano Zampini        dctx2.setUp()
80199ce8e4SStefano Zampini        dctx.waitFor(dctx2)
81199ce8e4SStefano Zampini        dctx.destroy()
82199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
83199ce8e4SStefano Zampini        dctx2.destroy()
84199ce8e4SStefano Zampini        dctx2.destroy()
85199ce8e4SStefano Zampini        self.assertEqual(dctx2.getRefCount(), 0)
86199ce8e4SStefano Zampini
87199ce8e4SStefano Zampini    def testForkJoin(self):
88199ce8e4SStefano Zampini        dctx = PETSc.DeviceContext().getCurrent()
89*7af56e5cSStefano Zampini        if not dctx:
90*7af56e5cSStefano Zampini            return
91199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 2)
92199ce8e4SStefano Zampini        jdestroy = PETSc.DeviceContext.JoinMode.DESTROY
93199ce8e4SStefano Zampini        jtypes = [
94199ce8e4SStefano Zampini            PETSc.DeviceContext.JoinMode.SYNC,
95199ce8e4SStefano Zampini            PETSc.DeviceContext.JoinMode.NO_SYNC,
96199ce8e4SStefano Zampini        ]
97199ce8e4SStefano Zampini        for j in jtypes:
98199ce8e4SStefano Zampini            dctxs = dctx.fork(4)
99199ce8e4SStefano Zampini            for ctx in dctxs:
100199ce8e4SStefano Zampini                self.assertEqual(ctx.getRefCount(), 1)
101199ce8e4SStefano Zampini            dctx.join(j, dctxs[0::2])
102199ce8e4SStefano Zampini            dctx.join(j, dctxs[3::-2])
103199ce8e4SStefano Zampini            for ctx in dctxs:
104199ce8e4SStefano Zampini                self.assertEqual(ctx.getRefCount(), 1)
105199ce8e4SStefano Zampini            dctx.join(jdestroy, dctxs)
106199ce8e4SStefano Zampini            for ctx in dctxs:
107199ce8e4SStefano Zampini                self.assertEqual(ctx.getRefCount(), 0)
108199ce8e4SStefano Zampini        dctx.destroy()
109199ce8e4SStefano Zampini        self.assertEqual(dctx.getRefCount(), 0)
110199ce8e4SStefano Zampini
111199ce8e4SStefano Zampini
112199ce8e4SStefano Zampini# --------------------------------------------------------------------
113199ce8e4SStefano Zampini
114199ce8e4SStefano Zampiniif __name__ == '__main__':
115199ce8e4SStefano Zampini    unittest.main()
116