On Feb 11, 2008 4:06 AM, Francesc Altet <
faltet@carabos.com> wrote:
A Monday 11 February 2008, Francesc Altet escrigué:
> A Monday 11 February 2008, Charles R Harris escrigué:
Mmm, comparing my new strncmp and the one that you have implemented in
SVN, I've found a difference that can account for part of the
difference in performances. With your version of strncmp in SVN
(compare_string), these are my timings with the Opteron server:
<snip>
In [17]: np.random.seed(1)
In [18]: a = np.random.rand(10000).astype('S8')
In [19]: %timeit a.copy().sort()
100 loops, best of 3: 3.86 ms per loop
In [20]: %timeit newqsort(a.copy())
100 loops, best of 3: 3.44 ms per loop
which gives times a 5% worse. Try to use my version and tell me if it
does better:
static int inline
opt_strncmp(char *a, char *b, size_t n)
{
size_t i;
unsigned char c, d;
for (i = 0; i < n; i++) {
c = a[i]; d = b[i];
if (c != d) return c - d;
}
return 0;
}
I didn't notice any speed difference. And while returning the difference of two unsigned numbers should work with modular arithmetic when it is cast to integer, I thought the explicit return based on a compare was clearer and safer. Comparisons always work.
I've attached my working _sortmodule.c.src file so you can fool with these different changes on your machines also. This is on top of current svn.
Chuck