Re: qsort (was Re: Solaris)

From: Mark Kirkwood <markir(at)paradise(dot)net(dot)nz>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: Mike Castle <dalgoda(at)ix(dot)netcom(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: qsort (was Re: Solaris)
Date: 2003-04-30 01:26:05
Message-ID: 3EAF262D.20706@paradise.net.nz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Bruce Momjian wrote:

>Let's have folks run a test program and get the results for some OS's.
>I would prefer to get some results before moving to a formalized option.
>
>
>
I retested Linux 2.4.19 (Mandrake 9) using a simple "many equal keys"
program (see below) compiled with and without BSD qsort.c from Pg source.

$ time ./testbsdqsort
0.80user 0.02system 0:00.83elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (69major+991minor)pagefaults 0swaps
$ time ./testqsort
2.08user 0.04system 0:02.13elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (105major+1967minor)pagefaults 0swaps

So for the many equal keys, BSD qsort is significantly faster.

Clearly there are other test scenarios to examine, but the many equal
keys case is important.

cheers

Mark

-- the program...

#include <stdio.h>
#include <stdlib.h>

const int elements = 1000000;
const int mod = 100;

int sortfunc( const void* n1, const void* n2 ) {
int ret;
ret = (*(int*)n1) -(*(int*)n2) ;
return ret;
}

int main(int argc, char** argv ) {
int array[elements];
int i;
for ( i = 0; i < elements; i++ ) {
array[i] = i % mod;
}
qsort( array, elements, sizeof(int),sortfunc);
return 0;
}

-- end

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message nolan 2003-04-30 01:31:51 Creating a functional index on a cast?
Previous Message elein 2003-04-30 00:35:31 fixed size columns