A Wednesday 17 September 2008, Brendan Simons escrigué:
[clip]
> I would love a c-types code snippet.  I'm not very handy in c.  Since
> I gather numpy is row-major, I thought I up and down crops very
> quickly by moving the start and end pointers of the array.  For
> cropping left and right, is there a fast c command for "copy while
> skipping every nth hundred bytes"?

There is no such efficient "copy while skipping every nth hundred bytes" 
thing for C or for any other language.  You are facing here a 
fundamental problem in the design of modern processor architectures, 
namely, the (large) memory latency.  That means that when accessing 
memory in discontiguous patterns like the one you indicated, that will 
keep the processor waiting for the data most of the time.  There are 
ways to give hints to compilers in order to perform a better 
pre-fetching of interesting data, but this is a rather complex process, 
and the improvements can be meager in most of cases.

In brief, if you don't have much time to spend of this, my advice is to 
use just regular assignment or memcpy (whatever is more comfortable for 
your situation), because you won't be able to get more performance than 
what these will offer.

However, if you have more time and want to look for ways on how to 
scratch more performance on different memory access patterns, it is 
always a wise thing to have a look at the excellent "What Every 
Programmer Should Know About Memory" report:

htt://people.redhat.com/drepper/cpumemory.pdf

[Incidentally, this is possible one of the best reports available on the 
subject of memory access on nowadays architectures (a critical thing 
for achieving maximum performance), and besides it is available for 
free, so there is no excuse to not have look at it ;-)]

Cheers,

-- 
Francesc Alted
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to