COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
test_cublas2.py
1 import numpy as np
2 import carmaWrap as ch
3 import numpy.testing as npt
4 import time
5 
6 dec = 4
7 prec = 10**-dec
8 
9 sizem = 512
10 sizen = 1024
11 
12 seed = np.int32(time.perf_counter() * 1e3)
13 
14 print("")
15 print("Test cublas 2")
16 print("Precision: ", prec)
17 
18 c = ch.context.get_instance()
19 
20 #generatig random context.obj 2d
21 
22 #generating random symetric context.obj 2d
23 
24 #generating 3 random context.obj 1d
25 
26 
28 
29  #function gemv
30  # testing: y=A.x
31  # x and y are vector, A a matrix
32 
33  alpha = 2
34  beta = 1
35 
36  Mat = ch.obj_float(c, np.random.randn(sizem, sizen))
37  MatT = ch.obj_float(c, np.random.randn(sizen, sizem))
38  # Mat.random_host(seed, 'U')
39  # MatT.random_host(seed + 2, 'U')
40 
41  Vectx = ch.obj_float(c, np.random.randn(sizen))
42  Vecty = ch.obj_float(c, np.random.randn(sizem))
43  # Vectx.random_host(seed + 3, 'U')
44  # Vecty.random_host(seed + 4, 'U')
45 
46  A = np.array(Mat)
47  AT = np.array(MatT)
48  x = np.array(Vectx)
49  y = np.array(Vecty)
50 
51  y = alpha * A.dot(x) + beta * y
52  y2 = alpha * A.dot(x)
53  y3 = alpha * AT.T.dot(x)
54 
55  # Vecty = ch.obj_float(c, np.random.randn((sizem)))
56 
57  Mat.gemv(Vectx, alpha, 'N', Vecty, beta)
58  Vecty_2 = Mat.gemv(Vectx, alpha, 'N')
59  Vecty_3 = MatT.gemv(Vectx, alpha, 'T')
60 
61  npt.assert_array_almost_equal(y, np.array(Vecty), decimal=dec - 1)
62  npt.assert_array_almost_equal(y2, np.array(Vecty_2), decimal=dec - 1)
63  npt.assert_array_almost_equal(y3, np.array(Vecty_3), decimal=dec - 1)
64 
65 
67  # function ger
68  # testing: A= x.y
69  # and : A= x.y+ A
70  # x and y are vectors, A a matrix
71  Mat = ch.obj_float(c, np.random.randn(sizem, sizen))
72  # Mat.random_host(seed + 2, 'U')
73 
74  Vectx = ch.obj_float(c, np.random.randn(sizen))
75  # Vectx.random_host(seed + 3, 'U')
76 
77  Vecty = ch.obj_float(c, np.random.randn(sizem))
78  # Vecty.random_host(seed + 4, 'U')
79 
80  x = np.array(Vectx)
81  A = np.array(Mat)
82  y = np.array(Vecty)
83 
84  caOresA = Vecty.ger(Vectx, Mat)
85  caOresB = Vecty.ger(Vectx)
86 
87  A = np.outer(y, x) + A
88  B = np.outer(y, x)
89 
90  # npt.assert_array_almost_equal(A, np.array(caOresA), decimal=dec)
91  npt.assert_array_almost_equal(B, np.array(caOresB), decimal=dec)
92 
93 
95  #function symv
96  # testing: y=A.x
97  # x and y are vector, A a symetric matrix
98 
99  MatSym = ch.obj_float(c, np.random.randn(sizem, sizem))
100  # MatSym.random_host(seed + 2, 'U')
101  data_R = np.array(MatSym)
102  data_R = data_R + data_R.T
103  MatSym = ch.obj_float(c, data_R)
104 
105  Vectx = ch.obj_float(c, np.random.randn((sizem)))
106  # Vectx.random_host(seed + 5, 'U')
107 
108  Vecty = ch.obj_float(c, np.random.randn((sizem)))
109 
110  A = np.array(MatSym)
111 
112  x2 = np.array(Vectx)
113 
114  y = A.dot(x2)
115 
116  MatSym.symv(Vectx, vecty=Vecty)
117  Vecty_2 = MatSym.symv(Vectx)
118 
119  npt.assert_array_almost_equal(y, np.array(Vecty), decimal=dec)
120  npt.assert_array_almost_equal(y, np.array(Vecty_2), decimal=dec)
121 
122 
124 
125  #function gemv
126  # testing: y=A.x
127  # x and y are vector, A a matrix
128 
129  alpha = 2
130  beta = 1
131 
132  Mat = ch.obj_double(c, np.random.randn(sizem, sizen))
133  MatT = ch.obj_double(c, np.random.randn(sizen, sizem))
134  # Mat.random_host(seed, 'U')
135  # MatT.random_host(seed + 2, 'U')
136 
137  Vectx = ch.obj_double(c, np.random.randn(sizen))
138  Vecty = ch.obj_double(c, np.random.randn(sizem))
139  # Vectx.random_host(seed + 3, 'U')
140  # Vecty.random_host(seed + 4, 'U')
141 
142  A = np.array(Mat)
143  AT = np.array(MatT)
144  x = np.array(Vectx)
145  y = np.array(Vecty)
146 
147  y = alpha * A.dot(x) + beta * y
148  y2 = alpha * A.dot(x)
149  y3 = alpha * AT.T.dot(x)
150 
151  # Vecty = ch.obj_double(c, np.random.randn((sizem)))
152 
153  Mat.gemv(Vectx, alpha, 'N', Vecty, beta)
154  Vecty_2 = Mat.gemv(Vectx, alpha, 'N')
155  Vecty_3 = MatT.gemv(Vectx, alpha, 'T')
156 
157  npt.assert_array_almost_equal(y, np.array(Vecty), decimal=dec - 1)
158  npt.assert_array_almost_equal(y2, np.array(Vecty_2), decimal=dec - 1)
159  npt.assert_array_almost_equal(y3, np.array(Vecty_3), decimal=dec - 1)
160 
161 
163  # function ger
164  # testing: A= x.y
165  # and : A= x.y+ A
166  # x and y are vectors, A a matrix
167  Mat = ch.obj_double(c, np.random.randn(sizem, sizen))
168  # Mat.random_host(seed + 2, 'U')
169 
170  Vectx = ch.obj_double(c, np.random.randn(sizen))
171  # Vectx.random_host(seed + 3, 'U')
172 
173  Vecty = ch.obj_double(c, np.random.randn(sizem))
174  # Vecty.random_host(seed + 4, 'U')
175 
176  x = np.array(Vectx)
177  A = np.array(Mat)
178  y = np.array(Vecty)
179 
180  caOresA = Vecty.ger(Vectx, Mat)
181  caOresB = Vecty.ger(Vectx)
182 
183  A = np.outer(y, x) + A
184  B = np.outer(y, x)
185 
186  # npt.assert_array_almost_equal(A, np.array(caOresA), decimal=dec)
187  npt.assert_array_almost_equal(B, np.array(caOresB), decimal=dec)
188 
189 
191  #function symv
192  # testing: y=A.x
193  # x and y are vector, A a symetric matrix
194 
195  MatSym = ch.obj_double(c, np.random.randn(sizem, sizem))
196  # MatSym.random_host(seed + 2, 'U')
197  data_R = np.array(MatSym)
198  data_R = data_R + data_R.T
199  MatSym = ch.obj_double(c, data_R)
200 
201  Vectx = ch.obj_double(c, np.random.randn((sizem)))
202  # Vectx.random_host(seed + 5, 'U')
203 
204  Vecty = ch.obj_double(c, np.random.randn((sizem)))
205 
206  A = np.array(MatSym)
207 
208  x2 = np.array(Vectx)
209 
210  y = A.dot(x2)
211 
212  MatSym.symv(Vectx, vecty=Vecty)
213  Vecty_2 = MatSym.symv(Vectx)
214 
215  npt.assert_array_almost_equal(y, np.array(Vecty), decimal=dec)
216  npt.assert_array_almost_equal(y, np.array(Vecty_2), decimal=dec)
test_cublas2.test_float_gemv
def test_float_gemv()
Definition: test_cublas2.py:27
test_cublas2.test_double_ger
def test_double_ger()
Definition: test_cublas2.py:162
test_cublas2.test_float_symv
def test_float_symv()
Definition: test_cublas2.py:94
test_cublas2.test_double_symv
def test_double_symv()
Definition: test_cublas2.py:190
test_cublas2.test_double_gemv
def test_double_gemv()
Definition: test_cublas2.py:123
test_cublas2.test_float_ger
def test_float_ger()
Definition: test_cublas2.py:66