public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Add optional __Bfloat16 support
@ 2022-06-10  7:47 liuhongt
  2022-06-10  7:50 ` Hongtao Liu
  2022-06-10  9:38 ` Florian Weimer
  0 siblings, 2 replies; 6+ messages in thread
From: liuhongt @ 2022-06-10  7:47 UTC (permalink / raw)
  To: x86-64-abi; +Cc: gcc-patches, libc-alpha, llvm-dev, hjl.tools

Pass and return __Bfloat16 values in XMM registers.

Background:
__Bfloat16 (BF16) is a new floating-point format that can accelerate machine learning (deep learning training, in particular) algorithms.
It's first introduced by Intel AVX-512 extension called AVX-512_BF16. __Bfloat16 has 8 bits of exponent and 7 bits of mantissa and it's different from _Float16.

Movivation:
Currently __bfloat16 is a typedef of short, which creates a problem where the compiler does not raise any alarms if it is used to add, subtract, multiply or divide, but the result of the calculation is actually meaningless.
To solve this problem, a real scalar type __Bfloat16 needs to be introduced. It is mainly used for intrinsics, not available for C standard operators. __Bfloat16 will also be used for movement like passing parameter, load and store, vector initialization, vector shuffle, and .etc. It creates a need for a corresponding psABI.

---
 x86-64-ABI/low-level-sys-info.tex | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/x86-64-ABI/low-level-sys-info.tex b/x86-64-ABI/low-level-sys-info.tex
index a8b69db..ba8db0d 100644
--- a/x86-64-ABI/low-level-sys-info.tex
+++ b/x86-64-ABI/low-level-sys-info.tex
@@ -302,6 +302,12 @@ be used to represent the type, is a family of integer types.
 This permits the use of these types in allocated arrays using the common
 sizeof(Array)/sizeof(ElementType) pattern.
 
+\subsubsection{Special Types}
+
+The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
+It is used for \code{BF16} related intrinsics, it cannot be
+used with standard C operators.
+
 \subsubsection{Aggregates and Unions}
 
 Structures and unions assume the alignment of their most strictly
@@ -563,8 +569,8 @@ The basic types are assigned their natural classes:
 \item Arguments of types (signed and unsigned) \code{_Bool}, \code{char},
   \code{short}, \code{int}, \code{long}, \code{long long}, and
   pointers are in the INTEGER class.
-\item Arguments of types \code{_Float16}, \code{float}, \code{double},
-  \code{_Decimal32},
+\item Arguments of types \code{_Float16}, \code{__Bfloat16}, \code{float},
+  \code{double}, \code{_Decimal32},
   \code{_Decimal64} and \code{__m64} are in class SSE.
 \item Arguments of types \code{__float128}, \code{_Decimal128}
   and \code{__m128} are split into two halves.  The least significant
-- 
2.18.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add optional __Bfloat16 support
  2022-06-10  7:47 [PATCH] Add optional __Bfloat16 support liuhongt
@ 2022-06-10  7:50 ` Hongtao Liu
  2022-06-10  9:38 ` Florian Weimer
  1 sibling, 0 replies; 6+ messages in thread
From: Hongtao Liu @ 2022-06-10  7:50 UTC (permalink / raw)
  Cc: x86-64-abi, llvm-dev, GNU C Library, GCC Patches

On Fri, Jun 10, 2022 at 3:47 PM liuhongt via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> Pass and return __Bfloat16 values in XMM registers.
>
> Background:
> __Bfloat16 (BF16) is a new floating-point format that can accelerate machine learning (deep learning training, in particular) algorithms.
> It's first introduced by Intel AVX-512 extension called AVX-512_BF16. __Bfloat16 has 8 bits of exponent and 7 bits of mantissa and it's different from _Float16.
>
> Movivation:
> Currently __bfloat16 is a typedef of short, which creates a problem where the compiler does not raise any alarms if it is used to add, subtract, multiply or divide, but the result of the calculation is actually meaningless.
> To solve this problem, a real scalar type __Bfloat16 needs to be introduced. It is mainly used for intrinsics, not available for C standard operators. __Bfloat16 will also be used for movement like passing parameter, load and store, vector initialization, vector shuffle, and .etc. It creates a need for a corresponding psABI.
>
> ---
>  x86-64-ABI/low-level-sys-info.tex | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/x86-64-ABI/low-level-sys-info.tex b/x86-64-ABI/low-level-sys-info.tex
> index a8b69db..ba8db0d 100644
> --- a/x86-64-ABI/low-level-sys-info.tex
> +++ b/x86-64-ABI/low-level-sys-info.tex
> @@ -302,6 +302,12 @@ be used to represent the type, is a family of integer types.
>  This permits the use of these types in allocated arrays using the common
>  sizeof(Array)/sizeof(ElementType) pattern.
>
> +\subsubsection{Special Types}
> +
> +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
> +It is used for \code{BF16} related intrinsics, it cannot be
> +used with standard C operators.
> +
>  \subsubsection{Aggregates and Unions}
>
>  Structures and unions assume the alignment of their most strictly
> @@ -563,8 +569,8 @@ The basic types are assigned their natural classes:
>  \item Arguments of types (signed and unsigned) \code{_Bool}, \code{char},
>    \code{short}, \code{int}, \code{long}, \code{long long}, and
>    pointers are in the INTEGER class.
> -\item Arguments of types \code{_Float16}, \code{float}, \code{double},
> -  \code{_Decimal32},
> +\item Arguments of types \code{_Float16}, \code{__Bfloat16}, \code{float},
> +  \code{double}, \code{_Decimal32},
>    \code{_Decimal64} and \code{__m64} are in class SSE.
>  \item Arguments of types \code{__float128}, \code{_Decimal128}
>    and \code{__m128} are split into two halves.  The least significant
> --
> 2.18.1
>


-- 
BR,
Hongtao

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add optional __Bfloat16 support
  2022-06-10  7:47 [PATCH] Add optional __Bfloat16 support liuhongt
  2022-06-10  7:50 ` Hongtao Liu
@ 2022-06-10  9:38 ` Florian Weimer
  2022-06-10 14:44   ` H.J. Lu
  1 sibling, 1 reply; 6+ messages in thread
From: Florian Weimer @ 2022-06-10  9:38 UTC (permalink / raw)
  To: liuhongt via Libc-alpha; +Cc: x86-64-abi, liuhongt, llvm-dev, gcc-patches

* liuhongt via Libc-alpha:

> +\subsubsection{Special Types}
> +
> +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
> +It is used for \code{BF16} related intrinsics, it cannot be
> +used with standard C operators.

I think it's not necessary to specify whether the type supports certain
C operators (surely assignment will work?).  If they are added later,
the ABI won't need changing.

Thanks,
Florian


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add optional __Bfloat16 support
  2022-06-10  9:38 ` Florian Weimer
@ 2022-06-10 14:44   ` H.J. Lu
  2022-06-10 17:45     ` H.J. Lu
  0 siblings, 1 reply; 6+ messages in thread
From: H.J. Lu @ 2022-06-10 14:44 UTC (permalink / raw)
  To: Florian Weimer
  Cc: liuhongt via Libc-alpha, x86-64-abi, liuhongt, LLVM Dev, GCC Patches

On Fri, Jun 10, 2022 at 2:38 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * liuhongt via Libc-alpha:
>
> > +\subsubsection{Special Types}
> > +
> > +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
> > +It is used for \code{BF16} related intrinsics, it cannot be

Please mention that this is an alternate encoding format for 16-bit floating
point.  It has the same size and alignment as _Float16.

> > +used with standard C operators.
>
> I think it's not necessary to specify whether the type supports certain
> C operators (surely assignment will work?).  If they are added later,
> the ABI won't need changing.
>

If _Bfloat16 becomes a fundamental type, the ABI should be changed to
move it together with other scalar types.

-- 
H.J.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add optional __Bfloat16 support
  2022-06-10 14:44   ` H.J. Lu
@ 2022-06-10 17:45     ` H.J. Lu
  2022-06-13  6:29       ` Hongtao Liu
  0 siblings, 1 reply; 6+ messages in thread
From: H.J. Lu @ 2022-06-10 17:45 UTC (permalink / raw)
  To: Florian Weimer
  Cc: liuhongt via Libc-alpha, x86-64-abi, liuhongt, LLVM Dev, GCC Patches

On Fri, Jun 10, 2022 at 7:44 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Fri, Jun 10, 2022 at 2:38 AM Florian Weimer <fweimer@redhat.com> wrote:
> >
> > * liuhongt via Libc-alpha:
> >
> > > +\subsubsection{Special Types}
> > > +
> > > +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
> > > +It is used for \code{BF16} related intrinsics, it cannot be
>
> Please mention that this is an alternate encoding format for 16-bit floating
> point.  It has the same size and alignment as _Float16.

It also follows the same rules as _Float16 for parameter passing and function
return.

> > > +used with standard C operators.
> >
> > I think it's not necessary to specify whether the type supports certain
> > C operators (surely assignment will work?).  If they are added later,
> > the ABI won't need changing.
> >
>
> If _Bfloat16 becomes a fundamental type, the ABI should be changed to
> move it together with other scalar types.
>
> --
> H.J.



-- 
H.J.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Add optional __Bfloat16 support
  2022-06-10 17:45     ` H.J. Lu
@ 2022-06-13  6:29       ` Hongtao Liu
  0 siblings, 0 replies; 6+ messages in thread
From: Hongtao Liu @ 2022-06-13  6:29 UTC (permalink / raw)
  To: H.J. Lu
  Cc: Florian Weimer, liuhongt via Libc-alpha, x86-64-abi, liuhongt,
	LLVM Dev, GCC Patches

On Sat, Jun 11, 2022 at 1:46 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Fri, Jun 10, 2022 at 7:44 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > On Fri, Jun 10, 2022 at 2:38 AM Florian Weimer <fweimer@redhat.com> wrote:
> > >
> > > * liuhongt via Libc-alpha:
> > >
> > > > +\subsubsection{Special Types}
> > > > +
> > > > +The \code{__Bfloat16} type uses a 8-bit exponent and 7-bit mantissa.
> > > > +It is used for \code{BF16} related intrinsics, it cannot be
> >
> > Please mention that this is an alternate encoding format for 16-bit floating
> > point.  It has the same size and alignment as _Float16.
>
> It also follows the same rules as _Float16 for parameter passing and function
> return.

How about
+\subsubsection{Special Types}
+
+The \code{__Bfloat16} type has an alternate encoding format for 16-bit
+floating point with 8-bit exponent and 7-bit mantissa. It has the same size,
+alignment, parameter passing and return rules as _Float16.
+It is used for \code{BF16} related intrinsics, it cannot be used with standard
+C operators.
+
>
> > > > +used with standard C operators.
> > >
> > > I think it's not necessary to specify whether the type supports certain
> > > C operators (surely assignment will work?).  If they are added later,
> > > the ABI won't need changing.
> > >
> >
> > If _Bfloat16 becomes a fundamental type, the ABI should be changed to
> > move it together with other scalar types.
> >
> > --
> > H.J.
>
>
>
> --
> H.J.
>
> --
> You received this message because you are subscribed to the Google Groups "X86-64 System V Application Binary Interface" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to x86-64-abi+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/x86-64-abi/CAMe9rOrvrZRbksjQ%2BY8caC%3DYo%3D%3DoFY5%2BmuOGf9UZRh6L7pUQjw%40mail.gmail.com.



-- 
BR,
Hongtao

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-06-13  6:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-10  7:47 [PATCH] Add optional __Bfloat16 support liuhongt
2022-06-10  7:50 ` Hongtao Liu
2022-06-10  9:38 ` Florian Weimer
2022-06-10 14:44   ` H.J. Lu
2022-06-10 17:45     ` H.J. Lu
2022-06-13  6:29       ` Hongtao Liu

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).