Beispiel #1
0
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))
Beispiel #2
0
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()))
Beispiel #3
0
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()))