Hi Tom ,Matthias
    Thank you  for your explanation.Maybe future compilers will be able to
do intelligent prediction?


Thanks

Tom Lane <t...@sss.pgh.pa.us> 于2024年6月30日周日 23:23写道:

> Matthias van de Meent <boekewurm+postg...@gmail.com> writes:
> > On Sun, 30 Jun 2024, 15:56 wenhui qiu, <qiuwenhu...@gmail.com> wrote:
> >> if (unlikely(ExecutorRun_hook)),
>
> > While hooks are generally not installed by default, I would advise
> > against marking the hooks as unlikely, as that would unfairly penalize
> > the performance of extensions that do utilise this hook (or hooks in
> > general when applied to all hooks).
>
> In general, we have a policy of using likely/unlikely very sparingly,
> and only in demonstrably hot code paths.  This hook call certainly
> doesn't qualify as hot.
>
> Having said that ... something I've been wondering about is how to
> teach the compiler that error paths are unlikely.  Doing this
> across-the-board wouldn't be "sparingly", but I think surely it'd
> result in better code quality on average.  This'd be easy enough
> to do in Assert:
>
>  #define Assert(condition) \
>         do { \
> -               if (!(condition)) \
> +               if (unlikely(!(condition))) \
>                         ExceptionalCondition(#condition, __FILE__,
> __LINE__); \
>         } while (0)
>
> but on the other hand we don't care that much about micro-optimization
> of assert-enabled builds, so maybe that's not worth the trouble.  The
> real win would be if constructs like
>
>         if (trouble)
>                 ereport(ERROR, ...);
>
> could be interpreted as
>
>         if (unlikely(trouble))
>                 ereport(ERROR, ...);
>
> But I surely don't want to make thousands of such changes manually.
> And it's possible that smart compilers already realize this, using
> a heuristic that any path that ends in pg_unreachable() must be
> unlikely.  Is there a way to encourage compilers to believe that?
>
>                         regards, tom lane
>

Reply via email to