Prev: Plans for 9.1, Grouping Sets, disablingmultiqueries, contrib module for string, plpgpsm, preload dictionaries
Next: [HACKERS] [Feature request] variable declaration of anonymous composite data type in PL/pgSQL
From: Andrew Dunstan on 1 Mar 2010 15:58 Theo Schlossnagle wrote: > Hello all, > > 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? > > > float8_numeric() ? Although it uses sprintf too, by the look of it. cheers andrew -- Sent via pgsql-hackers mailing list (pgsql-hackers(a)postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
From: Tom Lane on 1 Mar 2010 16:35 Theo Schlossnagle <jesus(a)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. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers(a)postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
From: Theo Schlossnagle on 2 Mar 2010 09:37 On Mar 1, 2010, at 4:35 PM, Tom Lane wrote: > Theo Schlossnagle <jesus(a)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(a)postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
From: Yeb Havinga on 3 Mar 2010 05:01 Theo Schlossnagle wrote: > 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. > I think your code could be valuable for postgres on the fact alone that it is almost twice as fast, and probably easy to integrate and unit test. We make heavy use of the numeric data type, so I'm very interested! regards Yeb Havinga -- Sent via pgsql-hackers mailing list (pgsql-hackers(a)postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
From: Pavel Stehule on 3 Mar 2010 05:28
2010/3/3 Yeb Havinga <yebhavinga(a)gmail.com>: > Theo Schlossnagle wrote: >> >> 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. >> > > I think your code could be valuable for postgres on the fact alone that it > is almost twice as fast, and probably easy to integrate and unit test. We > make heavy use of the numeric data type, so I'm very interested! I did some test and numeric->double is about 5% faster than numeric->string->double (on my PC) Regards Pavel Stehule > > regards > Yeb Havinga > > > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers(a)postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers > -- Sent via pgsql-hackers mailing list (pgsql-hackers(a)postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers |