[IPOL discuss] Fast DCT using FFTW3

Nicolas Limare nicolas.limare at cmla.ens-cachan.fr
Wed Feb 29 10:42:45 CET 2012


Hi,

> For example, let's consider a boolean function: "f(x) && g(y) &&
> h(z)". If f(x) is false, then g(y) and h(z) won't be
> called/evaluated.

Thshort-circuit evaluation is not compiler optimization, it is part of
the C language specification:

    «Unlike &, && guarantees left-to-right evaluation: the first
    operand is evaluated, including all side effects; if it is equal
    to 0, the value of the expression is 0. OTHERWISE, the right
    operand is evaluated, and if it is equal to 0, the expression's
    value is 0, otherwise 1.»
                                                      — K&R2 p. 207

> My conclusion is that we should optimize the code my ourselves if these
> optimizations aren't trivial. If so, the compiler can handle them and
> there's no need to avoid writing very clear and clean code.

I agree, if the compilers do the work, we do not need to do it. But I
would add the nuance that gcc may not be enough, I would personally
only feel more confident after observing the optimization from more
compilers.

My "sqrt(2) example" was too much. But I think that gcc will not
replace the copy loop by a memcpy(), the two loops by a single one
(because there is no knowledge that the image rows are contiguous)
or the division by x by a multiplication by 1/x (because it has a
numerical rouding impact).

Anyway, being correct and readable is more important than being
fast. Maybe I should not have answered like I did.

-- 
Nicolas LIMARE - CMLA - ENS Cachan    http://www.cmla.ens-cachan.fr/~limare/
IPOL - image processing on line                          http://www.ipol.im/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://tools.ipol.im/mailman/archive/discuss/attachments/20120229/c09ed632/attachment.pgp>


More information about the discuss mailing list