def test_dgmm_out(self, dtype): self._setup(dtype) if self.side == 'L': ref = cupy.diag(self.x) @ self.a elif self.side == 'R': ref = self.a @ cupy.diag(self.x) c = cupy.empty(self.shape, order=self.orderc, dtype=dtype) cublas.dgmm(self.side, self.a, self.x, out=c) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)
def test_dgmm_inplace(self, dtype): if self.orderc != 'F': pytest.skip() self._setup(dtype) if self.side == 'L': ref = cupy.diag(self.x) @ self.a elif self.side == 'R': ref = self.a @ cupy.diag(self.x) cublas.dgmm(self.side, self.a, self.x, out=self.a) cupy.testing.assert_allclose(self.a, ref, rtol=self.tol, atol=self.tol)
def test_dgmm_x_scalar(self, dtype): if self.orderc != 'F': pytest.skip() self._setup(dtype, xdim=0) ref = self.x * self.a c = cublas.dgmm(self.side, self.a, self.x, incx=0) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)
def test_dgmm(self, dtype): if self.orderc != 'F': raise unittest.SkipTest() self._setup(dtype) if self.side == 'L': ref = cupy.diag(self.x) @ self.a elif self.side == 'R': ref = self.a @ cupy.diag(self.x) c = cublas.dgmm(self.side, self.a, self.x) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)
def test_gdmm_incx_minus_one(self, dtype): if self.orderc != 'F': raise unittest.SkipTest() self._setup(dtype) if self.side == 'L': ref = cupy.diag(self.x[::-1]) @ self.a elif self.side == 'R': ref = self.a @ cupy.diag(self.x[::-1]) c = cublas.dgmm(self.side, self.a, self.x, incx=-1) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)
def test_dgmm_x_matrix(self, dtype): if self.orderc != 'F': pytest.skip() self._setup(dtype, xdim=2) if self.side == 'L': ref = cupy.diag(cupy.diag(self.x)) @ self.a incx = self.shape[0] + 1 elif self.side == 'R': ref = self.a @ cupy.diag(cupy.diag(self.x)) incx = self.shape[1] + 1 c = cublas.dgmm(self.side, self.a, self.x, incx=incx) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)
def test_dgmm_incx_minus_one(self, dtype): if self.orderc != 'F': pytest.skip() if cupy.cuda.runtime.is_hip: if self._check_dgmm_incx_minus_one_hip_skip_condition(): pytest.xfail('HIP dgmm may have a bug') self._setup(dtype) if self.side == 'L': ref = cupy.diag(self.x[::-1]) @ self.a elif self.side == 'R': ref = self.a @ cupy.diag(self.x[::-1]) c = cublas.dgmm(self.side, self.a, self.x, incx=-1) cupy.testing.assert_allclose(c, ref, rtol=self.tol, atol=self.tol)