def test_elementwise_binary(self): desc_a = cutensor.create_tensor_descriptor(self.a) desc_c = cutensor.create_tensor_descriptor(self.c) d = cutensor.elementwise_binary(self.alpha, self.a, desc_a, self.mode_a, self.gamma, self.c, desc_c, self.mode_c) assert d.dtype == self.dtype testing.assert_allclose(self.alpha * self.a_transposed + self.gamma * self.c_transposed, d, rtol=self.tol, atol=self.tol)
def test_elementwise_binary(self): desc_a = cutensor.create_tensor_descriptor(self.a, ct.OP_SIGMOID) desc_c = cutensor.create_tensor_descriptor(self.c, ct.OP_ABS) d = cutensor.elementwise_binary( self.alpha, self.a, desc_a, self.mode_a, self.gamma, self.c, desc_c, self.mode_c, op_AC=ct.OP_MUL ) testing.assert_allclose( self.alpha * (1 / (1 + cupy.exp(-self.a_transposed))) * self.gamma * cupy.abs(self.c), d, rtol=1e-6, atol=1e-6 )
def test_elementwise_binary(self): desc_a = cutensor.create_tensor_descriptor(self.a) desc_c = cutensor.create_tensor_descriptor(self.c) d = cutensor.elementwise_binary( self.alpha, self.a, desc_a, self.mode_a, self.gamma, self.c, desc_c, self.mode_c ) assert d.dtype == numpy.float32 testing.assert_allclose( self.alpha.item() * self.a_transposed + self.gamma.item() * self.c_transposed, d, rtol=1e-6, atol=1e-6 )
def test_elementwise_binary_out(self): out = testing.shaped_random( (30, 20, 40), cupy, self.dtype, seed=3) desc_a = cutensor.create_tensor_descriptor(self.a) desc_c = cutensor.create_tensor_descriptor(self.c) d = cutensor.elementwise_binary( self.alpha, self.a, desc_a, self.mode_a, self.gamma, self.c, desc_c, self.mode_c, out=out ) assert d is out testing.assert_allclose( self.alpha * self.a_transposed + self.gamma * self.c_transposed, d, rtol=self.tol, atol=self.tol )
extent = {'x': 400, 'y': 200, 'z': 300} a = cupy.random.random([extent[i] for i in mode_a]) c = cupy.random.random([extent[i] for i in mode_c]) a = a.astype(dtype) c = c.astype(dtype) desc_a = cutensor.create_tensor_descriptor(a) desc_c = cutensor.create_tensor_descriptor(c) alpha = 1.1 gamma = 1.3 # rehearsal d = cutensor.elementwise_binary(alpha, a, desc_a, mode_a, gamma, c, desc_c, mode_c) ev_start = stream.Event() ev_end = stream.Event() st = stream.Stream() with st: # measurement ev_start.record() d = cutensor.elementwise_binary(alpha, a, desc_a, mode_a, gamma, c, desc_c, mode_c) ev_end.record() st.synchronize() elapsed_ms = stream.get_elapsed_time(ev_start, ev_end) transfer_byte = d.size * d.itemsize if alpha != 0.0: