From patchwork Mon Dec 17 09:13:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Steven X-Patchwork-Id: 11446 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 077F644D969 for ; Mon, 17 Dec 2018 11:14:28 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 253E668A88F; Mon, 17 Dec 2018 11:14:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbg65.qq.com (smtpbg65.qq.com [103.7.28.233]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E844A68A593 for ; Mon, 17 Dec 2018 11:14:19 +0200 (EET) X-QQ-mid: bizesmtp17t1545037993telhmh6g Received: from localhost (unknown [106.2.229.242]) by esmtp6.qq.com (ESMTP) with id ; Mon, 17 Dec 2018 17:13:12 +0800 (CST) X-QQ-SSF: 01100000008000F0FNF0B00A0000000 X-QQ-FEAT: 1elLNeR01bYt9MTPiSS4mZ6rsJ6zGZzL9Pm7lrip+XVOdbX7fa9AywXIFYnrR BLzNsTm4iPr0oAcv3WMHyiEtkZGSAKQclt4nrKCZxLFJDAfgMe2Yesp+SjpfyXyJzsa30+M MaxGYNOi1Hr+Fw2BqPCEYR6n+QVYq25/O9yHjeAhKsFtFmkB0z0/55odUsYGC5a5PAk16jO d0+R8vvXxzNyKENYiOQ8GOHTkC7aBgtiT3O4mcIweQ4i91nYBdMYMGxikEUpiwtJ8xrrQ5L /H244cn9KB3vI6pQVyQZh4eGc8T84pEnlDJA== X-QQ-GoodBg: 0 From: Steven Liu To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Dec 2018 17:13:05 +0800 Message-Id: <20181217091305.50957-1-lq@chinaffmpeg.org> X-Mailer: git-send-email 2.15.2 (Apple Git-101.1) X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:chinaffmpeg.org:qybgforeign:qybgforeign4 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] libavcodec/fft_template: improve performance of the ff_fft_init in fft_template X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Steven Liu MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" After patch: init nbits = 17, get 10000 samples, duration: 15221 Before patch: init nbits = 17, get 10000 samples, duration: 16105 test script: DURATION=0 for((i=0;i<10000;i++)) do ./libavcodec/tests/fft -n 17 &>output T_DURATION=`grep "duration" output | awk -F"=" '{ print $2}'` DURATION=`expr $DURATION + $T_DURATION` done TOTAL=`expr $DURATION / 10000` echo $TOTAL Signed-off-by: Steven Liu --- libavcodec/fft_template.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/libavcodec/fft_template.c b/libavcodec/fft_template.c index 762c014bc8..5f6f52275d 100644 --- a/libavcodec/fft_template.c +++ b/libavcodec/fft_template.c @@ -257,21 +257,28 @@ av_cold int ff_fft_init(FFTContext *s, int nbits, int inverse) } #endif /* FFT_FIXED_32 */ +#define SPLIT_RADIX_PERMUTATION(num) \ + for(i=0; ifft_permutation == FF_FFT_PERM_SWAP_LSBS) \ + j = (j&~3) | ((j>>1)&1) | ((j<<1)&2); \ + k = -split_radix_permutation(i, n, s->inverse) & (n-1); \ + j = (j&~3) | ((j>>1)&1) | ((j<<1)&2); \ + k = -split_radix_permutation(i, n, s->inverse) & (n-1); \ + s->revtab##num[k] = j; \ + } if (s->fft_permutation == FF_FFT_PERM_AVX) { fft_perm_avx(s); } else { - for(i=0; ifft_permutation == FF_FFT_PERM_SWAP_LSBS) - j = (j&~3) | ((j>>1)&1) | ((j<<1)&2); - k = -split_radix_permutation(i, n, s->inverse) & (n-1); - if (s->revtab) - s->revtab[k] = j; - if (s->revtab32) - s->revtab32[k] = j; + if (s->revtab) { + SPLIT_RADIX_PERMUTATION() + } + if (s->revtab32) { + SPLIT_RADIX_PERMUTATION(32) } +#undef SPLIT_RADIX_PERMUTATION } return 0;