VDPBF16PS
Producto de puntos de los pares BF16 Acumulado Into Packed Single Precision
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
EVEX.128.F3.0F38.W0 52 /r | VDPBF16PS xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst | A | Valido | Valido | Multiply BF16 pares de xmm2 y AND AVX512VL) xmm3/m128, y acumular los resultados de precisión OR AVX10.1 empaquetados en xmm1 con máscara de escritura k1. |
EVEX.256.F3.0F38.W0 52 /r | VDPBF16PS ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst | A | Valido | Valido | Multiply BF16 pares de ymm2 y AND AVX512VL) ymm3/m256, y acumular los resultados de precisión OR AVX10.1 empaquetados en ymm1 con máscara de escritura k1. |
EVEX.512.F3.0F38.W0 52 /r | VDPBF16PS zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst | A | Valido | Valido | Multiply BF16 pares de zmm2 y AND AVX512F) zmm3/m512, y acumular los resultados de precisión OR AVX10.1 empaquetados en zmm1 con máscara de escritura k1. |
Codificacion de operandos
Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.
A
modrm.regescriturabyte ModRM, campo reg (bits 5-3)evex.vvvvlecturaprefijo EVEX, campo vvvv (invertido)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
Tupla: Full
Coste medido
Cargando las mediciones de arch-data...
Descripción
Esta instrucción realiza un producto de punto SIMD de dos pares BF16 y se acumula en un registro de precisión único empaquetado.
El modo de redondeo "Round to nearby even" se utiliza cuando se hace cada acumulación del FMA. Los denormales de salida son siempre a cero y los denormales de entrada siempre se tratan como cero. MXCSR no es consultado ni actualizado.
Las prioridades de propagación de la NaN se describen en el cuadro 5-4.
NaN Prioridad Descripción Tabla 5-4. NaN Propagation Priorities
1 src1 low is NaN Comments
2 src2 low is NaN Lower part has priority over upper part, i.e., it overrides the upper part.
3 src1 high is NaN
4 src2 high is NaN Upper part may be overridden if lower has NaN.
5 srcdest is NaN Dest is propagated if no NaN is encountered by src2.Operación
Define make_fp32(x):
// The x parameter is bfloat16. Pack it in to upper 16b of a dword. The bit pattern is a legal fp32 value. Return that bit pattern.
dword := 0
dword[31:16] := x
RETURN dword
VDPBF16PS srcdest, src1, src2
VL = (128, 256, 512)
KL = VL/32
origdest := srcdest
FOR i := 0 to KL-1:
IF k1[ i ] or *no writemask*:
IF src2 is memory and evex.b == 1:
t := src2.dword[0]
ELSE:
t := src2.dword[ i ]
// FP32 FMA with daz in, ftz out and RNE rounding. MXCSR neither consulted nor updated.
srcdest.fp32[ i ] += make_fp32(src1.bfloat16[2*i+1]) * make_fp32(t.bfloat[1])
srcdest.fp32[ i ] += make_fp32(src1.bfloat16[2*i+0]) * make_fp32(t.bfloat[0])
ELSE IF *zeroing*:
srcdest.dword[ i ] := 0
ELSE: // merge masking, dest element unchanged
srcdest.dword[ i ] := origdest.dword[ i ]
srcdest[MAXVL-1:VL] := 0Intel C/C++ compilador intrínseco
VDPBF16PS __m128 _mm_dpbf16_ps(__m128, __m128bh, __m128bh);
VDPBF16PS __m128 _mm_mask_dpbf16_ps( __m128, __mmask8, __m128bh, __m128bh);
VDPBF16PS __m128 _mm_maskz_dpbf16_ps(__mmask8, __m128, __m128bh, __m128bh);
VDPBF16PS __m256 _mm256_dpbf16_ps(__m256, __m256bh, __m256bh);
VDPBF16PS __m256 _mm256_mask_dpbf16_ps(__m256, __mmask8, __m256bh, __m256bh);
VDPBF16PS __m256 _mm256_maskz_dpbf16_ps(__mmask8, __m256, __m256bh, __m256bh);
VDPBF16PS __m512 _mm512_dpbf16_ps(__m512, __m512bh, __m512bh);
VDPBF16PS __m512 _mm512_mask_dpbf16_ps(__m512, __mmask16, __m512bh, __m512bh);
VDPBF16PS __m512 _mm512_maskz_dpbf16_ps(__mmask16, __m512, __m512bh, __m512bh);SIMD coma flotante Excepciones
None.
Otras excepciones
Ver Tabla 2-51, "Tipo E4 Clase Condiciones de Excepción".