From: | Theo Schlossnagle <jesus(at)omniti(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Theo Schlossnagle <jesus(at)omniti(dot)com>, PostgreSQL-development Development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: double and numeric conversion |
Date: | 2010-03-02 14:37:12 |
Message-ID: | B0DA3429-2865-4113-9E0F-CDAF1112B46C@omniti.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mar 1, 2010, at 4:35 PM, Tom Lane wrote:
> Theo Schlossnagle <jesus(at)omniti(dot)com> writes:
>> I'm writing some extension and I have a hot code path that has a lot of double (C type) data and needs to output NUMERIC tuple data. The current methods I can find in the code to convert sprintf the double to a buffer and then invoke the numeric_in function on them. I've profile my stuff and I'm spending (wasting) all my time in that conversion. Is there a more efficient method of converting a double into a postgres numeric value?
>
> If you're worried about micro-optimization, why are you using NUMERIC at
> all? It's no speed demon.
>
> Although you might be able to shave some cycles with a dedicated code
> path for this conversion, binary to decimal is fundamentally not cheap.
I feared that was the case. I spent an hour or so coding that last night and the speedups for me were worth it, I see a 2 fold speedup in conversion operations (or a 50% reduction in CPU cycles per conversion). The integer ones were trivial, the double one has the imperfect issue of reasonably guessing the dscale, but seems to work in my tests.
I didn't look deeply at the postgres internals to see if there was a way to do double -> numeric and integer-types -> numeric without intermediary string format. If that sort of thing is easy to leverage, I'd be happy to share the code.
--
Theo Schlossnagle
http://omniti.com/is/theo-schlossnagle
From | Date | Subject | |
---|---|---|---|
Next Message | Hiroshi Inoue | 2010-03-02 14:40:46 | Re: [GENERAL] trouble with to_char('L') |
Previous Message | Fujii Masao | 2010-03-02 13:52:16 | Re: Streaming replication and pg_xlogfile_name() |