From e35441f2cce59cb0a8dc1dbed5755ed1ce43f8ca Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Tue, 29 Jun 2021 04:05:48 -0400 Subject: [PATCH] Faster activation functions for AVX Using rational function approximation for tanh() and sigmoid. --- dnn/nnet.c | 5 +- dnn/training_tf2/pade.py | 70 +++++++++++++++++ dnn/vec_avx.h | 158 ++++++++++++++++++++++++++++++++++++--- 3 files changed, 220 insertions(+), 13 deletions(-) create mode 100644 dnn/training_tf2/pade.py diff --git a/dnn/nnet.c b/dnn/nnet.c index 567362f9..e9439363 100644 --- a/dnn/nnet.c +++ b/dnn/nnet.c @@ -80,8 +80,9 @@ void compute_activation(float *output, float *input, int N, int activation) output[i] = relu(input[i]); } else if (activation == ACTIVATION_SOFTMAX) { #ifdef SOFTMAX_HACK - for (i=0;i1 values caused by the reciprocal approximation. */ - Y = _mm256_sub_ps(one, _mm256_rcp_ps(_mm256_add_ps(Y, one))); + Y = sigmoid8_approx(X); _mm256_storeu_ps(&y[i], Y); } for (;i