i386: Add syscall to enable AMX for latest kernels

Message ID 20220620080442.735284-1-haochen.jiang@intel.com
State New
Headers
Series i386: Add syscall to enable AMX for latest kernels |

Commit Message

Haochen Jiang June 20, 2022, 8:04 a.m. UTC
  From: "Jiang, Haochen" <haochen.jiang@intel.com>

Hi all,

We need syscall to enable AMX for kernels>=5.4. It is missing in current
amx tests, which will cause test fail.

This patch aims to add them to fix this bug.

BRs,
Haochen

gcc/testsuite/ChangeLog:

	* gcc.target/i386/amx-check.h (request_perm_xtile_data):
	New function to check if AMX is usable and enable AMX.
	(main): Run test if AMX is usable.
---
 gcc/testsuite/gcc.target/i386/amx-check.h | 24 +++++++++++++++++++++++
 1 file changed, 24 insertions(+)
  

Comments

Uros Bizjak June 20, 2022, 2:53 p.m. UTC | #1
On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang <haochen.jiang@intel.com> wrote:
>
> From: "Jiang, Haochen" <haochen.jiang@intel.com>
>
> Hi all,
>
> We need syscall to enable AMX for kernels>=5.4. It is missing in current
> amx tests, which will cause test fail.

So this new code is only valid for linux & co?

Uros.

>
> This patch aims to add them to fix this bug.
>
> BRs,
> Haochen
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
>         New function to check if AMX is usable and enable AMX.
>         (main): Run test if AMX is usable.
> ---
>  gcc/testsuite/gcc.target/i386/amx-check.h | 24 +++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h b/gcc/testsuite/gcc.target/i386/amx-check.h
> index 434b0e59703..92ed8669304 100644
> --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> @@ -4,11 +4,22 @@
>  #include <stdlib.h>
>  #include <string.h>
>  #include <stdint.h>
> +#include <unistd.h>
> +#include <sys/syscall.h>
>  #ifdef DEBUG
>  #include <stdio.h>
>  #endif
>  #include "cpuid.h"
>
> +#define XFEATURE_XTILECFG      17
> +#define XFEATURE_XTILEDATA     18
> +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG | XFEATURE_MASK_XTILEDATA)
> +
> +#define ARCH_GET_XCOMP_PERM    0x1022
> +#define ARCH_REQ_XCOMP_PERM    0x1023
> +
>  /* TODO: The tmm emulation is temporary for current
>     AMX implementation with no tmm regclass, should
>     be changed in the future. */
> @@ -44,6 +55,18 @@ typedef struct __tile
>  /* Stride (colum width in byte) used for tileload/store */
>  #define _STRIDE 64
>
> +/* We need syscall to use amx functions */
> +int request_perm_xtile_data()
> +{
> +  unsigned long bitmask;
> +
> +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM, XFEATURE_XTILEDATA) ||
> +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> +    return 0;
> +
> +  return (bitmask & XFEATURE_MASK_XTILE) != 0;
> +}
> +
>  /* Initialize tile config by setting all tmm size to 16x64 */
>  void init_tile_config (__tilecfg_u *dst)
>  {
> @@ -186,6 +209,7 @@ main ()
>  #ifdef AMX_BF16
>        && __builtin_cpu_supports ("amx-bf16")
>  #endif
> +      && request_perm_xtile_data ()
>        )
>      {
>        DO_TEST ();
> --
> 2.18.2
>
  
Li, Pan2 via Gcc-patches June 21, 2022, 2:23 a.m. UTC | #2
> -----Original Message-----
> From: Uros Bizjak <ubizjak@gmail.com>
> Sent: Monday, June 20, 2022 10:54 PM
> To: Jiang, Haochen <haochen.jiang@intel.com>
> Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest kernels
> 
> On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang <haochen.jiang@intel.com>
> wrote:
> >
> > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> >
> > Hi all,
> >
> > We need syscall to enable AMX for kernels>=5.4. It is missing in
> > current amx tests, which will cause test fail.
> 
> So this new code is only valid for linux & co?

Thanks for reminding me for that, I only test on linux since the header file is only in linux.

Just updated a patch wrapping with a macro not to change the behavior on windows.

Regtested on x86_64-pc-linux-gnu.

Thx,
Haochen
> 
> Uros.
> 
> >
> > This patch aims to add them to fix this bug.
> >
> > BRs,
> > Haochen
> >
> > gcc/testsuite/ChangeLog:
> >
> >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> >         New function to check if AMX is usable and enable AMX.
> >         (main): Run test if AMX is usable.
> > ---
> >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > +++++++++++++++++++++++
> >  1 file changed, 24 insertions(+)
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > index 434b0e59703..92ed8669304 100644
> > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > @@ -4,11 +4,22 @@
> >  #include <stdlib.h>
> >  #include <string.h>
> >  #include <stdint.h>
> > +#include <unistd.h>
> > +#include <sys/syscall.h>
> >  #ifdef DEBUG
> >  #include <stdio.h>
> >  #endif
> >  #include "cpuid.h"
> >
> > +#define XFEATURE_XTILECFG      17
> > +#define XFEATURE_XTILEDATA     18
> > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> XFEATURE_MASK_XTILEDATA)
> > +
> > +#define ARCH_GET_XCOMP_PERM    0x1022
> > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > +
> >  /* TODO: The tmm emulation is temporary for current
> >     AMX implementation with no tmm regclass, should
> >     be changed in the future. */
> > @@ -44,6 +55,18 @@ typedef struct __tile
> >  /* Stride (colum width in byte) used for tileload/store */  #define
> > _STRIDE 64
> >
> > +/* We need syscall to use amx functions */ int
> > +request_perm_xtile_data() {
> > +  unsigned long bitmask;
> > +
> > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> XFEATURE_XTILEDATA) ||
> > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > +    return 0;
> > +
> > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > +
> >  /* Initialize tile config by setting all tmm size to 16x64 */  void
> > init_tile_config (__tilecfg_u *dst)  { @@ -186,6 +209,7 @@ main ()
> > #ifdef AMX_BF16
> >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > +      && request_perm_xtile_data ()
> >        )
> >      {
> >        DO_TEST ();
> > --
> > 2.18.2
> >
  
Uros Bizjak June 21, 2022, 7:06 a.m. UTC | #3
On Tue, Jun 21, 2022 at 4:23 AM Jiang, Haochen <haochen.jiang@intel.com> wrote:
>
> > -----Original Message-----
> > From: Uros Bizjak <ubizjak@gmail.com>
> > Sent: Monday, June 20, 2022 10:54 PM
> > To: Jiang, Haochen <haochen.jiang@intel.com>
> > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest kernels
> >
> > On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang <haochen.jiang@intel.com>
> > wrote:
> > >
> > > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> > >
> > > Hi all,
> > >
> > > We need syscall to enable AMX for kernels>=5.4. It is missing in
> > > current amx tests, which will cause test fail.
> >
> > So this new code is only valid for linux & co?
>
> Thanks for reminding me for that, I only test on linux since the header file is only in linux.
>
> Just updated a patch wrapping with a macro not to change the behavior on windows.

I think you want __linux__ there, not __unix__.

Uros.

>
> Regtested on x86_64-pc-linux-gnu.
>
> Thx,
> Haochen
> >
> > Uros.
> >
> > >
> > > This patch aims to add them to fix this bug.
> > >
> > > BRs,
> > > Haochen
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> > >         New function to check if AMX is usable and enable AMX.
> > >         (main): Run test if AMX is usable.
> > > ---
> > >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > > +++++++++++++++++++++++
> > >  1 file changed, 24 insertions(+)
> > >
> > > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > index 434b0e59703..92ed8669304 100644
> > > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > @@ -4,11 +4,22 @@
> > >  #include <stdlib.h>
> > >  #include <string.h>
> > >  #include <stdint.h>
> > > +#include <unistd.h>
> > > +#include <sys/syscall.h>
> > >  #ifdef DEBUG
> > >  #include <stdio.h>
> > >  #endif
> > >  #include "cpuid.h"
> > >
> > > +#define XFEATURE_XTILECFG      17
> > > +#define XFEATURE_XTILEDATA     18
> > > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > > +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> > > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> > XFEATURE_MASK_XTILEDATA)
> > > +
> > > +#define ARCH_GET_XCOMP_PERM    0x1022
> > > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > > +
> > >  /* TODO: The tmm emulation is temporary for current
> > >     AMX implementation with no tmm regclass, should
> > >     be changed in the future. */
> > > @@ -44,6 +55,18 @@ typedef struct __tile
> > >  /* Stride (colum width in byte) used for tileload/store */  #define
> > > _STRIDE 64
> > >
> > > +/* We need syscall to use amx functions */ int
> > > +request_perm_xtile_data() {
> > > +  unsigned long bitmask;
> > > +
> > > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> > XFEATURE_XTILEDATA) ||
> > > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > > +    return 0;
> > > +
> > > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > > +
> > >  /* Initialize tile config by setting all tmm size to 16x64 */  void
> > > init_tile_config (__tilecfg_u *dst)  { @@ -186,6 +209,7 @@ main ()
> > > #ifdef AMX_BF16
> > >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > > +      && request_perm_xtile_data ()
> > >        )
> > >      {
> > >        DO_TEST ();
> > > --
> > > 2.18.2
> > >
  
Li, Pan2 via Gcc-patches June 21, 2022, 7:41 a.m. UTC | #4
> -----Original Message-----
> From: Uros Bizjak <ubizjak@gmail.com>
> Sent: Tuesday, June 21, 2022 3:06 PM
> To: Jiang, Haochen <haochen.jiang@intel.com>
> Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest kernels
> 
> On Tue, Jun 21, 2022 at 4:23 AM Jiang, Haochen <haochen.jiang@intel.com>
> wrote:
> >
> > > -----Original Message-----
> > > From: Uros Bizjak <ubizjak@gmail.com>
> > > Sent: Monday, June 20, 2022 10:54 PM
> > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > > kernels
> > >
> > > On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang
> > > <haochen.jiang@intel.com>
> > > wrote:
> > > >
> > > > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> > > >
> > > > Hi all,
> > > >
> > > > We need syscall to enable AMX for kernels>=5.4. It is missing in
> > > > current amx tests, which will cause test fail.
> > >
> > > So this new code is only valid for linux & co?
> >
> > Thanks for reminding me for that, I only test on linux since the header file is
> only in linux.
> >
> > Just updated a patch wrapping with a macro not to change the behavior on
> windows.
> 
> I think you want __linux__ there, not __unix__.

Fixed with __linux__.

Thx,
Haochen

> 
> Uros.
> 
> >
> > Regtested on x86_64-pc-linux-gnu.
> >
> > Thx,
> > Haochen
> > >
> > > Uros.
> > >
> > > >
> > > > This patch aims to add them to fix this bug.
> > > >
> > > > BRs,
> > > > Haochen
> > > >
> > > > gcc/testsuite/ChangeLog:
> > > >
> > > >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> > > >         New function to check if AMX is usable and enable AMX.
> > > >         (main): Run test if AMX is usable.
> > > > ---
> > > >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > > > +++++++++++++++++++++++
> > > >  1 file changed, 24 insertions(+)
> > > >
> > > > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > index 434b0e59703..92ed8669304 100644
> > > > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > @@ -4,11 +4,22 @@
> > > >  #include <stdlib.h>
> > > >  #include <string.h>
> > > >  #include <stdint.h>
> > > > +#include <unistd.h>
> > > > +#include <sys/syscall.h>
> > > >  #ifdef DEBUG
> > > >  #include <stdio.h>
> > > >  #endif
> > > >  #include "cpuid.h"
> > > >
> > > > +#define XFEATURE_XTILECFG      17
> > > > +#define XFEATURE_XTILEDATA     18
> > > > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > > > +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> > > > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> > > XFEATURE_MASK_XTILEDATA)
> > > > +
> > > > +#define ARCH_GET_XCOMP_PERM    0x1022
> > > > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > > > +
> > > >  /* TODO: The tmm emulation is temporary for current
> > > >     AMX implementation with no tmm regclass, should
> > > >     be changed in the future. */
> > > > @@ -44,6 +55,18 @@ typedef struct __tile
> > > >  /* Stride (colum width in byte) used for tileload/store */
> > > > #define _STRIDE 64
> > > >
> > > > +/* We need syscall to use amx functions */ int
> > > > +request_perm_xtile_data() {
> > > > +  unsigned long bitmask;
> > > > +
> > > > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> > > XFEATURE_XTILEDATA) ||
> > > > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > > > +    return 0;
> > > > +
> > > > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > > > +
> > > >  /* Initialize tile config by setting all tmm size to 16x64 */
> > > > void init_tile_config (__tilecfg_u *dst)  { @@ -186,6 +209,7 @@
> > > > main () #ifdef AMX_BF16
> > > >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > > > +      && request_perm_xtile_data ()
> > > >        )
> > > >      {
> > > >        DO_TEST ();
> > > > --
> > > > 2.18.2
> > > >
  
Uros Bizjak June 21, 2022, 2:52 p.m. UTC | #5
On Tue, Jun 21, 2022 at 9:41 AM Jiang, Haochen <haochen.jiang@intel.com> wrote:
>
> > -----Original Message-----
> > From: Uros Bizjak <ubizjak@gmail.com>
> > Sent: Tuesday, June 21, 2022 3:06 PM
> > To: Jiang, Haochen <haochen.jiang@intel.com>
> > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest kernels
> >
> > On Tue, Jun 21, 2022 at 4:23 AM Jiang, Haochen <haochen.jiang@intel.com>
> > wrote:
> > >
> > > > -----Original Message-----
> > > > From: Uros Bizjak <ubizjak@gmail.com>
> > > > Sent: Monday, June 20, 2022 10:54 PM
> > > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > > > kernels
> > > >
> > > > On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang
> > > > <haochen.jiang@intel.com>
> > > > wrote:
> > > > >
> > > > > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> > > > >
> > > > > Hi all,
> > > > >
> > > > > We need syscall to enable AMX for kernels>=5.4. It is missing in
> > > > > current amx tests, which will cause test fail.
> > > >
> > > > So this new code is only valid for linux & co?
> > >
> > > Thanks for reminding me for that, I only test on linux since the header file is
> > only in linux.
> > >
> > > Just updated a patch wrapping with a macro not to change the behavior on
> > windows.
> >
> > I think you want __linux__ there, not __unix__.
>
> Fixed with __linux__.

OK.

Thanks,
Uros.

>
> Thx,
> Haochen
>
> >
> > Uros.
> >
> > >
> > > Regtested on x86_64-pc-linux-gnu.
> > >
> > > Thx,
> > > Haochen
> > > >
> > > > Uros.
> > > >
> > > > >
> > > > > This patch aims to add them to fix this bug.
> > > > >
> > > > > BRs,
> > > > > Haochen
> > > > >
> > > > > gcc/testsuite/ChangeLog:
> > > > >
> > > > >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> > > > >         New function to check if AMX is usable and enable AMX.
> > > > >         (main): Run test if AMX is usable.
> > > > > ---
> > > > >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > > > > +++++++++++++++++++++++
> > > > >  1 file changed, 24 insertions(+)
> > > > >
> > > > > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > index 434b0e59703..92ed8669304 100644
> > > > > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > @@ -4,11 +4,22 @@
> > > > >  #include <stdlib.h>
> > > > >  #include <string.h>
> > > > >  #include <stdint.h>
> > > > > +#include <unistd.h>
> > > > > +#include <sys/syscall.h>
> > > > >  #ifdef DEBUG
> > > > >  #include <stdio.h>
> > > > >  #endif
> > > > >  #include "cpuid.h"
> > > > >
> > > > > +#define XFEATURE_XTILECFG      17
> > > > > +#define XFEATURE_XTILEDATA     18
> > > > > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > > > > +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> > > > > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> > > > XFEATURE_MASK_XTILEDATA)
> > > > > +
> > > > > +#define ARCH_GET_XCOMP_PERM    0x1022
> > > > > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > > > > +
> > > > >  /* TODO: The tmm emulation is temporary for current
> > > > >     AMX implementation with no tmm regclass, should
> > > > >     be changed in the future. */
> > > > > @@ -44,6 +55,18 @@ typedef struct __tile
> > > > >  /* Stride (colum width in byte) used for tileload/store */
> > > > > #define _STRIDE 64
> > > > >
> > > > > +/* We need syscall to use amx functions */ int
> > > > > +request_perm_xtile_data() {
> > > > > +  unsigned long bitmask;
> > > > > +
> > > > > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> > > > XFEATURE_XTILEDATA) ||
> > > > > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > > > > +    return 0;
> > > > > +
> > > > > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > > > > +
> > > > >  /* Initialize tile config by setting all tmm size to 16x64 */
> > > > > void init_tile_config (__tilecfg_u *dst)  { @@ -186,6 +209,7 @@
> > > > > main () #ifdef AMX_BF16
> > > > >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > > > > +      && request_perm_xtile_data ()
> > > > >        )
> > > > >      {
> > > > >        DO_TEST ();
> > > > > --
> > > > > 2.18.2
> > > > >
  
Li, Pan2 via Gcc-patches Sept. 22, 2022, 6:23 a.m. UTC | #6
Hi all,

I would like to backport this patch to GCC 12 release branch as machines with the version of default GCC
is 12.x (which is always using newer kernels), if the patch is not backported, the amx tests will always fail.

Ok for backport?

BRs,
Haochen

> -----Original Message-----
> From: Uros Bizjak <ubizjak@gmail.com>
> Sent: Tuesday, June 21, 2022 10:53 PM
> To: Jiang, Haochen <haochen.jiang@intel.com>
> Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest kernels
> 
> On Tue, Jun 21, 2022 at 9:41 AM Jiang, Haochen <haochen.jiang@intel.com>
> wrote:
> >
> > > -----Original Message-----
> > > From: Uros Bizjak <ubizjak@gmail.com>
> > > Sent: Tuesday, June 21, 2022 3:06 PM
> > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > > kernels
> > >
> > > On Tue, Jun 21, 2022 at 4:23 AM Jiang, Haochen
> > > <haochen.jiang@intel.com>
> > > wrote:
> > > >
> > > > > -----Original Message-----
> > > > > From: Uros Bizjak <ubizjak@gmail.com>
> > > > > Sent: Monday, June 20, 2022 10:54 PM
> > > > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao
> > > > > <hongtao.liu@intel.com>
> > > > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > > > > kernels
> > > > >
> > > > > On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang
> > > > > <haochen.jiang@intel.com>
> > > > > wrote:
> > > > > >
> > > > > > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> > > > > >
> > > > > > Hi all,
> > > > > >
> > > > > > We need syscall to enable AMX for kernels>=5.4. It is missing
> > > > > > in current amx tests, which will cause test fail.
> > > > >
> > > > > So this new code is only valid for linux & co?
> > > >
> > > > Thanks for reminding me for that, I only test on linux since the
> > > > header file is
> > > only in linux.
> > > >
> > > > Just updated a patch wrapping with a macro not to change the
> > > > behavior on
> > > windows.
> > >
> > > I think you want __linux__ there, not __unix__.
> >
> > Fixed with __linux__.
> 
> OK.
> 
> Thanks,
> Uros.
> 
> >
> > Thx,
> > Haochen
> >
> > >
> > > Uros.
> > >
> > > >
> > > > Regtested on x86_64-pc-linux-gnu.
> > > >
> > > > Thx,
> > > > Haochen
> > > > >
> > > > > Uros.
> > > > >
> > > > > >
> > > > > > This patch aims to add them to fix this bug.
> > > > > >
> > > > > > BRs,
> > > > > > Haochen
> > > > > >
> > > > > > gcc/testsuite/ChangeLog:
> > > > > >
> > > > > >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> > > > > >         New function to check if AMX is usable and enable AMX.
> > > > > >         (main): Run test if AMX is usable.
> > > > > > ---
> > > > > >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > > > > > +++++++++++++++++++++++
> > > > > >  1 file changed, 24 insertions(+)
> > > > > >
> > > > > > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > index 434b0e59703..92ed8669304 100644
> > > > > > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > @@ -4,11 +4,22 @@
> > > > > >  #include <stdlib.h>
> > > > > >  #include <string.h>
> > > > > >  #include <stdint.h>
> > > > > > +#include <unistd.h>
> > > > > > +#include <sys/syscall.h>
> > > > > >  #ifdef DEBUG
> > > > > >  #include <stdio.h>
> > > > > >  #endif
> > > > > >  #include "cpuid.h"
> > > > > >
> > > > > > +#define XFEATURE_XTILECFG      17
> > > > > > +#define XFEATURE_XTILEDATA     18
> > > > > > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > > > > > +#define XFEATURE_MASK_XTILEDATA        (1 << XFEATURE_XTILEDATA)
> > > > > > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> > > > > XFEATURE_MASK_XTILEDATA)
> > > > > > +
> > > > > > +#define ARCH_GET_XCOMP_PERM    0x1022
> > > > > > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > > > > > +
> > > > > >  /* TODO: The tmm emulation is temporary for current
> > > > > >     AMX implementation with no tmm regclass, should
> > > > > >     be changed in the future. */ @@ -44,6 +55,18 @@ typedef
> > > > > > struct __tile
> > > > > >  /* Stride (colum width in byte) used for tileload/store */
> > > > > > #define _STRIDE 64
> > > > > >
> > > > > > +/* We need syscall to use amx functions */ int
> > > > > > +request_perm_xtile_data() {
> > > > > > +  unsigned long bitmask;
> > > > > > +
> > > > > > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> > > > > XFEATURE_XTILEDATA) ||
> > > > > > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > > > > > +    return 0;
> > > > > > +
> > > > > > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > > > > > +
> > > > > >  /* Initialize tile config by setting all tmm size to 16x64 */
> > > > > > void init_tile_config (__tilecfg_u *dst)  { @@ -186,6 +209,7
> > > > > > @@ main () #ifdef AMX_BF16
> > > > > >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > > > > > +      && request_perm_xtile_data ()
> > > > > >        )
> > > > > >      {
> > > > > >        DO_TEST ();
> > > > > > --
> > > > > > 2.18.2
> > > > > >
  
Li, Pan2 via Gcc-patches Sept. 22, 2022, 6:23 a.m. UTC | #7
> -----Original Message-----
> From: Jiang, Haochen <haochen.jiang@intel.com>
> Sent: Thursday, September 22, 2022 2:23 PM
> To: Uros Bizjak <ubizjak@gmail.com>
> Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> Subject: RE: [PATCH] i386: Add syscall to enable AMX for latest kernels
> 
> Hi all,
> 
> I would like to backport this patch to GCC 12 release branch as machines with
> the version of default GCC is 12.x (which is always using newer kernels), if the
> patch is not backported, the amx tests will always fail.
> 
> Ok for backport?
Ok.
> 
> BRs,
> Haochen
> 
> > -----Original Message-----
> > From: Uros Bizjak <ubizjak@gmail.com>
> > Sent: Tuesday, June 21, 2022 10:53 PM
> > To: Jiang, Haochen <haochen.jiang@intel.com>
> > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > kernels
> >
> > On Tue, Jun 21, 2022 at 9:41 AM Jiang, Haochen
> > <haochen.jiang@intel.com>
> > wrote:
> > >
> > > > -----Original Message-----
> > > > From: Uros Bizjak <ubizjak@gmail.com>
> > > > Sent: Tuesday, June 21, 2022 3:06 PM
> > > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao <hongtao.liu@intel.com>
> > > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for latest
> > > > kernels
> > > >
> > > > On Tue, Jun 21, 2022 at 4:23 AM Jiang, Haochen
> > > > <haochen.jiang@intel.com>
> > > > wrote:
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Uros Bizjak <ubizjak@gmail.com>
> > > > > > Sent: Monday, June 20, 2022 10:54 PM
> > > > > > To: Jiang, Haochen <haochen.jiang@intel.com>
> > > > > > Cc: gcc-patches@gcc.gnu.org; Liu, Hongtao
> > > > > > <hongtao.liu@intel.com>
> > > > > > Subject: Re: [PATCH] i386: Add syscall to enable AMX for
> > > > > > latest kernels
> > > > > >
> > > > > > On Mon, Jun 20, 2022 at 10:04 AM Haochen Jiang
> > > > > > <haochen.jiang@intel.com>
> > > > > > wrote:
> > > > > > >
> > > > > > > From: "Jiang, Haochen" <haochen.jiang@intel.com>
> > > > > > >
> > > > > > > Hi all,
> > > > > > >
> > > > > > > We need syscall to enable AMX for kernels>=5.4. It is
> > > > > > > missing in current amx tests, which will cause test fail.
> > > > > >
> > > > > > So this new code is only valid for linux & co?
> > > > >
> > > > > Thanks for reminding me for that, I only test on linux since the
> > > > > header file is
> > > > only in linux.
> > > > >
> > > > > Just updated a patch wrapping with a macro not to change the
> > > > > behavior on
> > > > windows.
> > > >
> > > > I think you want __linux__ there, not __unix__.
> > >
> > > Fixed with __linux__.
> >
> > OK.
> >
> > Thanks,
> > Uros.
> >
> > >
> > > Thx,
> > > Haochen
> > >
> > > >
> > > > Uros.
> > > >
> > > > >
> > > > > Regtested on x86_64-pc-linux-gnu.
> > > > >
> > > > > Thx,
> > > > > Haochen
> > > > > >
> > > > > > Uros.
> > > > > >
> > > > > > >
> > > > > > > This patch aims to add them to fix this bug.
> > > > > > >
> > > > > > > BRs,
> > > > > > > Haochen
> > > > > > >
> > > > > > > gcc/testsuite/ChangeLog:
> > > > > > >
> > > > > > >         * gcc.target/i386/amx-check.h (request_perm_xtile_data):
> > > > > > >         New function to check if AMX is usable and enable AMX.
> > > > > > >         (main): Run test if AMX is usable.
> > > > > > > ---
> > > > > > >  gcc/testsuite/gcc.target/i386/amx-check.h | 24
> > > > > > > +++++++++++++++++++++++
> > > > > > >  1 file changed, 24 insertions(+)
> > > > > > >
> > > > > > > diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > > b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > > index 434b0e59703..92ed8669304 100644
> > > > > > > --- a/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > > +++ b/gcc/testsuite/gcc.target/i386/amx-check.h
> > > > > > > @@ -4,11 +4,22 @@
> > > > > > >  #include <stdlib.h>
> > > > > > >  #include <string.h>
> > > > > > >  #include <stdint.h>
> > > > > > > +#include <unistd.h>
> > > > > > > +#include <sys/syscall.h>
> > > > > > >  #ifdef DEBUG
> > > > > > >  #include <stdio.h>
> > > > > > >  #endif
> > > > > > >  #include "cpuid.h"
> > > > > > >
> > > > > > > +#define XFEATURE_XTILECFG      17
> > > > > > > +#define XFEATURE_XTILEDATA     18
> > > > > > > +#define XFEATURE_MASK_XTILECFG (1 << XFEATURE_XTILECFG)
> > > > > > > +#define XFEATURE_MASK_XTILEDATA        (1 <<
> XFEATURE_XTILEDATA)
> > > > > > > +#define XFEATURE_MASK_XTILE    (XFEATURE_MASK_XTILECFG |
> > > > > > XFEATURE_MASK_XTILEDATA)
> > > > > > > +
> > > > > > > +#define ARCH_GET_XCOMP_PERM    0x1022
> > > > > > > +#define ARCH_REQ_XCOMP_PERM    0x1023
> > > > > > > +
> > > > > > >  /* TODO: The tmm emulation is temporary for current
> > > > > > >     AMX implementation with no tmm regclass, should
> > > > > > >     be changed in the future. */ @@ -44,6 +55,18 @@ typedef
> > > > > > > struct __tile
> > > > > > >  /* Stride (colum width in byte) used for tileload/store */
> > > > > > > #define _STRIDE 64
> > > > > > >
> > > > > > > +/* We need syscall to use amx functions */ int
> > > > > > > +request_perm_xtile_data() {
> > > > > > > +  unsigned long bitmask;
> > > > > > > +
> > > > > > > +  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM,
> > > > > > XFEATURE_XTILEDATA) ||
> > > > > > > +      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
> > > > > > > +    return 0;
> > > > > > > +
> > > > > > > +  return (bitmask & XFEATURE_MASK_XTILE) != 0; }
> > > > > > > +
> > > > > > >  /* Initialize tile config by setting all tmm size to 16x64
> > > > > > > */ void init_tile_config (__tilecfg_u *dst)  { @@ -186,6
> > > > > > > +209,7 @@ main () #ifdef AMX_BF16
> > > > > > >        && __builtin_cpu_supports ("amx-bf16")  #endif
> > > > > > > +      && request_perm_xtile_data ()
> > > > > > >        )
> > > > > > >      {
> > > > > > >        DO_TEST ();
> > > > > > > --
> > > > > > > 2.18.2
> > > > > > >
  

Patch

diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h b/gcc/testsuite/gcc.target/i386/amx-check.h
index 434b0e59703..92ed8669304 100644
--- a/gcc/testsuite/gcc.target/i386/amx-check.h
+++ b/gcc/testsuite/gcc.target/i386/amx-check.h
@@ -4,11 +4,22 @@ 
 #include <stdlib.h>
 #include <string.h>
 #include <stdint.h>
+#include <unistd.h>
+#include <sys/syscall.h>
 #ifdef DEBUG
 #include <stdio.h>
 #endif
 #include "cpuid.h"
 
+#define XFEATURE_XTILECFG	17
+#define XFEATURE_XTILEDATA	18
+#define XFEATURE_MASK_XTILECFG	(1 << XFEATURE_XTILECFG)
+#define XFEATURE_MASK_XTILEDATA	(1 << XFEATURE_XTILEDATA)
+#define XFEATURE_MASK_XTILE	(XFEATURE_MASK_XTILECFG | XFEATURE_MASK_XTILEDATA)
+
+#define ARCH_GET_XCOMP_PERM	0x1022
+#define ARCH_REQ_XCOMP_PERM	0x1023
+
 /* TODO: The tmm emulation is temporary for current
    AMX implementation with no tmm regclass, should
    be changed in the future. */
@@ -44,6 +55,18 @@  typedef struct __tile
 /* Stride (colum width in byte) used for tileload/store */
 #define _STRIDE 64
 
+/* We need syscall to use amx functions */
+int request_perm_xtile_data()
+{
+  unsigned long bitmask;
+
+  if (syscall (SYS_arch_prctl, ARCH_REQ_XCOMP_PERM, XFEATURE_XTILEDATA) ||
+      syscall (SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask))
+    return 0;
+
+  return (bitmask & XFEATURE_MASK_XTILE) != 0;
+}
+
 /* Initialize tile config by setting all tmm size to 16x64 */
 void init_tile_config (__tilecfg_u *dst)
 {
@@ -186,6 +209,7 @@  main ()
 #ifdef AMX_BF16
       && __builtin_cpu_supports ("amx-bf16")
 #endif
+      && request_perm_xtile_data ()
       )
     {
       DO_TEST ();