512 bit static array to vector
Bruce Carneal
bcarneal at gmail.com
Sun Jun 19 18:43:01 UTC 2022
On Sunday, 19 June 2022 at 16:56:17 UTC, kinke wrote:
> On Sunday, 19 June 2022 at 14:13:45 UTC, Bruce Carneal wrote:
>> 1) LDC requires more instructions at 512 bits. At 256
>> (x86-64-v3) they're the same.
>
> Different results (actually using a 512-bit move, not 2x256)
> with `-mattr=avx512bw`. I guess LLVM makes performance
> assumptions for the provided CPU and prefers 256-bit
> instructions.
An unexpected choice there given that x86-64-v4 requires
avx512bw. Still, glad to hear that the narrower specialization
works well. It would be part of any multi-target binary where
the programmer was concerned about maximum width-sensitive
performance across the widest range of machines.
>
> The biggest difference with gdc is an ABI difference - gdc
> returning the vector directly in an AVX512 register, whereas
> LDC returns it indirectly (sret return - caller passes a
> pointer to its pre-allocated result). That's a limitation of
> the frontend's
> https://github.com/dlang/dmd/blob/master/src/dmd/argtypes_sysv_x64.d, which supports 256-bit vectors but no 512-bit ones (the SysV ABI keeps getting extended for broader vectors...).
>
So, IIUC, gdc and ldc are not interoperable currently but will be
once the frontend is updated?
>> 3) LDC fabricates non-HW __vectors so is(someVector) has
>> diminished CT utility.
>
> I consider that useful, e.g., allowing to use a `double4`
> without having to consider CPU limitations. - I think the
> compiler should expose a trait for the largest supported vector
> size instead
I agree. Perhaps a template: maxISAVectorLengthFor(T). If we're
getting fancy we could do: maxMicroarchVectorLengthFor(T). Even
better if these work correctly in multi target compilation
scenarios and for the expanding set of types (f16, bf16, other?).
Having both variants could be useful when targetting split/paired
architectures, as AMD is fond of lately, or the SVE/RVV machines.
More information about the digitalmars-d-ldc
mailing list