[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] hw/nvme: Add helper functions for qid-db conversion
From: |
Keith Busch |
Subject: |
Re: [PATCH] hw/nvme: Add helper functions for qid-db conversion |
Date: |
Tue, 2 Aug 2022 20:36:12 -0600 |
On Wed, Aug 03, 2022 at 09:46:05AM +0800, Jinhao Fan wrote:
> at 4:54 PM, Klaus Jensen <its@irrelevant.dk> wrote:
>
> > I am unsure if the compiler will transform that division into the shift
> > if it can infer that the divisor is a power of two (it most likely
> > will be able to).
> >
> > But I see no reason to have a potential division here when we can do
> > without and to me it is just as readable when you know the definition of
> > DSTRD is `2 ^ (2 + DSTRD)`.
>
> OK. I will send a new patch with shifts instead of divisions. BTW, why do we
> want to avoid divisions?
Integer division is at least an order of magnitude more CPU cycles than a
shift. Some archs are worse than others, but historically we go out of the way
to avoid them in a hot path, so shifting is a more familiar coding pattern.
Compilers typically implement division as a shift if you're dividing by a a
power of two integer constant expression (ICE).
This example here isn't an ICE, but it is a shifted constant power-of-two. I
wrote up a simple test to see what my compiler does with that, and it looks
like gcc will properly optimize it, but only if compiled with '-O3'.