1 #define TORCH_ASSERT_ONLY_METHOD_OPERATORS
2 #include <ATen/core/Tensor.h>
3 #include <ATen/Config.h>
4
5 #ifndef AT_PER_OPERATOR_HEADERS
6 #include <ATen/NativeFunctions.h>
7 #else
8 #include <ATen/ops/sigmoid_native.h> // for mkldnn_sigmoid, mkldnn_...
9 #include <ATen/ops/tanh_native.h> // for mkldnn_tanh, mkldnn_tanh_
10 #endif
11
12 #if !AT_MKLDNN_ENABLED()
13
14 namespace at {
15 namespace native {
16
mkldnn_sigmoid(const Tensor & self)17 Tensor mkldnn_sigmoid(const Tensor& self) {
18 TORCH_CHECK(false, "mkldnn_sigmoid: ATen not compiled with MKLDNN support");
19 }
20
mkldnn_sigmoid_(Tensor & self)21 Tensor& mkldnn_sigmoid_(Tensor& self) {
22 TORCH_CHECK(false, "mkldnn_sigmoid_: ATen not compiled with MKLDNN support");
23 }
24
mkldnn_tanh(const Tensor & self)25 Tensor mkldnn_tanh(const Tensor& self) {
26 TORCH_CHECK(false, "mkldnn_tanh: ATen not compiled with MKLDNN support");
27 }
28
mkldnn_tanh_(Tensor & self)29 Tensor& mkldnn_tanh_(Tensor& self) {
30 TORCH_CHECK(false, "mkldnn_tanh_: ATen not compiled with MKLDNN support");
31 }
32
33 } // namespace native
34 } // namespace at
35
36 #else // AT_MKLDNN_ENABLED
37
38 #include <ATen/native/mkldnn/MKLDNNCommon.h>
39
40 namespace at {
41 namespace native {
42
mkldnn_sigmoid(const Tensor & self)43 Tensor mkldnn_sigmoid(const Tensor& self) {
44 ideep::tensor& x = itensor_from_mkldnn(self);
45 ideep::tensor y;
46 ideep::eltwise_forward::compute(
47 x, y, ideep::algorithm::eltwise_logistic, ideep::prop_kind::forward);
48 return new_with_itensor_mkldnn(std::move(y), optTypeMetaToScalarType(self.options().dtype_opt()),
49 self.options().device_opt());
50 }
51
mkldnn_sigmoid_(Tensor & self)52 Tensor& mkldnn_sigmoid_(Tensor& self) {
53 ideep::tensor& x = itensor_from_mkldnn(self);
54 ideep::eltwise_forward::compute(
55 x, x, ideep::algorithm::eltwise_logistic, ideep::prop_kind::forward);
56 return self;
57 }
58
mkldnn_tanh(const Tensor & self)59 Tensor mkldnn_tanh(const Tensor& self) {
60 ideep::tensor& x = itensor_from_mkldnn(self);
61 ideep::tensor y;
62 ideep::eltwise_forward::compute(
63 x, y, ideep::algorithm::eltwise_tanh, ideep::prop_kind::forward);
64 return new_with_itensor_mkldnn(std::move(y), optTypeMetaToScalarType(self.options().dtype_opt()),
65 self.options().device_opt());
66 }
67
mkldnn_tanh_(Tensor & self)68 Tensor& mkldnn_tanh_(Tensor& self) {
69 ideep::tensor& x = itensor_from_mkldnn(self);
70 ideep::eltwise_forward::compute(
71 x, x, ideep::algorithm::eltwise_tanh, ideep::prop_kind::forward);
72 return self;
73 }
74
75 } // namespace native
76 } // namespace at
77
78 #endif // AT_MKLDNN_ENABLED
79