Re: WIP: Faster Expression Processing v4
От | Andres Freund |
---|---|
Тема | Re: WIP: Faster Expression Processing v4 |
Дата | |
Msg-id | 20170327054314.qo6xsnlk7jcb7u2c@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: WIP: Faster Expression Processing v4 (Andres Freund <andres@anarazel.de>) |
Ответы |
Re: WIP: Faster Expression Processing v4
|
Список | pgsql-hackers |
On 2017-03-25 20:59:27 -0700, Andres Freund wrote: > On 2017-03-25 23:51:45 -0400, Tom Lane wrote: > > Andres Freund <andres@anarazel.de> writes: > > > On March 25, 2017 4:56:11 PM PDT, Ants Aasma <ants.aasma@eesti.ee> wrote: > > >> I haven't had the time to research this properly, but initial tests > > >> show that with GCC 6.2 adding > > >> > > >> #pragma GCC optimize ("no-crossjumping") > > >> > > >> fixes merging of the op tail jumps. > > >> > > >> Some quick and dirty benchmarking suggests that the benefit for the > > >> interpreter is about 15% (5% speedup on a workload that spends 1/3 in > > >> ExecInterpExpr). My idea of prefetching op->resnull/resvalue to local > > >> vars before the indirect jump is somewhere between a tiny benefit and > > >> no effect, certainly not worth introducing extra complexity. Clang 3.8 > > >> does the correct thing out of the box and is a couple of percent > > >> faster than GCC with the pragma. > > > > > That's large enough to be worth doing (although I recall you seeing all jumps commonalized). We should probably dothis on a per function basis however (either using pragma push option, or function attributes). > > > > Seems like it would be fine to do it on a per-file basis. > > I personally find per-function annotation ala > __attribute__((optimize("no-crossjumping"))) > cleaner anyway. I tested that, and it seems to work. > > Obviously we'd have to hide that behind a configure test. Could also do > tests based on __GNUC__ / __GNUC_MINOR__, but that seems uglier. Checking for this isn't entirely pretty - see my attached attempt at doing so. I considered hiding __attribute__((optimize("no-crossjumping"))) in execInterpExpr.c behind a macro (like PG_DISABLE_CROSSJUMPING), but I don't really think that makes things better. Comments? Greetings, Andres Freund
В списке pgsql-hackers по дате отправления: