[Cython] Boundchecking question
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Sun Aug 17 10:18:00 CEST 2008
On boundscheck, I'm thinking that it means "make the assumption that this code will not raise an IndexError". That's it.
(And I think it should apply to lists and tuples as well if possible.
(One could add a more fine-grained buffer_bounds_check too then, of course. Or "boundscheck = all", "boundscheck=None", "boundscheck = list,buffer"). But let's leave that for now, we can be backwards compatible later.
Dag Sverre Seljebotn
-----Original Message-----
From: Robert Bradshaw <robertwb at math.washington.edu>
Date: Sunday, Aug 17, 2008 10:11 am
Subject: Re: [Cython] Boundchecking question
To: cython-dev at codespeak.netReply-To: cython-dev at codespeak.net
On Aug 17, 2008, at 12:23 AM, Dag Sverre Seljebotn wrote:
>
>> I'm not sure what you mean -- a negative bound is only checked for
> once per dimension. I.e. Positive ints are only checked for
> negativity once per dim.
>
>> (Remember that one must also check for the negative bound, i.e. -n,
> but this is only done for negative numbers).
>
>I am talking about the case where bounds checking is turned off, and
>"once per dimension" is relatively expensive. Even when it predicts
>correctly it still does the test. I've got some code using 2D buffers
>in the inner loop. Here's the timings:
>
>CPU time: 1.50 s, Wall time: 1.52 s -- standard buffers
>CPU time: 1.00 s, Wall time: 1.01 s -- boundscheck=False
>CPU time: 0.77 s, Wall time: 0.78 s -- unsigned indices
>
>(Note, I'm not even going to time the non-buffer version, but its
>certainly on the order of minutes--buffers are awsome!).
>
>> There is potential for optimizing the exceptional case when bounds
> are off (but the code would be a little less clean and exceptional
> cases are just that).
>
>> Could you perhaps post some C code modified as you suggest?
>
>Essentially it's the C code one gets if one manually casts the
>indices to unsigned ints. It's just that that makes the code
>significantly uglier.
>
>> Finally, if what you propose is a change in semantics, then this
> already met resistance on the numpy list. Perhaps a buffer-unsigned-
> indices-only compiler directive.
>
>I was thinking of the case that bounds checking is turned off, in
>which case we already have a change in semantics, right? I could see
>this being a distinct compiler directive though, that's probably the
>way to go.
>
>> (However I think that it is possible to write your code using
> unsigneds so that you use unsigned everywhere instead of signed,
> and then this comes automatically...)
>
>> I don't care too much about constants, they're not likely to be
> used in performance critical code I think.
>
>Constants will be optimized away. But if I write "i+1" where i is an
>unsigned int, the result is still signed.
>
>>
> Dag Sverre Seljebotn
>
>> -----Original Message-----
> From: Robert Bradshaw <robertwb at math.washington.edu>
> Date: Sunday, Aug 17, 2008 6:55 am
> Subject: [Cython] Boundchecking question
> To: Cython-dev <cython-dev at codespeak.net>Reply-To: cython-
> dev at codespeak.net
>
>> I've been playing with the (very cool!) buffer stuff Dag did getting
>> ready for
More information about the Cython-dev
mailing list