Re: Auto-vectorization speeds up multiplication of large-precision numerics

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Amit Khandekar <amitdkhan.pg@gmail.com>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-09-07T05:53:22Z
Lists: pgsql-hackers
I wrote:
> I made some cosmetic changes to this and committed it.

BTW, poking at this further, it seems that the patch only really
works for gcc.  clang accepts the -ftree-vectorize switch, but
looking at the generated asm shows that it does nothing useful.
Which is odd, because clang does do loop vectorization.

I tried adding -Rpass-analysis=loop-vectorize and got

numeric.c:8341:3: remark: loop not vectorized: could not determine number of loop iterations [-Rpass-analysis=loop-vectorize]
                for (i2 = 0; i2 <= i; i2++)
                ^

which is interesting but I don't know how to proceed further.

			regards, tom lane



Commits

  1. Use plain memset() in numeric.c, not MemSet and friends.

  2. Frob numeric.c loop so that clang will auto-vectorize it too.

  3. Apply auto-vectorization to the inner loop of numeric multiplication.

  4. Split Makefile symbol CFLAGS_VECTOR into two symbols.