From: Siarhei Siamashka <siarhei.siamashka@gmail.com>
To: frederic.dalleau@linux.intel.com
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH v4 05/16] sbc: Add mmx primitive for 1b 8s analysis
Date: Wed, 14 Nov 2012 22:23:06 +0200 [thread overview]
Message-ID: <20121114222306.6770b074@i7> (raw)
In-Reply-To: <50A3BC30.8060209@linux.intel.com>
On Wed, 14 Nov 2012 16:43:44 +0100
Frédéric Dalleau <frederic.dalleau@linux.intel.com> wrote:
> Hi,
>
> Since I'm gonna resend a new series, I'll comment myself ;)
>
> On 10/30/2012 10:39 AM, Frédéric Dalleau wrote:
> > +static inline void sbc_analyze_1b_8s_mmx(struct sbc_encoder_state *state,
> > + int16_t *x, int32_t *out, int out_stride)
> > +{
> > + if (state->odd)
> > + sbc_analyze_eight_mmx(x, out, analysis_consts_fixed8_simd_odd);
> > + else
> > + sbc_analyze_eight_mmx(x, out, analysis_consts_fixed8_simd_even);
> > +
> > + state->odd = !state->odd;
> > +
> > + __asm__ volatile ("emms\n");
> > +}
> > +
>
> One thing bother me about this patch : the emms instruction is called
> after every block, instead of every four blocks until now. I have very
> little knowledge about this, but I read that emms instruction is
> somewhat expensive.
> Some quick tests haven't shown differences, but it is possible to add a
> post analyze callback to overcome this. In this case, emms instruction
> could be run every 15 blocks or whatever is defined.
The EMMS instruction must be used after the use of MMX instructions,
otherwise the subsequent floating point calculations are broken.
As part of calling conventions, FPU state must be clear after returning
from any function:
http://www.agner.org/optimize/calling_conventions.pdf
It means that normally every MMX function needs to execute EMMS
instruction before returning. We were already cutting the corners a bit
by putting MMX code into static inline functions which don't have
EMMS themselves. But using the post analyze callback would be really
wrong as that's going to explicitly cross function boundaries with
inconsistent FPU state.
>
> Is it worth it?
If benchmarks do not show a significant performance drop, then it does
not really matter. A minor performance regression is fine, as long as
the MMX code is still significantly faster than C.
Nowadays using SSE2 is a much better idea. And SSE2 does not suffer
from EMMS-alike warts.
--
Best regards,
Siarhei Siamashka
next prev parent reply other threads:[~2012-11-14 20:23 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-30 9:39 [PATCH v4 00/16] mSBC tests Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 01/16] sbc: Add encoder_state to analysis functions Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 02/16] sbc: Break 4 blocks processing to variable steps Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 03/16] sbc: Rename sbc_analyze_4b_xx to sbc_analyze_xx Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 04/16] sbc: add odd member variable to sbc_encoder_state Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 05/16] sbc: Add mmx primitive for 1b 8s analysis Frédéric Dalleau
2012-11-14 15:43 ` Frédéric Dalleau
2012-11-14 20:23 ` Siarhei Siamashka [this message]
2012-10-30 9:39 ` [PATCH v4 06/16] sbc: Add armv6 " Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 07/16] sbc: Add iwmmxt primitive for 1b 8s encoding Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 08/16] sbc: Add simd primitive for 1b 8s analysis Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 09/16] sbc: Use simd primitive if doing msbc on neon Frédéric Dalleau
2012-11-14 19:27 ` Siarhei Siamashka
2012-11-15 10:23 ` Frédéric Dalleau
2012-11-18 23:46 ` Siarhei Siamashka
2012-10-30 9:39 ` [PATCH v4 10/16] sbc: simd support for 8 multiples block size Frédéric Dalleau
2012-11-14 19:09 ` Siarhei Siamashka
2012-10-30 9:39 ` [PATCH v4 11/16] sbc: Add SBC_MSBC flag to enable 15 block encoding Frédéric Dalleau
2012-11-14 14:49 ` Marcel Holtmann
2012-11-14 15:34 ` Frédéric Dalleau
2012-11-14 23:20 ` Marcel Holtmann
2012-10-30 9:39 ` [PATCH v4 12/16] sbc: Add support for mSBC frame header Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 13/16] sbc: Update sbcdec for msbc Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 14/16] sbc: Update sbcenc " Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 15/16] sbc: Update sbcinfo " Frédéric Dalleau
2012-10-30 9:39 ` [PATCH v4 16/16] sbc: Update copyrights Frédéric Dalleau
2012-11-14 10:00 ` [PATCH v4 00/16] mSBC tests Frédéric Dalleau
2012-11-14 14:50 ` Marcel Holtmann
2012-11-14 19:57 ` Siarhei Siamashka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121114222306.6770b074@i7 \
--to=siarhei.siamashka@gmail.com \
--cc=frederic.dalleau@linux.intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).