Boost logo

Boost Users :

From: joel falcou (joel.falcou_at_[hidden])
Date: 2008-08-07 15:21:38


Le Jeu 7 août 2008 21:09, Andrea
Denzler a écrit :
> Working with indexes is defintively easier and more confortable.
And
> probably in many situation the overhead is not worth to be
optimized at
> all.

That's what my experiments shown
for months

> I only was surprised when you said there is a
performance gain using
> indexes.
Again my hands were faster
than my thoughts. Apologizes for the misunderstanding

> You
are loosing performance unless the compiler is so intelligent to
>
avoid the multiplication at each step.
I yet have to find a compiler
not that intelligent. From VC6 to ICC and g++ since v 3.x, i never had to
complain about the compiler output. Then again, most computation is
prefetched during the array allocation ( see  nrc_alloc_array
function in my source).

> When performance is really an
issue then I first re-think the algorithm
algorithmic optimisations
are always best anyway

>after I check the produced assembler
listing to see what the compiler did.
I was used to do this but I
really think it's not necessary by now with modern compiler.

> If you are lucky the compiler can produce code that does this in
one
> instruction set, if not you will get an overhead. Again if h
and w are low
> values you will not notice it.
And that's
exactly what happens when you do loop tiling, the inner h and w are rather
small (tile often occupies less than half the L1 cache in size)

> This example is of course much faster, and yes, it is not elegant
nor clear.
> int *p=array,*pend=&array[h][w];
> while
(p < pend) *p++ = uni() ;

Well, I copy/pasted this in my
array.cpp in place of the loop nest.
My 2D array take 9.938s to
iterate 10000 over a 512*512 image of float, while your "while
loop" took 9.891. I only lose ~0.5% by using NRC allocation +
indexing. It's indeed faster but not by that much and, indeed, far less
elegant.

If needed, I can try to implement a simili-multi_array
using my method and compare it to the original one in term of performance.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net