This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Add avx2 fake-capability, like tls
- From: Victor Rodriguez <vm dot rod25 at gmail dot com>
- To: Victor Rodriguez <victor dot rodriguez dot bahena at intel dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Tue, 10 Jan 2017 18:56:24 -0600
- Subject: Re: [PATCH] Add avx2 fake-capability, like tls
- Authentication-results: sourceware.org; auth=none
- References: <20170103195311.22870-1-victor.rodriguez.bahena@intel.com>
On Tue, Jan 3, 2017 at 1:53 PM, Victor Rodriguez
<victor.rodriguez.bahena@intel.com> wrote:
> The idea of the patch is to provide AVX2 capability to glibc, original
> patch from: Dimitri John Ledkov <dimitri.j.ledkov@intel.com>.
> It has been proved that the use of AVX2 improves the performance of current
> numerical applications. With this patch the Linux distributions will be able to
> handle AVX2 in glibc
>
> Signed-off-by: Victor Rodriguez <victor.rodriguez.bahena@intel.com>
> ---
> ChangeLog | 6 ++++++
> elf/dl-cache.c | 6 +++++-
> elf/dl-hwcaps.c | 17 +++++++++++++++++
> elf/ldconfig.c | 1 +
> 4 files changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index bbda2a7f2c..8a24afa918 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,9 @@
> +2016-12-30 Victor Rodriguez <victor.rodriguez.bahena@intel.com>
> +
> + * elf/dl-cache: Define AVX platform
> + * elf/dl-hwcaps.c : Adding avx2 cap support
> + * elf/ldconfig.c : Add avx2 to hwcap_extra
> +
> 2016-12-31 Joseph Myers <joseph@codesourcery.com>
>
> * math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
> diff --git a/elf/dl-cache.c b/elf/dl-cache.c
> index cfa335eb32..ae5047046d 100644
> --- a/elf/dl-cache.c
> +++ b/elf/dl-cache.c
> @@ -259,8 +259,9 @@ _dl_load_cache_lookup (const char *name)
> platform = 1ULL << platform;
>
> #define _DL_HWCAP_TLS_MASK (1LL << 63)
> +#define _DL_HWCAP_AVX2_MASK (1LL << 62)
> uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & GLRO(dl_hwcap_mask))
> - | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK);
> + | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK | _DL_HWCAP_AVX2_MASK);
>
> /* Only accept hwcap if it's for the right platform. */
> #define HWCAP_CHECK \
> @@ -271,6 +272,9 @@ _dl_load_cache_lookup (const char *name)
> if (_DL_PLATFORMS_COUNT \
> && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \
> && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \
> + continue; \
> + if (!HAS_ARCH_FEATURE (AVX2_Usable) && \
> + (lib->hwcap & _DL_HWCAP_AVX2_MASK)) \
> continue
> SEARCH_CACHE (cache_new);
> }
> diff --git a/elf/dl-hwcaps.c b/elf/dl-hwcaps.c
> index 6004ff264d..4e46b752e7 100644
> --- a/elf/dl-hwcaps.c
> +++ b/elf/dl-hwcaps.c
> @@ -111,6 +111,9 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
> /* For TLS enabled builds always add 'tls'. */
> ++cnt;
>
> + /* Add 'avx2' capability on x86_64 */
> + ++cnt;
> +
> /* Create temporary data structure to generate result table. */
> struct r_strlenpair temp[cnt];
> m = 0;
> @@ -163,6 +166,20 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
> temp[m].len = 3;
> ++m;
>
> + if (HAS_ARCH_FEATURE (AVX2_Usable))
> + {
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" adding avx2 cap support\n");
> + temp[m].str = "avx2";
> + temp[m].len = 4;
> + ++m;
> + }
> + else {
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" not adding avx2 cap support\n");
> + --cnt;
> + }
> +
> assert (m == cnt);
>
> /* Determine the total size of all strings together. */
> diff --git a/elf/ldconfig.c b/elf/ldconfig.c
> index 467ca8266a..ee2121786c 100644
> --- a/elf/ldconfig.c
> +++ b/elf/ldconfig.c
> @@ -1298,6 +1298,7 @@ main (int argc, char **argv)
> under which TLS support was optional. The entry is no longer needed, but
> must remain for compatibility. */
> hwcap_extra[63 - _DL_FIRST_EXTRA] = "tls";
> + hwcap_extra[62 - _DL_FIRST_EXTRA] = "avx2";
>
> set_hwcap ();
>
> --
> 2.11.0
>
Hi team
Is there any feedback from this ?
Regards