Message ID | 20220620080442.735284-1-haochen.jiang@intel.com |
---|---|
State | New |
Headers | show |
Series | i386: Add syscall to enable AMX for latest kernels | expand |
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 >
> -----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 > >
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 > > >
> -----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 > > > >
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 > > > > >
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 > > > > > >
> -----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 > > > > > > >
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 ();
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(+)