This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add avx2 fake-capability, like tls


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]