[llvm-dev] Complex proposal v3 + roundtable agenda

Steve (Numerics) Canon via llvm-dev
Fri, 04 Dec 2020 19:23:51 -0000

(Late to the party)

I think there’s a lot of good questions in this thread, but I also want Florian
to get started landing some patches and then everyone can iterate on that.

Slight pushback on this one question:


> On Nov 19, 2020, at 18:11, Cameron McInally via llvm-dev <llvm-dev at
lists.llvm.org> wrote:

>> On Wed, Nov 18, 2020 at 4:47 PM Krzysztof Parzyszek via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> Complex type would pose another issue for vectorization: in general
it's better to have a vector of the real parts and a vector of the imaginary
parts for the purpose of arithmetic, than having vectors of complex elements
(i.e. real and imaginary parts interleaved).
>
> Is that universally true? I think it depends on the target. Let's take
> Florian's FCMLA example. The inputs and output are interleaved. And if
> you need just the reals/imags from an interleaved vector for something
> else, LD2/ST2 should be pretty fast on recent chips.

FCMLA makes it so _if your data is already interleaved and you can’t change it_,
you can still operate efficiently in that format. But if you have control, and
you’re doing anything beyond basic arithmetic, it’s still advantageous to use a
planar [SoA] layout instead of interleaved [AoS]. For a simple example, if you
want to vectorize a complex exponential function, you’ll want to compute cos and
sin of the imaginary parts, and exp of the real parts—FCMLA doesn’t help here.

So Florian’s proposal:

> In the short-term I think to get things rolling it would be good to focus
on the layout as defined by frontends (e.g. Clang/C++).

Sounds great to me.

– Steve