On Mar 1, 2010, at 4:35 PM, Tom Lane wrote:

> Theo Schlossnagle <je...@omniti.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






-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to