* [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
@ 2020-03-17 4:46 Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 1/3] x86: Refactor platform support in cpu_features Prem Mallappa via Libc-alpha
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Prem Mallappa via Libc-alpha @ 2020-03-17 4:46 UTC (permalink / raw)
To: libc-alpha, codonell, schwab, FWeimer; +Cc: Prem Mallappa
From: Prem Mallappa <Premachandra.Mallappa@amd.com>
Hello Glibc Community,
== (cross posting to libc-alpha, apologies for the spam) ==
This is in response to
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=24979
[2] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
[3] https://sourceware.org/bugzilla/show_bug.cgi?id=23249
It is clear that there is no panacea here. However,
here is an attempt to address them in parts.
From [1], enable customers who already have
"haswell" libs and has seen perf benifits by loading
them on AMD Zen.
(Load libraries by placing them in LD_LIBRARY_PATH/zen
or by a symbolic link zen->haswell)
From [2] and [3]
And, A futuristic generic-avx2/generic-avx libs,
enables OS vendors to supply an optimized set.
And haswell/zen are really a superset, hence
keeping it made sense.
By this we would like to open it up for discussion
The haswell/zen can be intel/amd
(or any other name, and supply ifunc based loading
internally)
Prem Mallappa (3):
x86: Refactor platform support in cpu_features
x86: Add AMD Zen and AVX2/AVX platform support
x86: test to load from PLATFORM path
sysdeps/x86/cpu-features.c | 113 ++++++++++++++++++++++---------------
sysdeps/x86_64/Makefile | 3 +-
2 files changed, 69 insertions(+), 47 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] x86: Refactor platform support in cpu_features
2020-03-17 4:46 [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Prem Mallappa via Libc-alpha
@ 2020-03-17 4:46 ` Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 2/3] x86: Add AMD Zen and AVX2/AVX platform support Prem Mallappa via Libc-alpha
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Prem Mallappa via Libc-alpha @ 2020-03-17 4:46 UTC (permalink / raw)
To: libc-alpha, codonell, schwab, FWeimer; +Cc: Prem Mallappa
From: Prem Mallappa <Premachandra.Mallappa@amd.com>
This is a preliminary support to have platform
for AMD processors.
Signed-off-by: Prem Mallappa <Premachandra.Mallappa@amd.com>
---
sysdeps/x86/cpu-features.c | 99 ++++++++++++++++++++------------------
1 file changed, 53 insertions(+), 46 deletions(-)
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
index 81a170a819..a36f385976 100644
--- a/sysdeps/x86/cpu-features.c
+++ b/sysdeps/x86/cpu-features.c
@@ -302,6 +302,58 @@ _Static_assert (((index_arch_Fast_Unaligned_Load
== index_arch_Fast_Copy_Backward)),
"Incorrect index_arch_Fast_Unaligned_Load");
+static void
+set_platform (struct cpu_features *cpu_features)
+{
+#ifdef __x86_64__
+ const char *platform = NULL;
+
+ GLRO(dl_hwcap) = HWCAP_X86_64;
+
+ if (cpu_features->basic.kind == arch_kind_intel)
+ {
+ if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable)
+ && CPU_FEATURES_CPU_P (cpu_features, AVX512CD))
+ {
+ if (CPU_FEATURES_CPU_P (cpu_features, AVX512ER))
+ {
+ if (CPU_FEATURES_CPU_P (cpu_features, AVX512PF))
+ platform = "xeon_phi";
+ }
+ else
+ {
+ if (CPU_FEATURES_CPU_P (cpu_features, AVX512BW)
+ && CPU_FEATURES_CPU_P (cpu_features, AVX512DQ)
+ && CPU_FEATURES_CPU_P (cpu_features, AVX512VL))
+ GLRO(dl_hwcap) |= HWCAP_X86_AVX512_1;
+ }
+ }
+
+ if (platform == NULL
+ && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable)
+ && CPU_FEATURES_ARCH_P (cpu_features, FMA_Usable)
+ && CPU_FEATURES_CPU_P (cpu_features, BMI1)
+ && CPU_FEATURES_CPU_P (cpu_features, BMI2)
+ && CPU_FEATURES_CPU_P (cpu_features, LZCNT)
+ && CPU_FEATURES_CPU_P (cpu_features, MOVBE)
+ && CPU_FEATURES_CPU_P (cpu_features, POPCNT))
+ platform = "haswell";
+ }
+
+ if (platform != NULL)
+ GLRO(dl_platform) = platform;
+#else
+ GLRO(dl_hwcap) = 0;
+ if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
+ GLRO(dl_hwcap) |= HWCAP_X86_SSE2;
+
+ if (CPU_FEATURES_ARCH_P (cpu_features, I686))
+ GLRO(dl_platform) = "i686";
+ else if (CPU_FEATURES_ARCH_P (cpu_features, I586))
+ GLRO(dl_platform) = "i586";
+#endif
+}
+
static inline void
init_cpu_features (struct cpu_features *cpu_features)
{
@@ -506,52 +558,7 @@ no_cpuid:
GLRO(dl_hwcap_mask) = HWCAP_IMPORTANT;
#endif
-#ifdef __x86_64__
- GLRO(dl_hwcap) = HWCAP_X86_64;
- if (cpu_features->basic.kind == arch_kind_intel)
- {
- const char *platform = NULL;
-
- if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable)
- && CPU_FEATURES_CPU_P (cpu_features, AVX512CD))
- {
- if (CPU_FEATURES_CPU_P (cpu_features, AVX512ER))
- {
- if (CPU_FEATURES_CPU_P (cpu_features, AVX512PF))
- platform = "xeon_phi";
- }
- else
- {
- if (CPU_FEATURES_CPU_P (cpu_features, AVX512BW)
- && CPU_FEATURES_CPU_P (cpu_features, AVX512DQ)
- && CPU_FEATURES_CPU_P (cpu_features, AVX512VL))
- GLRO(dl_hwcap) |= HWCAP_X86_AVX512_1;
- }
- }
-
- if (platform == NULL
- && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable)
- && CPU_FEATURES_ARCH_P (cpu_features, FMA_Usable)
- && CPU_FEATURES_CPU_P (cpu_features, BMI1)
- && CPU_FEATURES_CPU_P (cpu_features, BMI2)
- && CPU_FEATURES_CPU_P (cpu_features, LZCNT)
- && CPU_FEATURES_CPU_P (cpu_features, MOVBE)
- && CPU_FEATURES_CPU_P (cpu_features, POPCNT))
- platform = "haswell";
-
- if (platform != NULL)
- GLRO(dl_platform) = platform;
- }
-#else
- GLRO(dl_hwcap) = 0;
- if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
- GLRO(dl_hwcap) |= HWCAP_X86_SSE2;
-
- if (CPU_FEATURES_ARCH_P (cpu_features, I686))
- GLRO(dl_platform) = "i686";
- else if (CPU_FEATURES_ARCH_P (cpu_features, I586))
- GLRO(dl_platform) = "i586";
-#endif
+ set_platform(cpu_features);
#if CET_ENABLED
# if HAVE_TUNABLES
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] x86: Add AMD Zen and AVX2/AVX platform support
2020-03-17 4:46 [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 1/3] x86: Refactor platform support in cpu_features Prem Mallappa via Libc-alpha
@ 2020-03-17 4:46 ` Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 3/3] x86: test to load from PLATFORM path Prem Mallappa via Libc-alpha
2020-03-17 9:02 ` [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Florian Weimer
3 siblings, 0 replies; 9+ messages in thread
From: Prem Mallappa via Libc-alpha @ 2020-03-17 4:46 UTC (permalink / raw)
To: libc-alpha, codonell, schwab, FWeimer; +Cc: Prem Mallappa
From: Prem Mallappa <Premachandra.Mallappa@amd.com>
Priority as below
- AVX512
- Haswell/Zen as they are superset of AVX2/AVX
- AVX2
- AVX
Signed-off-by: Prem Mallappa <Premachandra.Mallappa@amd.com>
---
sysdeps/x86/cpu-features.c | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
index a36f385976..2097107968 100644
--- a/sysdeps/x86/cpu-features.c
+++ b/sysdeps/x86/cpu-features.c
@@ -328,20 +328,34 @@ set_platform (struct cpu_features *cpu_features)
GLRO(dl_hwcap) |= HWCAP_X86_AVX512_1;
}
}
+ }
- if (platform == NULL
- && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable)
- && CPU_FEATURES_ARCH_P (cpu_features, FMA_Usable)
- && CPU_FEATURES_CPU_P (cpu_features, BMI1)
- && CPU_FEATURES_CPU_P (cpu_features, BMI2)
- && CPU_FEATURES_CPU_P (cpu_features, LZCNT)
- && CPU_FEATURES_CPU_P (cpu_features, MOVBE)
- && CPU_FEATURES_CPU_P (cpu_features, POPCNT))
+ if (platform == NULL
+ && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable)
+ && CPU_FEATURES_ARCH_P (cpu_features, FMA_Usable)
+ && CPU_FEATURES_CPU_P (cpu_features, BMI1)
+ && CPU_FEATURES_CPU_P (cpu_features, BMI2)
+ && CPU_FEATURES_CPU_P (cpu_features, LZCNT)
+ && CPU_FEATURES_CPU_P (cpu_features, MOVBE)
+ && CPU_FEATURES_CPU_P (cpu_features, POPCNT))
+ {
+ if (cpu_features->basic.kind == arch_kind_intel)
platform = "haswell";
+ else if (cpu_features->basic.kind == arch_kind_amd)
+ platform = "zen";
}
+ if (platform == NULL
+ && CPU_FEATURES_ARCH_P (cpu_features, AVX2_Usable))
+ platform = "generic-avx2";
+
+ if (platform == NULL
+ && CPU_FEATURES_ARCH_P (cpu_features, AVX_Usable))
+ platform = "generic-avx";
+
if (platform != NULL)
GLRO(dl_platform) = platform;
+
#else
GLRO(dl_hwcap) = 0;
if (CPU_FEATURES_CPU_P (cpu_features, SSE2))
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] x86: test to load from PLATFORM path
2020-03-17 4:46 [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 1/3] x86: Refactor platform support in cpu_features Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 2/3] x86: Add AMD Zen and AVX2/AVX platform support Prem Mallappa via Libc-alpha
@ 2020-03-17 4:46 ` Prem Mallappa via Libc-alpha
2020-03-17 9:02 ` [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Florian Weimer
3 siblings, 0 replies; 9+ messages in thread
From: Prem Mallappa via Libc-alpha @ 2020-03-17 4:46 UTC (permalink / raw)
To: libc-alpha, codonell, schwab, FWeimer; +Cc: Prem Mallappa
From: Prem Mallappa <Premachandra.Mallappa@amd.com>
Test will load modifier library from new
PLATFORM path as well.
Signed-off-by: Prem Mallappa <Premachandra.Mallappa@amd.com>
---
sysdeps/x86_64/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
index d51cf03ac9..b09881b2d7 100644
--- a/sysdeps/x86_64/Makefile
+++ b/sysdeps/x86_64/Makefile
@@ -71,6 +71,7 @@ CFLAGS-tst-platformmod-2.c = -mno-avx
LDFLAGS-tst-platformmod-2.so = -Wl,-soname,tst-platformmod-2.so
$(objpfx)tst-platform-1: $(objpfx)tst-platformmod-1.so
$(objpfx)tst-platform-1.out: $(objpfx)x86_64/tst-platformmod-2.so
+$(objpfx)tst-platform-1.out: $(objpfx)zen/tst-platformmod-2.so
# Turn off AVX512F_Usable and AVX2_Usable so that GLRO(dl_platform) is
# always set to x86_64.
tst-platform-1-ENV = LD_PRELOAD=$(objpfx)\$$PLATFORM/tst-platformmod-2.so \
@@ -161,7 +162,7 @@ do-tests-clean common-mostlyclean: tst-x86_64-1-clean
tst-x86_64-1-clean:
-rm -rf $(objpfx)x86_64
-$(objpfx)x86_64/tst-platformmod-2.os: $(objpfx)tst-platformmod-2.os
+$(objpfx)%/tst-platformmod-2.os: $(objpfx)tst-platformmod-2.os
$(make-target-directory)
rm -f $@
ln $< $@
--
2.20.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
2020-03-17 4:46 [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Prem Mallappa via Libc-alpha
` (2 preceding siblings ...)
2020-03-17 4:46 ` [PATCH 3/3] x86: test to load from PLATFORM path Prem Mallappa via Libc-alpha
@ 2020-03-17 9:02 ` Florian Weimer
2020-03-17 13:17 ` Carlos O'Donell via Libc-alpha
3 siblings, 1 reply; 9+ messages in thread
From: Florian Weimer @ 2020-03-17 9:02 UTC (permalink / raw)
To: Prem Mallappa via Libc-alpha
Cc: codonell, Michael Matz, Prem Mallappa, Prem Mallappa, schwab
* Prem Mallappa via Libc-alpha:
> From: Prem Mallappa <Premachandra.Mallappa@amd.com>
>
> Hello Glibc Community,
>
> == (cross posting to libc-alpha, apologies for the spam) ==
>
> This is in response to
>
> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=24979
> [2] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
> [3] https://sourceware.org/bugzilla/show_bug.cgi?id=23249
>
> It is clear that there is no panacea here. However,
> here is an attempt to address them in parts.
>
> From [1], enable customers who already have
> "haswell" libs and has seen perf benifits by loading
> them on AMD Zen.
> (Load libraries by placing them in LD_LIBRARY_PATH/zen
> or by a symbolic link zen->haswell)
>
> From [2] and [3]
> And, A futuristic generic-avx2/generic-avx libs,
> enables OS vendors to supply an optimized set.
> And haswell/zen are really a superset, hence
> keeping it made sense.
>
> By this we would like to open it up for discussion
> The haswell/zen can be intel/amd
> (or any other name, and supply ifunc based loading
> internally)
I think we cannot use the platform subdirectory for that because there
is just a single one. If we want a Intel/AMD split, we need to
enhance the dynamic loader to try the CPU vendor directory first, and
then fallback to a shared subdirectory. Most distributions do not
want to test and ship binaries specific to Intel or AMD CPUs.
That's a generic loader change which will need some time to implement,
but we can work on something else in the meantime:
We need to check for *all* relevant CPU flags such code can use and,
and only enable a subdirectory if they are present. This is necessary
because virtualization and microcode updates can disable individual
CPU features.
For the new shared subdirectory, I think we should not restrict
ourselves just to AVX2, but we should also include useful extensions
that are in practice always implemented in silicon along with AVX2,
but can be separately tweaked.
This seems to be a reasonable list of CPU feature flags to start with:
3DNOW
3DNOWEXT
3DNOWPREFETCH
ABM
ADX
AES
AVX
AVX2
BMI
BMI2
CET
CLFLUSH
CLFLUSHOPT
CLWB
CLZERO
CMPXCHG16B
ERMS
F16C
FMA
FMA4
FSGSBASE
FSRM
FXSR
HLE
LAHF
LZCNT
MOVBE
MWAITX
PCLMUL
PCOMMIT
PKU
POPCNT
PREFETCHW
RDPID
RDRAND
RDSEED
RDTSCP
RTM
SHA
SSE3
SSE4.1
SSE4.2
SSE4A
SSSE3
TSC
XGETBV
XSAVE
XSAVEC
XSAVEOPT
XSAVES
You (as in AMD) need to go through this list and come back with the
subset that you think should be enabled for current and future CPUs,
based on your internal roadmap and known errata for existing CPUs. We
do not need a rationale for how you filter down the list, merely the
outcome.
(I already have the trimmed-down list from Intel.)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
2020-03-17 9:02 ` [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Florian Weimer
@ 2020-03-17 13:17 ` Carlos O'Donell via Libc-alpha
2020-03-17 19:27 ` Adhemerval Zanella via Libc-alpha
0 siblings, 1 reply; 9+ messages in thread
From: Carlos O'Donell via Libc-alpha @ 2020-03-17 13:17 UTC (permalink / raw)
To: Florian Weimer, Prem Mallappa via Libc-alpha
Cc: codonell, Michael Matz, Prem Mallappa, Prem Mallappa, schwab
On 3/17/20 5:02 AM, Florian Weimer wrote:
> * Prem Mallappa via Libc-alpha:
>
>> From: Prem Mallappa <Premachandra.Mallappa@amd.com>
>>
>> Hello Glibc Community,
>>
>> == (cross posting to libc-alpha, apologies for the spam) ==
>>
>> This is in response to
>>
>> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=24979
>> [2] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
>> [3] https://sourceware.org/bugzilla/show_bug.cgi?id=23249
>>
>> It is clear that there is no panacea here. However,
>> here is an attempt to address them in parts.
>>
>> From [1], enable customers who already have
>> "haswell" libs and has seen perf benifits by loading
>> them on AMD Zen.
>> (Load libraries by placing them in LD_LIBRARY_PATH/zen
>> or by a symbolic link zen->haswell)
>>
>> From [2] and [3]
>> And, A futuristic generic-avx2/generic-avx libs,
>> enables OS vendors to supply an optimized set.
>> And haswell/zen are really a superset, hence
>> keeping it made sense.
>>
>> By this we would like to open it up for discussion
>> The haswell/zen can be intel/amd
>> (or any other name, and supply ifunc based loading
>> internally)
>
> I think we cannot use the platform subdirectory for that because there
> is just a single one. If we want a Intel/AMD split, we need to
> enhance the dynamic loader to try the CPU vendor directory first, and
> then fallback to a shared subdirectory. Most distributions do not
> want to test and ship binaries specific to Intel or AMD CPUs.
I agree. The additional burden on testing, maintaining, and supporting
distinct libraries is not feasible.
> That's a generic loader change which will need some time to implement,
> but we can work on something else in the meantime:
>
> We need to check for *all* relevant CPU flags such code can use and,
> and only enable a subdirectory if they are present. This is necessary
> because virtualization and microcode updates can disable individual
> CPU features.
Agreed. This is the only sensible plan. The platform directories already
imply some of this, but it's not well structured.
> For the new shared subdirectory, I think we should not restrict
> ourselves just to AVX2, but we should also include useful extensions
> that are in practice always implemented in silicon along with AVX2,
> but can be separately tweaked.
Agreed.
> This seems to be a reasonable list of CPU feature flags to start with:
>
> 3DNOW
> 3DNOWEXT
> 3DNOWPREFETCH
> ABM
> ADX
> AES
> AVX
> AVX2
> BMI
> BMI2
> CET
> CLFLUSH
> CLFLUSHOPT
> CLWB
> CLZERO
> CMPXCHG16B
> ERMS
> F16C
> FMA
> FMA4
> FSGSBASE
> FSRM
> FXSR
> HLE
> LAHF
> LZCNT
> MOVBE
> MWAITX
> PCLMUL
> PCOMMIT
> PKU
> POPCNT
> PREFETCHW
> RDPID
> RDRAND
> RDSEED
> RDTSCP
> RTM
> SHA
> SSE3
> SSE4.1
> SSE4.2
> SSE4A
> SSSE3
> TSC
> XGETBV
> XSAVE
> XSAVEC
> XSAVEOPT
> XSAVES
>
> You (as in AMD) need to go through this list and come back with the
> subset that you think should be enabled for current and future CPUs,
> based on your internal roadmap and known errata for existing CPUs. We
> do not need a rationale for how you filter down the list, merely the
> outcome.
And this is the hard part that we can't solve without AMD's help.
Even if you ignore "future CPUs" it would be useful to get this list
for all current CPUs given your architectural knowledge, errata, and
other factors like microcode, that covers the currently released CPUs.
> (I already have the trimmed-down list from Intel.)
>
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
2020-03-17 13:17 ` Carlos O'Donell via Libc-alpha
@ 2020-03-17 19:27 ` Adhemerval Zanella via Libc-alpha
2020-03-17 21:37 ` Carlos O'Donell via Libc-alpha
0 siblings, 1 reply; 9+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-03-17 19:27 UTC (permalink / raw)
To: libc-alpha
On 17/03/2020 10:17, Carlos O'Donell via Libc-alpha wrote:
> On 3/17/20 5:02 AM, Florian Weimer wrote:
>> * Prem Mallappa via Libc-alpha:
>>
>>> From: Prem Mallappa <Premachandra.Mallappa@amd.com>
>>>
>>> Hello Glibc Community,
>>>
>>> == (cross posting to libc-alpha, apologies for the spam) ==
>>>
>>> This is in response to
>>>
>>> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=24979
>>> [2] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
>>> [3] https://sourceware.org/bugzilla/show_bug.cgi?id=23249
>>>
>>> It is clear that there is no panacea here. However,
>>> here is an attempt to address them in parts.
>>>
>>> From [1], enable customers who already have
>>> "haswell" libs and has seen perf benifits by loading
>>> them on AMD Zen.
>>> (Load libraries by placing them in LD_LIBRARY_PATH/zen
>>> or by a symbolic link zen->haswell)
>>>
>>> From [2] and [3]
>>> And, A futuristic generic-avx2/generic-avx libs,
>>> enables OS vendors to supply an optimized set.
>>> And haswell/zen are really a superset, hence
>>> keeping it made sense.
>>>
>>> By this we would like to open it up for discussion
>>> The haswell/zen can be intel/amd
>>> (or any other name, and supply ifunc based loading
>>> internally)
>>
>> I think we cannot use the platform subdirectory for that because there
>> is just a single one. If we want a Intel/AMD split, we need to
>> enhance the dynamic loader to try the CPU vendor directory first, and
>> then fallback to a shared subdirectory. Most distributions do not
>> want to test and ship binaries specific to Intel or AMD CPUs.
>
> I agree. The additional burden on testing, maintaining, and supporting
> distinct libraries is not feasible.
>
>> That's a generic loader change which will need some time to implement,
>> but we can work on something else in the meantime:
>>
>> We need to check for *all* relevant CPU flags such code can use and,
>> and only enable a subdirectory if they are present. This is necessary
>> because virtualization and microcode updates can disable individual
>> CPU features.
>
> Agreed. This is the only sensible plan. The platform directories already
> imply some of this, but it's not well structured.
Which should be our policy regarding the platform name over releases?
Should the names set in previous release being supported in a
compatibility manner or should it not be constraint (as for tunables)
and subject of change?
If the former, with a defined subset of the CPU features flags it might
be possible to share folder over x86 chips without using chips release
names.
>
>> For the new shared subdirectory, I think we should not restrict
>> ourselves just to AVX2, but we should also include useful extensions
>> that are in practice always implemented in silicon along with AVX2,
>> but can be separately tweaked.
>
> Agreed.
>
>> This seems to be a reasonable list of CPU feature flags to start with:
>>
>> 3DNOW
>> 3DNOWEXT
>> 3DNOWPREFETCH
>> ABM
>> ADX
>> AES
>> AVX
>> AVX2
>> BMI
>> BMI2
>> CET
>> CLFLUSH
>> CLFLUSHOPT
>> CLWB
>> CLZERO
>> CMPXCHG16B
>> ERMS
>> F16C
>> FMA
>> FMA4
>> FSGSBASE
>> FSRM
>> FXSR
>> HLE
>> LAHF
>> LZCNT
>> MOVBE
>> MWAITX
>> PCLMUL
>> PCOMMIT
>> PKU
>> POPCNT
>> PREFETCHW
>> RDPID
>> RDRAND
>> RDSEED
>> RDTSCP
>> RTM
>> SHA
>> SSE3
>> SSE4.1
>> SSE4.2
>> SSE4A
>> SSSE3
>> TSC
>> XGETBV
>> XSAVE
>> XSAVEC
>> XSAVEOPT
>> XSAVES
>>
>> You (as in AMD) need to go through this list and come back with the
>> subset that you think should be enabled for current and future CPUs,
>> based on your internal roadmap and known errata for existing CPUs. We
>> do not need a rationale for how you filter down the list, merely the
>> outcome.
>
> And this is the hard part that we can't solve without AMD's help.
>
> Even if you ignore "future CPUs" it would be useful to get this list
> for all current CPUs given your architectural knowledge, errata, and
> other factors like microcode, that covers the currently released CPUs.
So the question is how should be move forward: let the chip vendor
(Intel, AMD, etc.) define its own naming scheme based on its own
chip roadmap, or create subsets of features to set a common naming
folder (as suggested by Richard Biener on BZ#24080 [1])?
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
2020-03-17 19:27 ` Adhemerval Zanella via Libc-alpha
@ 2020-03-17 21:37 ` Carlos O'Donell via Libc-alpha
2020-03-27 14:26 ` Florian Weimer
0 siblings, 1 reply; 9+ messages in thread
From: Carlos O'Donell via Libc-alpha @ 2020-03-17 21:37 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha
On 3/17/20 3:27 PM, Adhemerval Zanella via Libc-alpha wrote:
> On 17/03/2020 10:17, Carlos O'Donell via Libc-alpha wrote:
>> Agreed. This is the only sensible plan. The platform directories already
>> imply some of this, but it's not well structured.
>
> Which should be our policy regarding the platform name over releases?
> Should the names set in previous release being supported in a
> compatibility manner or should it not be constraint (as for tunables)
> and subject of change?
It should be subject to change just like tunables.
It should be an optimization, and not a requirement, and applications
should always provide a fallback implementaiton to allow the application
to load.
Failure to load the libraries *may* result in a failure to start the
application and we need to be OK with that. That is to say that a
particularly package may only ship an optimized library (going against
the recommendation).
We should verify that downstream distributions can use /etc/ld.so.conf
as a way to add back directories into the search of the existing
additional multilib search directories e.g. Add back /lib64/haswell
for a few years.
Does that answer your question?
> If the former, with a defined subset of the CPU features flags it might
> be possible to share folder over x86 chips without using chips release
> names.
Yes.
>> And this is the hard part that we can't solve without AMD's help.
>>
>> Even if you ignore "future CPUs" it would be useful to get this list
>> for all current CPUs given your architectural knowledge, errata, and
>> other factors like microcode, that covers the currently released CPUs.
>
> So the question is how should be move forward: let the chip vendor
> (Intel, AMD, etc.) define its own naming scheme based on its own
> chip roadmap, or create subsets of features to set a common naming
> folder (as suggested by Richard Biener on BZ#24080 [1])?
In the end I think we'll want:
(a) Try CPU vendor directories first.
- Each vendor should name their directories and the explicit
compiler options to target them (printed by LD_DEBUG).
(b) Try shared directories second.
- Based on a common set of identified features.
- Compiler options to target the shared set should be explicitly
stated (printed by LD_DEBUG).
My understanding is that Florian is asking for help with (b)
to identify what things should be enabled for current CPUs, and
that we'll compare that list to the Intel list and make a common
shared directory that the downstream distributions can used
for the most optimized library we can have in common.
What we can do:
- Cleanup the generic code to allow a CPU vendor split?
- We have a mix of hwcap bit handling and list handling
for platforms. This is also a bit messy.
- Allow vendors to drop in their CPU vendor search list
ahead of the shared list, again based on feature presence.
- Prepare the code for a shared common directory based on
some shared subset of features, and enable it only if
those features are present. Today doing this is a bit
messy in cpu-features.c.
> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=24080
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX
2020-03-17 21:37 ` Carlos O'Donell via Libc-alpha
@ 2020-03-27 14:26 ` Florian Weimer
0 siblings, 0 replies; 9+ messages in thread
From: Florian Weimer @ 2020-03-27 14:26 UTC (permalink / raw)
To: Carlos O'Donell via Libc-alpha
* Carlos O'Donell via Libc-alpha:
> On 3/17/20 3:27 PM, Adhemerval Zanella via Libc-alpha wrote:
>> On 17/03/2020 10:17, Carlos O'Donell via Libc-alpha wrote:
>>> Agreed. This is the only sensible plan. The platform directories already
>>> imply some of this, but it's not well structured.
>>
>> Which should be our policy regarding the platform name over releases?
>> Should the names set in previous release being supported in a
>> compatibility manner or should it not be constraint (as for tunables)
>> and subject of change?
>
> It should be subject to change just like tunables.
I disagree; for a subset of the directories, we should guarantee
stability.
> It should be an optimization, and not a requirement, and applications
> should always provide a fallback implementaiton to allow the application
> to load.
Agreed. Programmers need to assume that future glibc versions may
stop selecting certain subdirectories. However, I'm not sure if we
can suddenly start selecting directories on systems where we did not
do so before.
> We should verify that downstream distributions can use /etc/ld.so.conf
> as a way to add back directories into the search of the existing
> additional multilib search directories e.g. Add back /lib64/haswell
> for a few years.
I don't think that works.
> In the end I think we'll want:
>
> (a) Try CPU vendor directories first.
> - Each vendor should name their directories and the explicit
> compiler options to target them (printed by LD_DEBUG).
>
> (b) Try shared directories second.
> - Based on a common set of identified features.
> - Compiler options to target the shared set should be explicitly
> stated (printed by LD_DEBUG).
>
> My understanding is that Florian is asking for help with (b)
> to identify what things should be enabled for current CPUs, and
> that we'll compare that list to the Intel list and make a common
> shared directory that the downstream distributions can used
> for the most optimized library we can have in common.
The results for (b) also feed into (a) to some extent because if
research for (b) reveals that certain CPU features have been disabled
by microupdate updates, we probably do not want them for (a), either.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-03-27 14:26 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-17 4:46 [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 1/3] x86: Refactor platform support in cpu_features Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 2/3] x86: Add AMD Zen and AVX2/AVX platform support Prem Mallappa via Libc-alpha
2020-03-17 4:46 ` [PATCH 3/3] x86: test to load from PLATFORM path Prem Mallappa via Libc-alpha
2020-03-17 9:02 ` [PATCH 0/3] RFC: Platform Support for AMD Zen and AVX2/AVX Florian Weimer
2020-03-17 13:17 ` Carlos O'Donell via Libc-alpha
2020-03-17 19:27 ` Adhemerval Zanella via Libc-alpha
2020-03-17 21:37 ` Carlos O'Donell via Libc-alpha
2020-03-27 14:26 ` Florian Weimer
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).