public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Paul Iannetta <piannetta@kalrayinc.com>
To: Tamar Christina <Tamar.Christina@arm.com>
Cc: Richard Biener <richard.guenther@gmail.com>,
	Sylvain Noiry <snoiry@kalrayinc.com>,
	gcc@gcc.gnu.org, sylvain.noiry@hotmail.fr
Subject: Re: Complex numbers support: discussions summary
Date: Tue, 26 Sep 2023 11:40:20 +0200	[thread overview]
Message-ID: <20230926094020.fol3nglpv5rwhfya@ws2202.lin.mbt.kalray.eu> (raw)
In-Reply-To: <VI1PR08MB5325433AA4360787EBB6D4B8FFC3A@VI1PR08MB5325.eurprd08.prod.outlook.com>

On Tue, Sep 26, 2023 at 09:28:08AM +0000, Tamar Christina wrote:
> > -----Original Message-----
> > From: Gcc <gcc-bounces+tamar.christina=arm.com@gcc.gnu.org> On Behalf
> > Of Paul Iannetta via Gcc
> > Sent: Tuesday, September 26, 2023 9:54 AM
> > To: Richard Biener <richard.guenther@gmail.com>
> > Cc: Sylvain Noiry <snoiry@kalrayinc.com>; gcc@gcc.gnu.org;
> > sylvain.noiry@hotmail.fr
> > Subject: Re: Complex numbers support: discussions summary
> > 
> > On Tue, Sep 26, 2023 at 09:30:21AM +0200, Richard Biener via Gcc wrote:
> > > On Mon, Sep 25, 2023 at 5:17 PM Sylvain Noiry via Gcc <gcc@gcc.gnu.org>
> > wrote:
> > > >
> > > > Hi,
> > > >
> > > > We had very interesting discussions during our presentation with
> > > > Paul on the support of complex numbers in gcc at the Cauldron.
> > > >
> > > > Thank you all for your participation !
> > > >
> > > > Here is a small summary from our viewpoint:
> > > >
> > > > - Replace CONCAT with a backend defined internal representation in
> > > > RTL
> > > > --> No particular problems
> > > >
> > > > - Allow backend to write patterns for operation on complex modes
> > > > --> No particular problems
> > > >
> > > > - Conditional lowering depending on whether a pattern exists or not
> > > > --> Concerns when the vectorization of split complex operations
> > > > --> performs
> > > > better
> > > >     than not vectorized unified complex operations
> > > >
> > > > - Centralize complex lowering in cplxlower
> > > > --> No particular problems if it doesn't prevent IEEE compliance and
> > > >     optimizations (like const folding)
> > > >
> > > > - Vectorization of complex operations
> > > > --> 2 representations (interleaved and separated real/imag): cannot
> > > > impose one
> > > >     if some machines prefer the other
> > > > --> Complex are composite modes, the vectorizer assumes that the
> > > > --> inner
> > > > mode is
> > > >     scalar to do some optimizations (which ones ?)
> > > > --> Mixed split/unified complex operations cannot be vectorized
> > > > --> easely Assuming that the inner representation of complex vectors
> > > > --> is let to
> > > > target
> > > >     backends, the vectorizer doesn't know it, which prevent some
> > > > optimizations
> > > >     (which ones ?)
> > > >
> > > > - Explicit vectors of complex
> > > > --> Cplxlower cannot lower it, and moving veclower before cplxlower
> > > > --> is a
> > > > bad
> > > >     idea as it prevents some optimizations
> > > > --> Teaching cplxlower how to deal with vectors of complex seems to
> > > > --> be a
> > > >     reasonable alternative
> > > > --> Concerns about ABI or indexing if the internal representation is
> > > > --> let
> > > > to the
> > > >     backend and differs from the representation in memory
> > > >
> > > > - Impact of the current SLP pattern matching of complex operations
> > > > --> Only with -ffast-math
> > > > --> It can match user defined operations (not C99) that can be
> > > > simplified with a
> > > >     complex instruction
> > > > --> Dedicated opcode and real vector type choosen VS standard opcode
> > > > --> and
> > > > complex
> > > >     mode in our implementation
> > > > --> Need to preserve SLP pattern matching as too many applications
> > > > redefines
> > > >     complex and bypass C99 standard.
> > > > --> So need to harmonize with our implementation
> > > >
> > > > - Support of the pure imaginary type (_Imaginary)
> > > > --> Still not supported by gcc (and llvm), neither in our
> > > > --> implementation Issues comes from the fact that an imaginary is
> > > > --> not a complex with
> > > > real part
> > > >     set to 0
> > > > --> The same issue with complex multiplication by a real (which is
> > > > --> split
> > > > in the
> > > >     frontend, and our implementation hasn't changed it yet)
> > > > --> Idea: Add an attribute to the Tree complex type which specify
> > > > --> pure
> > > > real / pure
> > > >     imaginary / full complex ?
> > > >
> > > > - Fast pattern for IEEE compliant emulated operations
> > > > --> Not enough time to discuss about it
> > > >
> > > > Don't hesitate to add something or bring more precision if you want.
> > > >
> > > > As I said at the end of the presentation, we have written a paper
> > > > which explains our implementation in details. You can find it on the
> > > > wiki page of the Cauldron
> > > >
> > (https://gcc.gnu.org/wiki/cauldron2023talks?action=AttachFile&do=view&tar
> > get=Exposing+Complex+Numbers+to+Target+Back-ends+%28paper%29.pdf).
> > >
> > > Thanks for the detailed presentation at the Cauldron.
> > >
> > > My personal summary is that I'm less convinced delaying lowering is
> > > the way to go.
> > 
> > This is not only delayed lowering, if the SPN are there, there is no lowering at
> > all.
> > 
> > > I do think that if targets implement complex optabs we should use them
> > > but eventually re-discovering complex operations from lowered form is
> > > going to be more useful.
> > 
> > I would not be opposed to rediscovering complex operations but I think that
> > even though, rediscovering a + b, a - b is easy, a * b would still be doable, but
> > even a / b will be hard.  Even though, I doubt will see a hardware complex
> > division but who knows.  However, once lowered, re-associating a * b * c and
> > more complex expressions is going to be hard.
> > 
> > > That's because as you said, use of _Complex is limited and people
> > > inventing their own representation.
> > 
> > Yes, this would be a step back at first, but, proper support for _Complex would
> > probably be an incentive for library writers to take them into account.
> > 
> > > SLP vectorization can discover some ops already with the limiting
> > > factor being that we don't specifically search for only complex
> > > operations (plus we expose the result as vector operations, requiring
> > > target support for the vector ops rather than [SD]Cmode operations).
> > 
> > Our only concern with SLP is that it only works within loops.  If we want to re-
> > discover complex numbers we could either add a dedicated pass before the
> > SLP vectorizer or rely on match.pd?
> 
> SLP doesn't work in just loops. SLP works on scalar statements inside BBs starting
> from sink (constructors, stores, reductions etc).
> I think you're confusing Loop-Aware SLP and SLP (in GCC these are two different
> Passes that share much common code.
> 

Indeed, we conflated both.  Thanks for pointing this out!

Paul

> Tamar
> > 
> > >
> > > There's the gimple-isel.cc or the widen-mul pass that perform
> > > instruction selection which could be enhanced to discover scalar
> > > [SD]Cmode operations.
> > 
> > We'll have another look there.
> > 
> > Thanks,
> > Paul
> > >
> > > Richard.
> > >
> > > > Sylvain
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > >
> > 
> > 
> > 
> 
> 
> 
> 
> 





  reply	other threads:[~2023-09-26  9:40 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-25 15:15 Sylvain Noiry
2023-09-26  7:30 ` Richard Biener
2023-09-26  8:29   ` Tamar Christina
2023-09-26 10:19     ` Paul Iannetta
2023-09-26  8:53   ` Paul Iannetta
2023-09-26  9:28     ` Tamar Christina
2023-09-26  9:40       ` Paul Iannetta [this message]
2023-09-26 18:40   ` Toon Moene
2023-10-05 14:45     ` Toon Moene
2023-09-26 15:46 ` Joseph Myers
  -- strict thread matches above, loose matches on Subject: below --
2023-10-16  9:14 Sylvain Noiry
2023-10-17 20:37 ` Toon Moene
2023-10-18  7:24   ` Sylvain Noiry
2023-10-09 13:29 Sylvain Noiry
2023-09-25 14:56 Sylvain Noiry

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230926094020.fol3nglpv5rwhfya@ws2202.lin.mbt.kalray.eu \
    --to=piannetta@kalrayinc.com \
    --cc=Tamar.Christina@arm.com \
    --cc=gcc@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    --cc=snoiry@kalrayinc.com \
    --cc=sylvain.noiry@hotmail.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).