def test_gemv(m, n, dtype, rng): tols = tolerances[dtype] A, X, Y = gemv_system(queue, m, n, dtype, rng) clA, clX, clY = map(to_ocl, (A, X, Y)) try: blas.setup() # normal gemv clX.set(X) clY.fill(0) event = blas.gemv(queue, clA, clX, clY) assert np.allclose(clY.get(), np.dot(A, X), **tols) assert isinstance(event, cl.Event) # transposed gemv clX.fill(0) clY.set(Y) blas.gemv(queue, clA, clY, clX, transA=True) assert np.allclose(clX.get(), np.dot(A.T, Y), **tols) # sliced gemv clX.set(X) clY.fill(0) blas.gemv(queue, clA[:-1, 1:], clX[:-1], clY[1:]) Yslice = clY.get() assert np.allclose(Yslice[0], 0, **tols) assert np.allclose(Yslice[1:], np.dot(A[:-1, 1:], X[:-1]), **tols) finally: blas.teardown()
def test_check_dtype(rng): dtype = 'float32' m, n = 3, 4 sA, sX, sY = gemv_system(queue, m, n, dtype, rng) dA, dX, dY = map(lambda x: x.astype('float64'), [sA, sX, sY]) cA, cX, cY = map(lambda x: x.astype('complex64'), [sA, sX, sY]) zA, zX, zY = map(lambda x: x.astype('complex128'), [sA, sX, sY]) clsA, clsX, clsY = map(to_ocl, (sA, sX, sY)) cldA, cldX, cldY = map(to_ocl, (dA, dX, dY)) clcA, clcX, clcY = map(to_ocl, (cA, cX, cY)) clzA, clzX, clzY = map(to_ocl, (zA, zX, zY)) try: blas.setup() with pytest.raises(ValueError): blas.gemv(queue, cldA, clsX, clsY) with pytest.raises(ValueError): blas.gemv(queue, clsA, cldX, clsY) with pytest.raises(ValueError): blas.gemv(queue, clcA, cldX, clcY) with pytest.raises(ValueError): blas.gemv(queue, clzA, cldX, clzY) finally: blas.teardown()