Skip to content

Commit 5ad9f0b

Browse files
committed
threshold, softsign
1 parent 7e67836 commit 5ad9f0b

File tree

2 files changed

+76
-14
lines changed

2 files changed

+76
-14
lines changed

linalg/arm64/arm64simd/arm64simd_act_f32_32n.tmpl

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,26 @@
187187
dup v23.4s, v24.s[0]
188188
b .inner_loop
189189
.abs:
190-
b .unsupported
190+
fabs v0.4s, v0.4s
191+
fabs v1.4s, v1.4s
192+
fabs v2.4s, v2.4s
193+
fabs v3.4s, v3.4s
194+
fabs v4.4s, v4.4s
195+
fabs v5.4s, v5.4s
196+
fabs v6.4s, v6.4s
197+
fabs v7.4s, v7.4s
198+
b .inner_loop
191199
.recip:
192-
b .unsupported
200+
fmov v24.4s, #1.0
201+
fdiv v0.4s, v24.4s, v0.4s
202+
fdiv v1.4s, v24.4s, v1.4s
203+
fdiv v2.4s, v24.4s, v2.4s
204+
fdiv v3.4s, v24.4s, v3.4s
205+
fdiv v4.4s, v24.4s, v4.4s
206+
fdiv v5.4s, v24.4s, v5.4s
207+
fdiv v6.4s, v24.4s, v6.4s
208+
fdiv v7.4s, v24.4s, v7.4s
209+
b .inner_loop
193210
.add:
194211
b .unsupported
195212
.sub:
@@ -221,8 +238,21 @@
221238
fadd v6.4s, v6.4s, v24.4s
222239
fadd v7.4s, v7.4s, v24.4s
223240
b .inner_loop
241+
224242
.sub_const:
225-
b .unsupported
243+
ins v24.s[0], w3
244+
add x5, x5, 4
245+
dup v24.4s, v24.s[0]
246+
fsub v0.4s, v0.4s, v24.4s
247+
fsub v1.4s, v1.4s, v24.4s
248+
fsub v2.4s, v2.4s, v24.4s
249+
fsub v3.4s, v3.4s, v24.4s
250+
fsub v4.4s, v4.4s, v24.4s
251+
fsub v5.4s, v5.4s, v24.4s
252+
fsub v6.4s, v6.4s, v24.4s
253+
fsub v7.4s, v7.4s, v24.4s
254+
b .inner_loop
255+
226256
.mul_const:
227257
ins v24.s[0], w3
228258
add x5, x5, 4

linalg/src/frame/activations/tests.rs

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,34 @@ macro_rules! act_tests {
9898
}
9999
}
100100

101+
#[test]
102+
fn abs_prop(x in x_strat()) {
103+
if $cond {
104+
run_kernel_test::<$ti, $ker>(&x, &[Abs], |x| x.abs());
105+
}
106+
}
107+
108+
#[test]
109+
fn recip_prop(x in x_strat()) {
110+
if $cond {
111+
run_kernel_test::<$ti, $ker>(&x, &[Recip], |x| x.recip());
112+
}
113+
}
114+
101115
#[test]
102116
fn add_const_prop(alpha in any::<$ti>(), x in x_strat()) {
103117
if $cond {
104118
run_kernel_test::<$ti, $ker>(&x, &[AddConst(alpha)], |x| x + alpha);
105119
}
106120
}
107121

122+
#[test]
123+
fn sub_const_prop(alpha in any::<$ti>(), x in x_strat()) {
124+
if $cond {
125+
run_kernel_test::<$ti, $ker>(&x, &[SubConst(alpha)], |x| x - alpha);
126+
}
127+
}
128+
108129
#[test]
109130
fn mul_const_prop(alpha in any::<$ti>(), x in x_strat()) {
110131
if $cond {
@@ -210,6 +231,17 @@ macro_rules! act_tests {
210231
}
211232
}
212233

234+
#[test]
235+
fn threshold_relu_prop(x in x_strat(), alpha in any::<$ti>()) {
236+
if $cond {
237+
run_kernel_test::<$ti, $ker>(
238+
&x,
239+
&$crate::frame::activations::definitions::threshold_relu(alpha).ops,
240+
|x| if x >= alpha { x } else { <$ti>::zero() }
241+
);
242+
}
243+
}
244+
213245
#[test]
214246
fn hard_sigmoid(x in x_strat(), alpha in any::<$ti>(), beta in any::<$ti>()) {
215247
if $cond {
@@ -221,6 +253,17 @@ macro_rules! act_tests {
221253
}
222254
}
223255

256+
#[test]
257+
fn softsign(x in x_strat()) {
258+
if $cond {
259+
run_kernel_test::<$ti, $ker>(
260+
&x,
261+
&$crate::frame::activations::definitions::softsign().ops,
262+
|x| x / ( <$ti>::one() + x.abs())
263+
);
264+
}
265+
}
266+
224267
#[test]
225268
fn hard_swish(x in x_strat()) {
226269
if $cond {
@@ -232,17 +275,6 @@ macro_rules! act_tests {
232275
}
233276
}
234277
}
235-
/*
236-
prop_act_e2e!($cond, $ti, $ker, affine(alpha, beta));
237-
prop_act_e2e!($cond, $ti, $ker, leaky_relu(alpha));
238-
prop_act_e2e!($cond, $ti, $ker, threshold_relu(alpha));
239-
prop_act_e2e!($cond, $ti, $ker, softsign());
240-
prop_act_e2e!($cond, $ti, $ker, hardswish());
241-
/*
242-
prop_activation!($cond, $ti, $ker, sigmoid());
243-
prop_activation!($cond, $ti, $ker, exp2f());
244-
*/
245-
*/
246278
}
247279
};
248280
}

0 commit comments

Comments
 (0)