class test_dot(): def setup(self): self.gp = Gpupy() self.rng = np.random.RandomState(0) def test_gemm(self): """ Test matrix-matrix dot product.""" a = self.rng.rand(129, 1025).astype(np.float32) b = self.rng.rand(1025, 257).astype(np.float32) out_np = np.dot(a, b) out_gp = self.gp.dot(a, b).copy_to_host() assert(np.allclose(out_np, out_gp)) out_gp = self.gp.zeros(shape=(129, 257)) self.gp.dot(a, b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_gemv(self): a = self.rng.rand(129, 1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) out_np = np.dot(a, b) out_gp = self.gp.dot(a, b).copy_to_host() assert(np.allclose(out_np, out_gp)) out_gp = self.gp.zeros(shape=129) self.gp.dot(a, b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_gevm(self): a = self.rng.rand(129, 1025).astype(np.float32) b = self.rng.rand(129).astype(np.float32) out_np = np.dot(b,a) out_gp = self.gp.dot(b,a).copy_to_host() assert(np.allclose(out_np, out_gp)) out_gp = self.gp.zeros(shape=1025) self.gp.dot(b, a, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_vvdot(self): a = self.rng.rand(129).astype(np.float32) b = self.rng.rand(129).astype(np.float32) out_np = np.dot(a,b) out_gp = self.gp.dot(a,b) assert(np.allclose(out_np, out_gp))
class test_zeros(): def setup(self): self.gp = Gpupy() def test_zeros(self): """Create array of zeros.""" out_np = np.zeros(shape=(129,1025), dtype=np.float32) out_gp = self.gp.zeros(shape=(129,1025)).copy_to_host() assert(np.allclose(out_np, out_gp)) out_np = np.zeros(shape=(129,1025), dtype=np.float32) out_gp = cuda.to_device(np.ones(shape=(129,1025), dtype=np.float32)) self.gp.zeros(shape=(129,1025), out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) out_np = np.zeros(shape=129, dtype=np.float32) out_gp = self.gp.zeros(shape=129).copy_to_host() assert(np.allclose(out_np, out_gp)) out_np = np.zeros(129, dtype=np.float32) out_gp = cuda.to_device(np.ones(129, dtype=np.float32)) self.gp.zeros(shape=129, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host()))
class test_add(): def setup(self): self.gp = Gpupy() self.rng = np.random.RandomState(0) def test_madd(self): """Add two matrices.""" a = self.rng.rand(129, 1025).astype(np.float32) b = self.rng.rand(129, 1025).astype(np.float32) out_np = a+b out_gp = self.gp.add(a,b).copy_to_host() assert(np.allclose(out_np, out_gp)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a,b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_madd_scale(self): a = self.rng.rand(129, 1025).astype(np.float32) b = self.rng.rand(129, 1025).astype(np.float32) alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b).astype(np.float32) out_gp = self.gp.add(a, b, alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a,b, alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol=1.e-5)) def test_vadd(self): a = self.rng.rand(1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) out_np = a+b out_gp = self.gp.add(a,b).copy_to_host() assert(np.allclose(out_np, out_gp)) out_gp = self.gp.zeros(shape=1025) self.gp.add(a,b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_vadd_scale(self): a = self.rng.rand(1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b).astype(np.float32) out_gp = self.gp.add(a, b, alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol=1.e-5)) out_gp = self.gp.zeros(shape=1025) self.gp.add(a, b, alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_ms_scale(self): a = self.rng.rand(129,1025).astype(np.float32) b = 1. alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b).astype(np.float32) out_gp = self.gp.add(a,b,alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a, b, alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol = 1.e-5)) def test_ms(self): a = self.rng.rand(129,1025).astype(np.float32) b = 1. out_np = (a+b).astype(np.float32) out_gp = self.gp.add(a,b).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a,b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol = 1.e-5)) def test_vs_scale(self): a = self.rng.rand(1025).astype(np.float32) b = 1. alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b).astype(np.float32) out_gp = self.gp.add(a,b,alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=1025) self.gp.add(a, b, alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol = 1.e-5)) def test_vs(self): """ Add a vector and a scalar.""" a = self.rng.rand(1025).astype(np.float32) b = 1. out_np = (a+b).astype(np.float32) out_gp = self.gp.add(a,b).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=1025) self.gp.add(a,b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_mv_scale(self): """ Add a matrix to a vector and scale the result.""" a = self.rng.rand(129,1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b).astype(np.float32) out_gp = self.gp.add(a, b, alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a, b, alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol = 1.e-5)) def test_mv(self): """ Add a matrix to a vector.""" a = self.rng.rand(129,1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) out_np = (a+b).astype(np.float32) out_gp = self.gp.add(a,b).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(129, 1025)) self.gp.add(a,b, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) def test_ma_scale(self): """ Add a matrix to a vector with np.newaxis and scale the result.""" a = self.rng.rand(1025, 1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) alpha = .4 beta = -1.6 out_np = (alpha*a+beta*b[np.newaxis,:]).astype(np.float32) out_gp = self.gp.add(a,b[np.newaxis,:],alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol=1.e-5)) out_gp = self.gp.zeros(shape=(1025, 1025)) self.gp.add(a, b[np.newaxis,:], alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol=1.e-5)) out_np = (alpha*a+beta*b[:,np.newaxis]).astype(np.float32) out_gp = self.gp.add(a, b[:,np.newaxis], alpha = alpha, beta = beta).copy_to_host() assert(np.allclose(out_np, out_gp, atol=1.e-5)) out_gp = self.gp.zeros(shape=(1025, 1025)) self.gp.add(a, b[:,np.newaxis], alpha = alpha, beta = beta, out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host(), atol=1.e-5)) def test_ma(self): """Add a matrix to a vector with a np.newaxis.""" a = self.rng.rand(1025, 1025).astype(np.float32) b = self.rng.rand(1025).astype(np.float32) out_np = (a+b[np.newaxis,:]).astype(np.float32) out_gp = self.gp.add(a,b[np.newaxis,:]).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(1025, 1025)) self.gp.add(a, b[np.newaxis,:], out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host())) out_np = (a+b[:,np.newaxis]).astype(np.float32) out_gp = self.gp.add(a,b[:,np.newaxis]).copy_to_host() assert(np.allclose(out_np, out_gp, atol = 1.e-5)) out_gp = self.gp.zeros(shape=(1025, 1025)) self.gp.add(a,b[:,np.newaxis], out=out_gp) assert(np.allclose(out_np, out_gp.copy_to_host()))