File: elementwise.h

package info (click to toggle)
pytorch 1.7.1-7
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 80,340 kB
  • sloc: cpp: 670,830; python: 343,991; ansic: 67,845; asm: 5,503; sh: 2,924; java: 2,888; xml: 266; makefile: 244; ruby: 148; yacc: 144; objc: 51; lex: 44
file content (158 lines) | stat: -rw-r--r-- 6,403 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef CAFFE2_UTILS_MATH_ELEMENTWISE_H_
#define CAFFE2_UTILS_MATH_ELEMENTWISE_H_

#include "caffe2/core/common.h"
#include "caffe2/core/types.h"

namespace caffe2 {
namespace math {

template <typename T, class Context>
CAFFE2_API void Exp(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Log(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Sin(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Asin(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Cos(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Acos(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Tan(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Atan(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Sinh(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Cosh(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void SinCos(int N, const T* X, T* S, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Tanh(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Abs(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Sqr(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Sqrt(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Rsqrt(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Cube(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Cbrt(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Neg(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Sign(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Not(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Powx(int N, const T* A, const T b, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Inv(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void Erf(int N, const T* X, T* Y, Context* context);
template <typename T, class Context>
CAFFE2_API void CdfNorm(int N, const T* X, T* Y, Context* context);

template <typename T, class Context>
CAFFE2_API void Set(std::int64_t N, T alpha, T* X, Context* context);

template <typename TAlpha, typename TData, class Context>
CAFFE2_API void
Scale(std::int64_t N, TAlpha alpha, const TData* X, TData* Y, Context* context);

// Different from the Scale function above, if alpha is passed in as a pointer,
// we will assume that it lives on the Context device, for example on GPU.
template <typename TAlpha, typename TData, class Context>
CAFFE2_API void Scale(
    std::int64_t N,
    const TAlpha* alpha,
    const TData* X,
    TData* Y,
    Context* context);

template <typename T, class Context>
CAFFE2_API void Add(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Sub(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Mul(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Div(int N, const T* A, const T* B, T* C, Context* context);

template <typename T, class Context>
CAFFE2_API void Min(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Max(int N, const T* A, const T* B, T* C, Context* context);

template <typename T, class Context>
CAFFE2_API void And(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Or(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void Xor(int N, const T* A, const T* B, T* C, Context* context);

template <typename T, class Context>
CAFFE2_API void
BitwiseAnd(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void
BitwiseOr(int N, const T* A, const T* B, T* C, Context* context);
template <typename T, class Context>
CAFFE2_API void
BitwiseXor(int N, const T* A, const T* B, T* C, Context* context);

template <typename T, class Context>
CAFFE2_API void EQ(int N, const T* A, const T* B, bool* C, Context* context);
template <typename T, class Context>
CAFFE2_API void NE(int N, const T* A, const T* B, bool* C, Context* context);
template <typename T, class Context>
CAFFE2_API void LT(int N, const T* A, const T* B, bool* C, Context* context);
template <typename T, class Context>
CAFFE2_API void LE(int N, const T* A, const T* B, bool* C, Context* context);
template <typename T, class Context>
CAFFE2_API void GT(int N, const T* A, const T* B, bool* C, Context* context);
template <typename T, class Context>
CAFFE2_API void GE(int N, const T* A, const T* B, bool* C, Context* context);

template <typename TAlpha, typename TData, class Context>
CAFFE2_API void
Axpy(std::int64_t N, TAlpha alpha, const TData* X, TData* Y, Context* context);

// Different from the Axpy function above, if alpha is passed in
// as a pointer, we will assume that it lives on the Context device,
// for example on GPU.
template <typename TAlpha, typename TData, class Context>
CAFFE2_API void Axpy(
    std::int64_t N,
    const TAlpha* alpha,
    const TData* X,
    TData* Y,
    Context* context);

template <typename TAlpha, typename TData, class Context>
CAFFE2_API void Axpby(
    std::int64_t N,
    TAlpha alpha,
    const TData* X,
    TAlpha beta,
    TData* Y,
    Context* context);

template <typename TAlpha, typename TData, class Context>
CAFFE2_API void Axpby(
    std::int64_t N,
    const TAlpha* alpha,
    const TData* X,
    const TAlpha* beta,
    TData* Y,
    Context* context);

} // namespace math
} // namespace caffe2

#endif // CAFFE2_UTILS_MATH_ELEMENTWISE_H_