Re: Clang optimiser vs preproc.c

From: Alexander Lakhin <exclusion(at)gmail(dot)com>
To: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Clang optimiser vs preproc.c
Date: 2023-12-20 12:00:00
Message-ID: d2bf3727-bae4-3aee-65f6-caec2c4ebaa8@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello Thomas,

19.12.2023 07:20, Thomas Munro wrote:
> On Tue, Dec 19, 2023 at 11:42 AM Thomas Munro <thomas(dot)munro(at)gmail(dot)com> wrote:
>> Hrmph. Well something weird is going on, but it might indeed involve
>> me being confused about debug options of the compiler itself. How can
>> one find out which build options were used for clang/llvm compiler +
>> libraries? My earlier reports were from a little machine at home, so
>> let's try again on an i9-9900 CPU @ 3.10GHz (a bit snappier) running
>> Debian 12, again using packages from apt.llvm.org:
>>
>> 17 ~198s
>> 16 ~14s
>> 15 ~11s
> And on another Debian machine (this time a VM) also using apt.llvm.org
> packages, the huge ~3 minute time occurs with clang-16... hrrrnnnff...
> seems like there must be some other variable here that I haven't
> spotted yet...

Reproduced here, with clang-16 and clang-17 (on Ubuntu 22.04, on Fedora 39).
Namely, I tried on Ubuntu
clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04 and
clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04
from https://github.com/llvm/llvm-project/releases, as follows:
PATH=".../clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04/bin:$PATH" CC=clang-17 CPPFLAGS="-O2" sh -c "./configure -q
--enable-debug --enable-cassert && time make >make.log"
and then
PATH=".../clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04/bin:$PATH" sh -c "cd src/interfaces/ecpg/preproc; time
clang-17 -v -g -I../include -I../../../../src/interfaces/ecpg/include -I. -I../../../../src/interfaces/ecpg/ecpglib
-I../../../../src/interfaces/libpq -I../../../../src/include -O2 -D_GNU_SOURCE -c -o preproc.o preproc.c"
144.59user 0.25system 2:24.94elapsed 99%CPU (0avgtext+0avgdata 217320maxresident)k

The same is observed with clang-16 (16.0.6 20231112100510+7cbf1a259152...)
installed from http://apt.llvm.org/jammy/.
(Adding parameters -fno-slp-vectorize or -mllvm -slp-threshold=100000 or
-mllvm -slp-max-vf=3 decreases/normalizes compilation time.)

On a fresh vagrant image "fedora/39-cloud-base", I tried versions
16.0.0~rc4, 17.0.0~rc3, 17.0.6 downloaded from
https://koji.fedoraproject.org/koji/packageinfo?packageID=21848
https://koji.fedoraproject.org/koji/packageinfo?packageID=5646
All of them also give 2+ minutes for me.
But I see no slowdown with version 15.0.7 on the same VM.

Also, I see no issue with clang-18, installed on Ubuntu from apt.llvm.org.
So, as far as I can see, this anomaly started from clang-16, and ended with
clang-18.
Comparing histories of SLPVectorizer.cpp:
https://github.com/llvm/llvm-project/commits/main/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
https://github.com/llvm/llvm-project/commits/release/17.x/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
I see a commit that probably could fix the issue in the master branch (for
clang-18):
[SLP][NFC]Improve compile time by storing all nodes for the given ...

Though I still can't explain how you get ~14s with clang-16. Could you show
the exact sequence of commands you use to measure the duration?

Best regards,
Alexander

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Shlok Kyal 2023-12-20 12:22:26 Re: speed up a logical replica setup
Previous Message Andres Freund 2023-12-20 11:49:27 ci: Build standalone INSTALL file