On Fri, Jun 10, 2022 at 3:47 PM liuhongt via Libc-alpha
<libc-al...@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

Reply via email to